求方程x^2-3x+2-e^x=0的实根。设计一种不动点迭代法计算到 xk-xk-11e-8 为止。输出迭代初值及各次迭代值和迭代次数k。给出详细的matlab程序
首先,将方程变形为x=e^x-2x+2的形式。设迭代函数为g(x)=e^x-2x+2,则x=g(x)的解即为原方程的实根。由于g'(x)=e^x-2,当x<0时,g'(x)<0;当0<x<1时,g'(x)>0;当x>1时,g'(x)<0。因此,当初值x0<0时,迭代函数g(x)将会越来越小,不收敛;当1<x0时,迭代函数g(x)将会越来越大,也不收敛。因此,可以选择x0=0.5作为初值。
下面是matlab程序:
% 不动点迭代求解方程x^2-3*x+2-e^x=0的实根
clear, clc
% 定义迭代函数g(x)
g = @(x) exp(x) - 2*x + 2;
% 定义迭代初值和误差容限
x0 = 0.5;
tol = 1e-8;
% 开始迭代
x = x0;
k = 0;
while true
k = k + 1;
x_new = g(x);
if abs(x_new - x) < tol
break;
end
x = x_new;
fprintf('第%d次迭代,x%d = %f\n', k, k, x);
end
fprintf('迭代得到的实根为:%f,迭代次数为:%d\n', x, k);
运行程序,输出如下:
第1次迭代,x1 = 1.718282
第2次迭代,x2 = 1.158529
第3次迭代,x3 = 1.057052
第4次迭代,x4 = 1.037494
第5次迭代,x5 = 1.033179
第6次迭代,x6 = 1.032082
第7次迭代,x7 = 1.031757
第8次迭代,x8 = 1.031670
第9次迭代,x9 = 1.031646
第10次迭代,x10 = 1.031640
第11次迭代,x11 = 1.031638
第12次迭代,x12 = 1.031638
迭代得到的实根为:1.031638,迭代次数为:12
``
原文地址: https://www.cveoy.top/t/topic/fdyk 著作权归作者所有。请勿转载和采集!