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
设置为 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 中编写一个程序来检查导数定义的一致性:
(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
。