用matlab实现求解多元一次方程组的雅可比迭代法和高斯赛德尔迭代法
时间: 2023-06-19 22:09:01 浏览: 176
雅克比迭代法和高斯-赛德尔法解线性方程组(C++).docx
5星 · 资源好评率100%
首先,我们需要明确雅可比迭代法和高斯赛德尔迭代法的迭代公式:
雅可比迭代法:
$$
x_i^{(k+1)}=\frac{1}{a_{ii}} \left(b_i-\sum_{j=1,j\neq i}^{n} a_{ij}x_j^{(k)}\right),\quad i=1,2,\cdots,n
$$
高斯赛德尔迭代法:
$$
x_i^{(k+1)}=\frac{1}{a_{ii}} \left(b_i-\sum_{j=1}^{i-1} a_{ij}x_j^{(k+1)}-\sum_{j=i+1}^{n} a_{ij}x_j^{(k)}\right),\quad i=1,2,\cdots,n
$$
其中,$a_{ij}$ 和 $b_i$ 分别表示系数矩阵和常数向量的元素,$x_i^{(k)}$ 表示第 $k$ 次迭代后第 $i$ 个未知量的值。
下面是 MATLAB 的实现:
% 雅可比迭代法
function [x, k] = Jacobi(A, b, x0, epsilon, maxIter)
% A:系数矩阵
% b:常数向量
% x0:迭代初值
% epsilon:迭代精度
% maxIter:最大迭代次数
% x:方程组的解
% k:迭代次数
n = length(b);
x = x0;
for k = 1 : maxIter
for i = 1 : n
temp = b(i);
for j = 1 : n
if j ~= i
temp = temp - A(i, j) * x(j);
end
end
x(i) = temp / A(i, i);
end
if norm(A * x - b, inf) < epsilon
return;
end
end
% 高斯赛德尔迭代法
function [x, k] = GaussSeidel(A, b, x0, epsilon, maxIter)
% A:系数矩阵
% b:常数向量
% x0:迭代初值
% epsilon:迭代精度
% maxIter:最大迭代次数
% x:方程组的解
% k:迭代次数
n = length(b);
x = x0;
for k = 1 : maxIter
for i = 1 : n
temp = b(i);
for j = 1 : i - 1
temp = temp - A(i, j) * x(j);
end
for j = i + 1 : n
temp = temp - A(i, j) * x(j);
end
x(i) = temp / A(i, i);
end
if norm(A * x - b, inf) < epsilon
return;
end
end
阅读全文