Trouble with my function

I want to run this code:
syms x
syms y(x)
y(x) = 5*(x^2);
values = 4;
h = 1;
derivative(5,1)
function yd = derivative(values, h)
syms y(x)
yd = (y(values + h) - y(values - h)) / (2*h);
end
But instead of getting the real value ( in this case 40 ), I got :
ans =
y(6)/2 - y(4)/2
How can I solve this please.

Answers (1)

You need to tell your ‘derivative’ function what ‘y’ is.
Changing ‘derivative’ to an anonymous function (for my convenience) and otherwise leaving it unchanged (except to add ‘y’ as an argument):
syms x y(x)
derivative = @(values, h, y) (y(values + h) - y(values - h)) / (2*h);
y(x) = 5*(x^2);
values = 4;
h = 1;
Result = derivative(5,1,y)
produces:
Result =
50
Note —
Check = diff(y)
CheckTest = Check(values)
produces:
CheckTest =
40
I will let you troubleshoot that discrepancy.

6 Comments

but it is neccessery for me to use
function
yd = derivative(values, h)
end
O.K., then do so. I used the anonymous funciton version because it is more convenient for me. The results will be the same.
It will still be necessary to include ‘y’ as an argument, regardless of the function format.
Please how can we do it using
function
yd = derivative(values, h)
end
And you said that i have to include 'y' as an argument.
It must be some version of:
function yd = derivative(values, h, y)
yd = (y(values + h) - y(values - h)) / (2*h);
end
The order of the arguments are not important, so long as the call to ‘derivative’ has them in the same order.
And you said that i have to include 'y' as an argument.
I did, because ‘derivative’ does not otherwise have a definition of ‘y’ (in most instances, however I will not go into the exceptions here), so it must be passed as an argument.
It is also not necessary (and is likely not appropriate) to declare:
syms y(x)
inside ‘derivative’, since it already has been declared (and therefore exists) as a symbolic function.
So the code should be like this:
syms x y(x)
y(x) = 5*(x^2);
values = 4;
h = 1;
derivative(5,1)
function yd = derivative(values, h, y)
yd = (y(values + h) - y(values - h)) / (2*h);
end
If yes, I still got the error message
Thank you for your help
I am not getting any error messages when I run the code I posted.
You need to include ‘y’ as an argument in your call to it. Currently, you are not doing that. See my original Answer in order to unbderstand how to do that correctly.
Other than that, I have no idea what the problem is with your implementation of it.

Sign in to comment.

Asked:

on 9 Jan 2021

Commented:

on 9 Jan 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!