matlab 高斯迭代代码_超松弛迭代法(SOR)
时间: 2023-07-28 13:10:23 浏览: 137
好的,以下是 MATLAB 中实现高斯迭代和超松弛迭代法(SOR)的代码:
高斯迭代法:
```matlab
function [x, iter] = gauss_seidel(A, b, x0, tol, max_iter)
% 高斯迭代法求解线性方程组 Ax = b
% A: 系数矩阵
% b: 常数矩阵
% x0: 初始迭代向量
% tol: 收敛精度
% max_iter: 最大迭代次数
% x: 迭代解
% iter: 实际迭代次数
n = size(A, 1); % 线性方程组的未知数个数
x = x0; % 初始迭代向量
iter = 0; % 迭代次数
while iter < max_iter
for i = 1:n
% 计算第 i 个未知数的迭代解
x(i) = (b(i) - A(i, 1:i-1) * x(1:i-1) - A(i, i+1:n) * x(i+1:n)) / A(i, i);
end
% 判断是否满足收敛精度
if norm(A * x - b) < tol
break;
end
iter = iter + 1; % 迭代次数加 1
end
```
超松弛迭代法(SOR):
```matlab
function [x, iter] = sor(A, b, x0, omega, tol, max_iter)
% SOR 迭代法求解线性方程组 Ax = b
% A: 系数矩阵
% b: 常数矩阵
% x0: 初始迭代向量
% omega: 松弛因子
% tol: 收敛精度
% max_iter: 最大迭代次数
% x: 迭代解
% iter: 实际迭代次数
n = size(A, 1); % 线性方程组的未知数个数
x = x0; % 初始迭代向量
iter = 0; % 迭代次数
while iter < max_iter
for i = 1:n
% 计算第 i 个未知数的迭代解
x(i) = (1 - omega) * x(i) + omega * (b(i) - A(i, 1:i-1) * x(1:i-1) - A(i, i+1:n) * x(i+1:n)) / A(i, i);
end
% 判断是否满足收敛精度
if norm(A * x - b) < tol
break;
end
iter = iter + 1; % 迭代次数加 1
end
```
用法示例:
```matlab
A = [4, -1, 0, 1; -1, 4, -1, 0; 0, -1, 4, -1; 1, 0, -1, 3];
b = [15; 10; 10; 10];
x0 = [0; 0; 0; 0];
tol = 1e-6;
max_iter = 1000;
omega = 1.5; % 松弛因子
% 高斯迭代法求解线性方程组
[x_gauss, iter_gauss] = gauss_seidel(A, b, x0, tol, max_iter);
% 超松弛迭代法(SOR)求解线性方程组
[x_sor, iter_sor] = sor(A, b, x0, omega, tol, max_iter);
```
其中,`A` 为系数矩阵,`b` 为常数矩阵,`x0` 为初始迭代向量,`tol` 为收敛精度,`max_iter` 为最大迭代次数,`omega` 为松弛因子。最后,`x` 为迭代解,`iter` 为实际迭代次数。
阅读全文