SOR迭代法matlab
时间: 2023-10-16 17:25:59 浏览: 593
SOR (Successive Over-Relaxation) 迭代法是一种求解线性方程组的方法,它是对 Jacobi 迭代法的改进。MATLAB 中实现 SOR 迭代法的代码如下:
```matlab
function [x, iter] = sor(A, b, x0, omega, tol, maxiter)
% SOR 迭代法求解线性方程组 Ax = b
% 输入参数:
% A: 系数矩阵
% b: 常数项列向量
% x0: 初始解列向量
% omega: 松弛因子
% tol: 相对误差容限
% maxiter: 最大迭代次数
% 输出参数:
% x: 迭代解列向量
% iter: 实际迭代次数
n = length(b);
x = x0;
iter = 0;
err = tol + 1;
while err > tol && iter < maxiter
x_old = x;
for i = 1:n
sigma = 0;
for j = 1:n
if j ~= i
sigma = sigma + A(i,j) * x(j);
end
end
x(i) = (1 - omega) * x(i) + omega * (b(i) - sigma) / A(i,i);
end
iter = iter + 1;
err = norm(x - x_old) / norm(x);
end
if iter == maxiter && err > tol
warning('SOR 迭代法没有收敛!');
end
end
```
其中,参数 omega 表示松弛因子,通常取值在 (0,2) 之间。当 omega = 1 时,SOR 迭代法退化为 Jacobi 迭代法。
阅读全文