Create an anonymous function after Symbolic differentiation
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Giorgos Papakonstantinou
el 13 de Mayo de 2013
Comentada: Walter Roberson
el 13 de Abr. de 2018
I want to differentiate a function f and the calculate the derivative of f at value of x. How can I do that? for example:
syms x
f=@(x) x^3+3*x+1;
g=diff(f(x))
Preferably I would like to create a function handle of the derivative and then calculate the derivative at x.
0 comentarios
Respuesta aceptada
Sean de Wolski
el 13 de Mayo de 2013
Almost there!
gfun = matlabFunction(g)
g(2)
4 comentarios
Troy
el 13 de Abr. de 2018
But what if the original function is just x? For example:
syms x
f=@(x) x;
g = matlabFunction(diff(f(x))
gives the result g = @()1.0 which is not a useable function. How to resolve?
Walter Roberson
el 13 de Abr. de 2018
df = diff(f(x));
if isempty(symvar(df))
g = str2func(['@(x) repmat(', char(df), ', size(x))'])
else
g = matlabFunction(df);
end
Note: this will fail in some cases where the derivative just happens to be an expression involving a syntax that differs between MATLAB and the Symbolic Toolbox. For example,
f(x) = int(coth(cos(x)),x,1,5)*x
The int() part is actually a constant independent of the *x it is being muliplied by, so diff(f(x)) should be just int(coth(cos(x)),x,1,5), but if you emit that into the function handle you will fail when the handle is executed.
The situation could probably be improved by using
g = str2func(['@(x) repmat(', char(vpa(df)), ', size(x))'])
which will still lead to some failures, just perhaps fewer of them.
Más respuestas (1)
Iman Ansari
el 13 de Mayo de 2013
Hi.
syms x
f=@(x) x^3+3*x+1;
g=diff(f(x))
h=@(y) subs(g,y)
2 comentarios
Ver también
Categorías
Más información sobre Function Creation en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!