设方程 f(x) = x3 一 3x 一 1 = 0 有 3 个实根 x = 1.8793, x = 一0.34727, x = 一 1.53209 采用下面六种不同计算格式,求f (x) = 0 的根或x或x的近似值,并考察相应 格式的收敛性。 ( 1) xk +1 = , k = 0, 1, 2, … ; (2) xk+1 = x3一 1 , k = 0, 1, 2, … ; (3) xk+1 = , k = 0, 1, 2, … ; (4) xk +1 = x1一 3 , k = 0, 1, 2, … ; (5) xk +1 = , k = 0, 1, 2, … ; (6) xk+1 = xk 一 x k1一 1 , k = 0, 1, 2, …. MATLAB代码
时间: 2024-01-16 08:03:30 浏览: 150
以下是MATLAB代码实现:
% 定义函数
f = @(x) x^3 - 3*x + 1;
% 初始值
x0 = [1.8793, -0.34727, -1.53209];
% 计算格式1
x1 = zeros(1,3);
for k = 1:100
x1(1) = (3*x0(1) - x0(1)^3 + 1) / 3;
x1(2) = (3*x0(2) - x0(2)^3 + 1) / 3;
x1(3) = (3*x0(3) - x0(3)^3 + 1) / 3;
if max(abs(x1 - x0)) < 1e-6
fprintf('计算格式1收敛于:%.6f, %.6f, %.6f\n', x1(1), x1(2), x1(3));
break;
end
x0 = x1;
end
% 计算格式2
x0 = [1.8793, -0.34727, -1.53209];
x2 = zeros(1,3);
for k = 1:100
x2(1) = nthroot(1 + x0(1)^3, 3);
x2(2) = nthroot(1 + x0(2)^3, 3);
x2(3) = nthroot(1 + x0(3)^3, 3);
if max(abs(x2 - x0)) < 1e-6
fprintf('计算格式2收敛于:%.6f, %.6f, %.6f\n', x2(1), x2(2), x2(3));
break;
end
x0 = x2;
end
% 计算格式3
x0 = [1.8793, -0.34727, -1.53209];
x3 = zeros(1,3);
for k = 1:100
x3(1) = (x0(1)^3 + 1) / (3*x0(1));
x3(2) = (x0(2)^3 + 1) / (3*x0(2));
x3(3) = (x0(3)^3 + 1) / (3*x0(3));
if max(abs(x3 - x0)) < 1e-6
fprintf('计算格式3收敛于:%.6f, %.6f, %.6f\n', x3(1), x3(2), x3(3));
break;
end
x0 = x3;
end
% 计算格式4
x0 = [1.8793, -0.34727, -1.53209];
x4 = zeros(1,3);
for k = 1:100
x4(1) = nthroot(3*x0(1) - 1, 3);
x4(2) = nthroot(3*x0(2) - 1, 3);
x4(3) = nthroot(3*x0(3) - 1, 3);
if max(abs(x4 - x0)) < 1e-6
fprintf('计算格式4收敛于:%.6f, %.6f, %.6f\n', x4(1), x4(2), x4(3));
break;
end
x0 = x4;
end
% 计算格式5
x0 = [1.8793, -0.34727, -1.53209];
x5 = zeros(1,3);
for k = 1:100
x5(1) = (x0(1)^3 + 1) / (3*x0(1)^2);
x5(2) = (x0(2)^3 + 1) / (3*x0(2)^2);
x5(3) = (x0(3)^3 + 1) / (3*x0(3)^2);
if max(abs(x5 - x0)) < 1e-6
fprintf('计算格式5收敛于:%.6f, %.6f, %.6f\n', x5(1), x5(2), x5(3));
break;
end
x0 = x5;
end
% 计算格式6
x0 = [1.8793, -0.34727, -1.53209];
x6 = zeros(1,3);
for k = 1:100
x6(1) = x0(1) - (f(x0(1)) / (f(x0(1)) - f(x0(2))));
x6(2) = x0(2) - (f(x0(2)) / (f(x0(2)) - f(x0(3))));
x6(3) = x0(3) - (f(x0(3)) / (f(x0(3)) - f(x0(1))));
if max(abs(x6 - x0)) < 1e-6
fprintf('计算格式6收敛于:%.6f, %.6f, %.6f\n', x6(1), x6(2), x6(3));
break;
end
x0 = x6;
end
其中,每种计算格式都使用了迭代方法求解方程的根,最大迭代次数为100次,收敛阈值为1e-6。具体代码实现中,计算格式1至4分别使用了不同的迭代公式,计算格式5使用了牛顿切线法,计算格式6使用了割线法。
阅读全文