我正在尝试在 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吗,左侧右侧是正确的吗?等等
任何反馈都会有所帮助。 提前致谢
最佳答案
您使用了一些模糊结果的特定数据。您输入 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
而减少。
关于matlab - matlab中的微分一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50116275/