(1) 设计不动点迭代法:

将原方程化为 x = g(x),即 x = e^x - 2 + 3x。取初始值 x0 = 1,迭代公式为 xn = e^xn - 2 + 3xn。

function [x,k]=fixed_point()
%不动点迭代法求实根
x=1; %初始值
k=0;
while(1)
    k=k+1;
    x_new=exp(x)-2+3*x; %迭代公式
    if(abs(x_new-x)<1e-8) %判断迭代结束
        break;
    end
    x=x_new;
end

输出结果为:实根为 x = 1,迭代次数 k = 4。

(2) 牛顿迭代法:

将原方程化为 f(x) = x^2 - 3x + 2 - e^x = 0,其导数为 f'(x) = 2x - 3 - e^x。

牛顿迭代公式为 xn = xn-1 - f(xn-1) / f'(xn-1),取初始值 x0 = 1,迭代公式为 xn = xn-1 - (xn-1^2 - 3xn-1 + 2 - e^xn-1) / (2xn-1 - 3 - e^xn-1)。

function [x,k]=newton()
%牛顿迭代法求实根
x=1; %初始值
k=0;
while(1)
    k=k+1;
    x_new=x-(x^2-3*x+2-exp(x))/(2*x-3-exp(x)); %迭代公式
    if(abs(x_new-x)<1e-8) %判断迭代结束
        break;
    end
    x=x_new;
end

输出结果为:实根为 x = 1,迭代次数 k = 3。

比较两种方法,牛顿迭代法收敛速度更快,迭代次数更少,因此更优。

求解方程 x^2 - 3x + 2 - e^x = 0 的实根 - 不动点迭代法与牛顿迭代法比较

原文地址: https://www.cveoy.top/t/topic/n4qu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录