用matlab编写迭代法求解线性方程组(雅可比、高斯-赛德尔)的程序代码
时间: 2024-10-22 07:25:36 浏览: 76
雅克比迭代法和高斯-赛德尔法解线性方程组(C++).docx
5星 · 资源好评率100%
在MATLAB中,我们可以使用迭代法如雅可比迭代法(Jacobi method)或高斯-塞德尔迭代法(Gauss-Seidel method)求解线性方程组。以下是这两个方法的基本示例代码:
### 雅可比迭代法 (Jacobi Method)
```matlab
function x = jacobi(A, b, tol, maxIter)
% A - 系数矩阵
% b - 常数项向量
% tol - 允许的误差阈值
% maxIter - 最大迭代次数
% 初始化
x = zeros(size(b));
iter = 0;
error = inf;
while error > tol && iter < maxIter
temp = A \ b; % 使用A的逆运算,此处假设A是对称正定的
x = x + (temp - x); % 更新迭代结果
error = norm(temp - x); % 计算当前误差
iter = iter + 1;
end
if iter == maxIter
warning('雅可比法达到最大迭代次数');
end
```
### 高斯-赛德尔迭代法 (Gauss-Seidel Method)
```matlab
function x = gauss_seidel(A, b, tol, maxIter)
% 同上,只是更新步骤稍有不同
% 这里我们每次更新只考虑已知元素的影响
x = ones(size(b)); % 初始猜测常数
for k = 1:maxIter
for i = 1:length(x) % 从第一个元素开始
x(i) = sum(A(i,:)*x)/A(i,i); % 根据新更新的邻域值计算
end
if norm(x - prev_x) < tol % 比较当前和前一步的改变
break;
else
prev_x = x; % 保存当前迭代结果
end
end
if k == maxIter
warning('高斯-赛德尔法达到最大迭代次数');
end
```
阅读全文