Matlab 计算和确定收敛速度

Matlab 计算和确定收敛速度,matlab,rate,numerical-analysis,convergence,Matlab,Rate,Numerical Analysis,Convergence,编写MATLAB代码,计算并确定以下各项的收敛速度: (exp(h)-(1+h+1/2*h^2))/h‍‍‍‍‍‍ ‍‍‍‍‍‍ h=1/2,1/2^2,…,1/2^10时 我的代码是: h0=(0.5)^i; TOL=10^(-8); N=10; i=1; flag=0; table=zeros(30,1); table(1)=h0 while i < N h=(exp(h0)-(1+h0+0.5*h0^2))/h0; table (i+1)=h; if ab

编写MATLAB代码,计算并确定以下各项的收敛速度:

(exp(h)-(1+h+1/2*h^2))/h‍‍‍‍‍‍  ‍‍‍‍‍‍ h=1/2,1/2^2,…,1/2^10时

我的代码是:

h0=(0.5)^i;
TOL=10^(-8);
N=10;
i=1;
flag=0;
table=zeros(30,1);
table(1)=h0

while i < N
    h=(exp(h0)-(1+h0+0.5*h0^2))/h0;
    table (i+1)=h;
    if abs(h-h0)< TOL
        flag=1;
        break;
    end
    i=i+1;
    h0=h;
end

if flag==1
    h
else
    error('failed');
end
h0=(0.5)^i;
TOL=10^(-8);
N=10;
i=1;
flag=0;
表=零(30,1);
表(1)=h0
而我
h=(exp(h0)-(1+h0+0.5*h0^2))/h0;
表(i+1)=h;
如果abs(h-h0)

我得到的答案毫无意义。请帮忙

主要问题在于公差检查

if abs(h-h0) < TOL
或者您也可以添加NaN检查

 if abs(h-h0) < TOL || isnan(h)

我在代码中看到的一个错误是,您使用的是
h0=(0.5)^I
,这意味着
h0=(0.5)^√-1;
表示
h0=9.7656e-04
。我想您想使用
h0=0.5
。寻求调试帮助的问题(“为什么这段代码不工作?”)必须包括所需的行为。告诉我们你期望的答案是什么!
 if abs(h-h0) < TOL || isnan(h)
TOL = 1e-8; % Tolerance
N = 10; % Max number of iterations

% Value vector
h = zeros(N+1,1);

% Init value
h(1) = (0.5)^1;

for k = 1:N
    h(k+1) = (exp(h(k)) - (1 + h(k) + 0.5*h(k)^2))/h(k);
    if isnan(h(k+1)) || abs(diff(h(k + [0 1]))) < TOL
        N = k;
        break
    end
end
% Crop vector
h = h(1:N);

% Display result
fprintf('Converged after %d iterations\n', N)

% Plot (with logarithmic y-xis)
semilogy(1:N, h,'*-')