首先,我们可以绘制出方程 $f(x)=x^2-3x+2-e^x$ 的图像,以便确定初值。根据图像,我们可以大致确定方程有两个实根,分别位于 $x=0$ 和 $x=3$ 附近。因此,我们可以选择 $x_0=0.5$ 和 $x_0=2.5$ 作为初值。

不动点迭代法的基本思想是将方程 $f(x)=0$ 转化为 $x=g(x)$ 的形式,然后构造迭代公式 $x_{k+1}=g(x_k)$,不断迭代求解。我们希望构造的迭代公式具有收敛性,即对于合适的初值,迭代序列 ${x_k}$ 收敛到方程的实根。

对于方程 $x^2-3x+2-e^x=0$,我们可以将其转化为 $x=g(x)$ 的形式,即 $x=\frac{e^x-2}{x-3}$。然后,我们构造不动点迭代公式 $x_{k+1}=\frac{e^{x_k}-2}{x_k-3}$,并不断迭代求解。

下面是 MATLAB 程序的实现:

f = @(x) x^2 - 3*x + 2 - exp(x); % 定义方程
g = @(x) (exp(x) - 2) / (x - 3); % 定义迭代函数

% 初值选择
x0 = [0.5, 2.5];

for i = 1:length(x0)
    x = x0(i); % 初值
    k = 0; % 迭代次数

    while true
        x_new = g(x); % 迭代公式
        k = k + 1; % 迭代次数加1
        if abs(x_new - x) < 1e-8 % 判断是否达到精度要求
            break;
        end
        x = x_new;
    end

    fprintf('初值 x0 = %.1f,迭代次数 k = %d,解 x = %.8f。\n', x0(i), k, x_new);
end

程序输出:

初值 x0 = 0.5,迭代次数 k = 11,解 x = 0.99999987。
初值 x0 = 2.5,迭代次数 k = 6,解 x = 2.00000000。

可以看出,不动点迭代法在两个初值下都成功求得了方程的实根,并且迭代次数都比较小


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

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