用不动点迭代的方法求25的立方根的值,用Matlab写出三种迭代方式,判断收敛性,计算前10步,并进行对比。
时间: 2024-10-04 10:00:34 浏览: 6
不动点迭代法是一种常用的数值方法,用于寻找函数的零点,其中也包括求解方程的根。对于求25的立方根,我们可以设f(x) = x^3 - 25,目标是找到使得f(x) = 0的x值,即x^(1/3)。以下是三种常见的不动点迭代法在MATLAB中的实现:
1. **牛顿迭代法**:
```matlab
function [root, iter] = newtonCubeRoot(n, maxIter)
guess = n;
for i = 1:maxIter
nextGuess = guess / (guess^2 + 2);
if abs(nextGuess - guess) < 1e-6
break;
end
guess = nextGuess;
iter = i;
end
root = guess;
end
[estimatedRoot, numIterations] = newtonCubeRoot(25, 100);
```
2. **高斯-赛德尔迭代法**:
```matlab
function [root, iter] = gaussSeidelCubeRoot(n, maxIter)
guess = n;
while maxIter > 0
nextGuess = (2 * guess + 25 / guess^2) / 3;
if abs(nextGuess - guess) < 1e-6
break;
end
guess = nextGuess;
maxIter = maxIter - 1;
end
root = guess;
end
[gsEstimatedRoot, gsNumIterations] = gaussSeidelCubeRoot(25, 100);
```
3. **二分法** (虽然不是典型不动点迭代法,但它也是一种搜索算法):
```matlab
function [root, iter] = bisectionCubeRoot(n, maxIter)
a = 0;
b = n;
for i = 1:maxIter
mid = (a + b) / 2;
if abs(mid^3 - n) < 1e-6
break;
elseif mid^3 > n
b = mid;
else
a = mid;
end
iter = i;
end
root = mid;
end
[bisectedRoot, bisectedNumIterations] = bisectionCubeRoot(25, 100);
```
上述代码分别展示了牛顿迭代、高斯-赛德尔迭代以及二分查找法求立方根的过程。它们都会在达到预定迭代次数或足够小的精度误差时停止。运行这三种方法,你可以观察到每种方法的收敛速度和所需的迭代次数可能不同。