matlab 高斯迭代代码_超松弛迭代法(SOR)
时间: 2023-07-28 16:10:12 浏览: 108
sor.rar_GS_超松弛迭代法
以下是 MATLAB 中实现高斯迭代和超松弛迭代法(SOR)的代码示例:
高斯迭代法:
```matlab
function [x, err, iter] = gaussSeidel(A, b, x0, tol, maxiter)
% 高斯迭代法求解线性方程组 Ax = b,其中 x0 为初始解
% tol 为误差容限,maxiter 为最大迭代次数
% 返回解向量 x,误差 err,迭代次数 iter
n = size(A, 1);
x = x0;
iter = 0;
err = tol + 1;
while err > tol && iter < maxiter
x_old = x;
for i = 1:n
x(i) = (b(i) - A(i, 1:i-1)*x(1:i-1) - A(i, i+1:n)*x_old(i+1:n)) / A(i, i);
end
iter = iter + 1;
err = norm(x - x_old);
end
end
```
超松弛迭代法(SOR):
```matlab
function [x, err, iter] = SOR(A, b, x0, omega, tol, maxiter)
% 超松弛迭代法求解线性方程组 Ax = b,其中 x0 为初始解
% omega 为松弛因子,tol 为误差容限,maxiter 为最大迭代次数
% 返回解向量 x,误差 err,迭代次数 iter
n = size(A, 1);
x = x0;
iter = 0;
err = tol + 1;
while err > tol && iter < maxiter
x_old = x;
for i = 1:n
x(i) = (1 - omega) * x_old(i) + omega * (b(i) - A(i, 1:i-1)*x(1:i-1) - A(i, i+1:n)*x_old(i+1:n)) / A(i, i);
end
iter = iter + 1;
err = norm(x - x_old);
end
end
```
在调用这两个函数时,需要传入系数矩阵 A、右侧常数向量 b、初始解向量 x0、误差容限 tol 和最大迭代次数 maxiter。对于超松弛迭代法,还需要传入松弛因子 omega。例如:
```matlab
A = [10 -1 2 0; -1 11 -1 3; 2 -1 10 -1; 0 3 -1 8];
b = [6; 25; -11; 15];
x0 = zeros(4, 1);
tol = 1e-6;
maxiter = 1000;
[x, err, iter] = gaussSeidel(A, b, x0, tol, maxiter);
[x, err, iter] = SOR(A, b, x0, 1.5, tol, maxiter);
```
其中第一行是系数矩阵 A 和右侧常数向量 b,第二行是初始解向量 x0,第三行是误差容限 tol 和最大迭代次数 maxiter,第四行分别调用了高斯迭代法和超松弛迭代法并保存了结果。
阅读全文