matlab中的差异一致性

时间:2018-05-01 12:13:17

标签: matlab random handle consistency differentiation

我正在尝试用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,左侧的左侧是正确的吗?等

任何反馈都会有所帮助。 提前致谢

1 个答案:

答案 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错误如何减少。