我有以下匿名功能:
f = @(x)x^2+2*x+1
我正在使用它,以便我以下列方式使用它:
f(0) = 1
但是如果我想在保持其匿名功能的同时找到这种功能的衍生物呢?我尝试过以下操作,但它不起作用:
f1 = @(x)diff(f(x))
但这只是返回
[]
有关如何实现这一目标的任何想法?
当然,我可以在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;
答案 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