The discussion centers on methods for implementing derivative calculations using the limit definition of a derivative. Two primary approaches are highlighted: numerical and symbolic. The numerical approach involves evaluating a user-defined function at specific points and using the secant method to approximate the derivative. This method requires a parser for well-formatted expressions and allows for experimentation with the value of 'd' in the formula f '(3) ~ f(3 + d) - f(3 - d) / 2d.The symbolic approach is more complex, involving the transformation of mathematical expressions into tokens and applying differentiation rules recursively. This requires a solid understanding of differentiation properties such as product, chain, and quotient rules. The discussion also critiques a provided C code snippet intended for differentiation, pointing out issues such as incorrect return values, type usage, and the need for function pointers. It suggests that implementing symbolic differentiation in C is challenging and may be more manageable in higher-level languages like Python or specialized languages like Scheme, which facilitate symbolic computation.
#1
clope023
990
130
does anyone have ideas or easy to read versions of code for this? I was looking for ways to do it using the limit definition of a derivative of a function and I've found a few applets but nothing that is that clear; any ideas are appreciated.
In general, you can adopt an approximate numerical approach, or an exact symbolic approach.
In the numerical approach, all you need to do is have some way of evaluating a user-defined function for a given value of x. You could write this by yourself (you would have to write a parser that would recognize well-formatted expressions, like a calculator), or you could use already existing code (you should be able to find lots of this kind of thing). So I enter
f(x) = 2*x + (exp(-3*x+2)) and I want f '(3)...
You approximate the derivative using the secant method. Basically,
f '(3) ~ f(3 + d) - f(3 - d) / 2d
You will want to play around with the value of d, but that's about all there is to it.The symbolic approach, on the other hand, will change everything to tokens, and recursively differentiate the tokens. The base cases will consist of polynomial expressions, sines and cosines, exponentials, etc. Then just build into the interpreter the properties of differentiation - you know, like the product, chain, quotient, power, etc. rules - and then you can change the user function into a new function.
Then you can just evaluate the derivative function at the desired point.
The answer to your question depends on which strategy you find more appealing.
#3
clope023
990
130
csprof2000 said:
In general, you can adopt an approximate numerical approach, or an exact symbolic approach.
In the numerical approach, all you need to do is have some way of evaluating a user-defined function for a given value of x. You could write this by yourself (you would have to write a parser that would recognize well-formatted expressions, like a calculator), or you could use already existing code (you should be able to find lots of this kind of thing). So I enter
f(x) = 2*x + (exp(-3*x+2)) and I want f '(3)...
You approximate the derivative using the secant method. Basically,
f '(3) ~ f(3 + d) - f(3 - d) / 2d
You will want to play around with the value of d, but that's about all there is to it.
The symbolic approach, on the other hand, will change everything to tokens, and recursively differentiate the tokens. The base cases will consist of polynomial expressions, sines and cosines, exponentials, etc. Then just build into the interpreter the properties of differentiation - you know, like the product, chain, quotient, power, etc. rules - and then you can change the user function into a new function.
Then you can just evaluate the derivative function at the desired point.
The answer to your question depends on which strategy you find more appealing.
interesting, this is what I tried to write for a derivative function but it gave me a 0 so obviously it wasn't correct (in C)
int diff(int function, int h)
{
function = ((function+h)-function)%h;
return 0;
}
you'll have to forgive me but I'm not following how the symbolic approach is done
#4
signerror
175
3
clope023 said:
Code:
int diff(int function, int h)
{
function = ((function+h)-function)%h;
return 0;
}
Several issues:
* That function returns 0.
* It has integer types, where you probably want to use a floating-point type like 'float' or 'double'.
* '%' is a modulus operator; '/' is division
* Your 'function' argument is of integer type ('int'), not function type. It is a number, not a function of a number.
The last issue is most significant, and problematic. You will, unfortunately, need to use C's function pointers to implement these kinds of things, functions which take functions as arguments. You will probably want to look this up in whatever C reference you have. For example, differentiation:
Both approaches are difficult and dangerous (in the sense, it is easy to make errors and not be able to find them). The C language was not designed to support this type of programming. If you know any high-level languages, it becomes much easier. Python, for instance - very easy-to-use, easy-to-learn language:
(Note the lack of type annotations - Python will infer that f is a function, and x and dx are numbers. The 1.0 is there to coerce floating point division, as opposed to integer division with rounding.)
Symbolic differentiation is much harder. To implement it in C, you will need to figure out a way to represent the structure of a symbolic expression as a C data structure (probably a tree, made with pointers). Then you will need to write a function to differentiate such an expression, probably acting recursively - taking the expression, breaking it up, differentiating the parts, and combining them using (e.g.) the product rule.
However, it is easier if you use a symbolic programming language, like the educational language Scheme. For example, there is a worked example of symbolic differentiation in chapter 2 of the free book "Structure and Interpretation of Computer Programs". It's not particularly easy, but if you're motivated...
i am a cse student and as a second year student i started building apps. by sing chatgpt i am getting frontend files and backend files but i fail to connect those files. how to learn it and when i asked my friend he said learn about api keys. should i learn that or learn something new
I've tried to intuit public key encryption but never quite managed.
But this seems to wrap it up in a bow.
This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher.
Is this how PKE works?
No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
Trying to package up a small bank account manager project that I have been tempering on for a while. One that is certainly worth something to me. Although I have created methods to whip up quick documents with all fields and properties. I would like something better to reference in order to express the mechanical functions. It is unclear to me about any standardized format for code documentation that exists. I have tried object orientated diagrams with shapes to try and express the...