我正在尝试用matlab编写一个程序来检查导数定义的一致性:
(f(x+h)-f(x))/h ~= f'(x)
当h
足够小时。到目前为止我有这个:
function [errList] = diffConsistency(f,df,x,iMax,h0)
h=h0;
for i=1:iMax
leftSide = (f(x+h) - f(x)) / h;
rightSide = df(x);
errList = abs(leftSide - rightSide);
h = h*10^(-1);
end
然后我使用f=@(x)sin(x)
和df=@(x)cosx
,我是新手使用函数句柄,所以这可能是完全错误的。 iMax
设置为10
和h0 = 1
,x=rand(10)
任何人都可以检查这是否是远程正确的。特别是在diffConsistency函数中使用函数句柄并使用rand
。
我应该用不同的方式定义x,左侧的左侧是正确的吗?等
任何反馈都会有所帮助。 提前致谢
答案 0 :(得分:2)
您使用一些模糊结果的特定数据。您输入10x10随机数,并输出10x10错误矩阵,但这仅适用于最后i
,因为每次迭代都会覆盖errList
!
将功能更改为:
function [errList] = diffConsistency(f,df,x,iMax,h0)
h=h0;
for i=1:iMax
leftSide = (f(x+h) - f(x)) / h;
rightSide = df(x);
errList(i) = abs(leftSide - rightSide);
h = h*10^(-1);
end
如果你把它称为:
err=diffConsistency(@sin,@cos,rand,10,1)
和plot(err)
,您可以清楚地看到每个较小的h
错误如何减少。