Matlab中使用Newton迭代法求根运行不出结果,也没有报错,是什么问题呢?


syms x
g(x) = 6*x-exp(x);
h(x) = 6-exp(x);

%Newton迭代法
%g(x)在区间(01)内的根
x0 = input('\n请输入求g(x)在区间(01)内根的迭代初值x0:');
 while 1
     x1 = x0 - h(x0)/g(x0);
     if abs(x1 - x0) <= 0.5*10^(-8)
         break
     else
         x0 = x1;
     end
 end
fprintf('\ng(x)在区间(01)内具有8位有效数字的近似根x为:%.8f',x1)

我输入初值0和0.5都运行不出来,debug也卡住了,不知道怎么回事。

你好同学,我是joel,代码最好以后尽量不用符号表达式(符号表达式是用来推公式的),然后你的代码修改如下:

% 不要用符号表达式
g = @(x) 6*x-exp(x);%写成函数形式
h = @(x) 6-exp(x);
%Newton迭代法
%g(x)在区间(0,1)内的根
x0 = input('\n请输入求g(x)在区间(0,1)内根的迭代初值x0:');
while 1
    x1 = x0 - g(x0)/h(x0); % 这里分子分母写反了
    if abs(x1 - x0) < 0.5e-8 %这里改成正常表示不要用0.5*10^(-8),太难看了
        break
    end
    x0 = x1;
end
fprintf('\ng(x)在区间(0,1)内具有8位有效数字的近似根x为:%.8f\n',x1)

运行结果:

请输入求g(x)在区间(01)内根的迭代初值x0:1

g(x)在区间(01)内具有8位有效数字的近似根x为:0.20448145