在MATLAB中,迭代法通常用于求解方程或函数的根。以下是几种常见迭代法的MATLAB编程方法:
1. 不动点迭代法
不动点迭代法通过不断更新当前值来逼近方程的根。以下是一个使用不动点迭代法求解方程 \( x - e^x + 4 = 0 \) 正根的示例代码:
```matlab
disp('不动点迭代法');
n0 = 100;
p0 = -5;
p = exp(p0) - 4;
for i = 1:n0
if abs(p - p0) < 1e-6
disp('|p-p1|=');
disp(abs(p - p0));
disp('用不动点迭代法求得方程的正根为');
disp(p);
break;
else
p1 = p;
p = exp(p0) - 4;
end
end
if i == n0
disp(n0);
disp('次不动点迭代后无法求出方程的正根');
end
```
2. 牛顿法
牛顿法是一种更高效的迭代方法,通过利用函数的导数来逼近根。以下是一个使用牛顿法求解同一方程正根的示例代码:
```matlab
disp('牛顿法');
n0 = 80;
p0 = 1;
for i = 1:n0
p = p0 - (p0 - exp(p0) + 4) / (1 - exp(p0));
end
```
3. 简单迭代法
简单迭代法(也称为不动点迭代法)的MATLAB实现如下:
```matlab
function [x_reality, n_reality] = Simple_stepit(f_name, x_start, tolerance, n_limit)
fprintf('简单迭代法求方程: %s = 0 的近似根\n', f_name);
n_reality = 1;
x_reality = feval(f_name, x_start);
fprintf('%3.0f,%14.14f,%14.14f\n', n_reality, x_start, x_reality);
while abs(x_reality - x_start) > tolerance
x_reality = feval(f_name, x_reality);
n_reality = n_reality + 1;
fprintf('%3.0f,%14.14f,%14.14f\n', n_reality, x_reality, x_reality);
end
fprintf('在精度不超过%.14f的条件下,方程:%s = 0 的根为 %.14f\n迭代次数为:%d\n', tolerance, f_name, x_reality, n_reality);
end
```
4. 自定义迭代法
你可以根据需要自定义迭代法。以下是一个求解 \( x^3 - x^2 - 1 = 0 \) 在区间 [1.4, 1.5] 根的示例代码:
```matlab
syms x;
x_nwo = sqrt(x.^3 - 1);
x_derivative = diff(x_nwo);
x = 1.4;
while x <= 1.5
if abs(x_derivative) < 1e-4
break;
end
x = x - (x.^3 - 1) / x_derivative;
end
disp('解得x=%f\n', x);
```
5. 通用迭代函数