matlab 高斯迭代代码_超松弛迭代法(SOR)
时间: 2023-07-29 16:07:52 浏览: 87
好的,以下是 MATLAB 实现的高斯迭代和超松弛迭代法(SOR):
高斯迭代法:
```
function [x, k] = gauss_seidel(A, b, x0, tol, maxit)
% A: 系数矩阵
% b: 常数向量
% x0: 初始解向量
% tol: 精度要求
% maxit: 最大迭代次数
% x: 迭代求得的解向量
% k: 实际迭代次数
n = size(A, 1);
x = x0;
k = 0;
while k < maxit
for i = 1:n
x(i) = (b(i) - A(i, 1:i-1)*x(1:i-1) - A(i, i+1:n)*x0(i+1:n)) / A(i,i);
end
if norm(x-x0, inf) < tol
return;
end
x0 = x;
k = k + 1;
end
```
超松弛迭代法(SOR):
```
function [x, k] = sor(A, b, x0, omega, tol, maxit)
% A: 系数矩阵
% b: 常数向量
% x0: 初始解向量
% omega: 松弛因子
% tol: 精度要求
% maxit: 最大迭代次数
% x: 迭代求得的解向量
% k: 实际迭代次数
n = size(A, 1);
x = x0;
k = 0;
while k < maxit
for i = 1:n
x(i) = (1-omega)*x0(i) + omega*(b(i) - A(i, 1:i-1)*x(1:i-1) - A(i, i+1:n)*x0(i+1:n)) / A(i,i);
end
if norm(x-x0, inf) < tol
return;
end
x0 = x;
k = k + 1;
end
```
其中,`inf` 表示求向量的无穷范数,即所有元素的绝对值的最大值。`norm` 函数可以计算向量的不同范数,如 Euclid 范数、一范数、二范数等。
阅读全文