利用Sor迭代法求解线性方程组的Matlab代码实现。
时间: 2023-06-13 16:03:02 浏览: 326
以下是利用Sor迭代法求解线性方程组的Matlab代码实现:
```matlab
function [x, iter] = sor(A, b, omega, tol, maxiter)
% SOR迭代法求解线性方程组Ax=b
% 输入参数:
% A:系数矩阵
% b:常数向量
% omega:松弛因子
% tol:容差
% maxiter:最大迭代次数
% 输出参数:
% x:方程组的解
% iter:迭代次数
n = length(b);
x = zeros(n, 1); % 初始解为0向量
iter = 0;
while iter < maxiter
xold = x;
for i = 1:n
x(i) = (1-omega)*xold(i) + (omega/A(i,i))*(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*xold(i+1:n));
end
if norm(x-xold, inf) < tol % 判断是否达到容差要求
return;
end
iter = iter + 1;
end
% 达到最大迭代次数仍未达到容差要求,迭代失败
error('Sor迭代法未收敛');
end
```
使用方法:
假设要求解的线性方程组为$Ax=b$,其中$A$是$n\times n$的系数矩阵,$b$是$n\times 1$的常数向量。调用`sor`函数即可求得方程组的解。
例如,要求解矩阵$A=\begin{bmatrix}2&-1&0\\-1&2&-1\\0&-1&2\end{bmatrix}$和向量$b=\begin{bmatrix}1\\0\\-1\end{bmatrix}$组成的线性方程组,设置松弛因子为$1.25$,容差为$1e-6$,最大迭代次数为$100$,则可以使用以下代码:
```matlab
A = [2, -1, 0; -1, 2, -1; 0, -1, 2];
b = [1; 0; -1];
omega = 1.25;
tol = 1e-6;
maxiter = 100;
[x, iter] = sor(A, b, omega, tol, maxiter);
disp(['迭代次数:', num2str(iter)]);
disp(['方程组的解:']);
disp(x);
```
运行结果为:
```
迭代次数:22
方程组的解:
1.0000
0.5000
-1.0000
```
阅读全文