匿名函数的导数

时间:2014-03-04 00:50:08

标签: matlab

我有以下匿名功能:

f = @(x)x^2+2*x+1

我正在使用它,以便我以下列方式使用它:

f(0) = 1

但是如果我想在保持其匿名功能的同时找到这种功能的衍生物呢?我尝试过以下操作,但它不起作用:

f1 = @(x)diff(f(x))

但这只是返回

[]

有关如何实现这一目标的任何想法?

当然,我可以在3秒内手动完成此操作,但这不是重点......

3 个答案:

答案 0 :(得分:3)

当你对n个元素的矢量进行diff时,它只输出另一个n-1个元素的矢量,并且连续的差异...所以当你放一个1个元素的矢量时,你会得到一个空元素。

一种方法是决定一个epsilon并使用牛顿的差商:

epsilon = 1e-10;
f = @(x) x^2+2*x+1;
f1 = @(x) (f(x+epsilon) - f(x)) / epsilon;

或者只是做数学并写下公式:

f1 = @(x) 2*x+2;

http://en.wikipedia.org/wiki/Numerical_differentiation

答案 1 :(得分:3)

如果您有符号数学工具箱,则可以使用符号函数来实现所需的符号,如下所示:

syms x
myFun=x^2+2*x+1;
f=symfun(myFun,x);
f1=symfun(diff(f),x);

%Check the values
f(2)
f1(2)

你应该得到9和6作为答案。

答案 2 :(得分:2)

@jollypianoman这对我有用。实际上你需要说symfun必须使用eval命令进行评估,然后你就可以获得匿名函数的所有功能。最好是阅读下面的例子......

clear
N0=1;N1=5;
N=@(t) N0+N1*sin(t);
syms t
Ndot=symfun(diff(N(t)),t); 
Ndot_t=@(t) eval(Ndot);
Ndot_t(0)

ans = 5

Ndot_t(1)

ans = 2.7015

[tstop] = fsolve(Ndot_t,pi/3)
tstop =

     1.5708

欢呼声, AP