%% 写出方程 x-exp(-x) = 0 的一种收敛迭代格式, 说明其收敛性 (给出与收敛性判定相关的示意图形代码并对收敛性加以说明).
% 版本 2019b
%% 代码部分
clc,close,clear;
fx = @(x) exp(-x); %方程迭代式
fxd = @(x) -exp(-x); %迭代式的一阶导数
x = 0.5;
i = fx(x);
k = 1;
fprintf('|fxd(0.5)| = %d < 1,收敛\n',abs(fxd(x)))
fprintf('x%d=%d\n',0,0.5)
while abs(fx(i)-fx(x))> 1E-5
fx(i);
fprintf('x%d=%d\n',k,fx(x))
x = i;
i = fx(i);
k = k+1;
end
fprintf('用fx迭代格式计算的根的近似值为%d\n',fx(x));
实验效果
用牛顿法求方程 cos(x) = 1/2 + sin(x)的一个实根
实验代码
%% 用牛顿法求方程 cos x = 1/2 + sin(x)的一个实根。
% 版本 2019b
%% 代码部分
clc,close,clear;
err = 1E-5;
x = 1;
x0 = x;
while abs(x-x0) <= err
x0 = x;
f = cos(x) - 1/2 - sin(x);
f1 = -sin(x) - cos(x);
x = x - f/f1;
end
disp('方程cos x = 1/2 + sin(x) 的近似实根为:')
disp(x)
实验效果
用牛顿法求方程 sin(x) + 1 = x2/2 在区间 [−4, 2] 的根
实验代码
%% 用牛顿法求方程 sin(x) + 1 = x^2/2 在区间 [-4, 2] 的根。
% 版本 2019b
% f为f(x),f1为f'(x),x为迭代初值(取[-4,2]的中间值),e为迭代精度。
%% 代码部分
clc,close,clear;
f = @(x) sin(x) + 1 - x^2/2;
f1 = @(x) cos(x) -x;
err = 1E-5;
x = -1;
x0 = x;
while abs(f(x)) > err
x0 = x;
F = f(x);
F1 = f1(x);
x = x - F/F1;
end
disp('方程 sin(x) + 1 = x^2/2 在区间 [?4, 2] 的近似根为:')
disp(x)
实验效果
用逐次分半算法求方程 x2 - 25x + 150 = 0 的两个根
实验代码
%% 用逐次分半算法求方程 x^2 - 25*x + 150 = 0 的两个根
% 要求答案是一个逐次分半算法的函数文件, 使用一个主函数文件来调用逐次分半函数文件,两个函数放到一个文件。
% 版本 2019b
%% 代码部分
% 主函数
function main ()
clc,close,clear;
fx = @(x) x^2 - 25*x + 150;
x0 = [9 16];
HalfInterval(fx,x0)
end
% 逐次分半函数
function [] = HalfInterval(fx,xq)
a1 = xq(1,1);
b1 = xq(1,2);
xz = (a1+b1)/2;
err = 1E-5;
if fx(xz) == 0
x0 = xz;
fprintf('一个根为%f\n',x0);
end
if fx(a1)*fx(xz)<0
a = a1;b = xz;x = (a+b)/2;
while abs(fx(x)) >= err
if fx(x)*fx(a)<0
b = x;
x = (a+b)/2;
elseif fx(x)*fx(b)<0
a = x;
x = (a+b)/2;
end
end
x1 = x;
fprintf('一个根为%f\n',x1);
end
if fx(b1)*fx(xz)<0
a = xz;b = b1;x = (a+b)/2;
while abs(fx(x)) >= err
if fx(x)*fx(a)<0
b = x;
x = (a+b)/2;
elseif fx(x)*fx(b)<0
a = x;
x = (a+b)/2;
end
end
x2 = x;
fprintf('一个根为%f\n',x2)
end
end