matlab中的微分一致性

Differentiation consistency in matlab

我正在尝试在 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 设置为 10h0 = 1x=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