一、算法原理
Jacobi迭代法是一种用于求解线性方程组的数值方法,特别是当系数矩阵A是对称正定矩阵时,该方法特别有效。Jacobi迭代法的基本思想是将每个方程中的未知数视为已知数,然后迭代求解每个未知数的值。
Jacobi迭代法的迭代公式可以表示为: 其中,
表示第k次迭代的结果,
是主对角线上的元素,
是常数项向量b中的第i个元素。
在MATLAB中,jacobi
函数的调用格式如下:
A
:系数矩阵,必须为方阵。b
:常数向量,其长度应与系数矩阵A的维度匹配。x0
:初始迭代向量,通常选择为零向量或单位向量。eps
:精度控制参数,用于确定迭代停止的条件。如果未指定,默认值通常为1e-6。varargin
:可变参数,可以用于指定其他选项,如最大迭代次数等。
函数返回值:
x
:线性方程组的近似解。n
:达到所需精度所需的迭代步数。
二、例题
用Jacobi迭代法求解方程组,设,精度为
三、程序源代码及运行结果
function y=jacobi(a,b,x0)
% jacobi 函数使用Jacobi迭代法求解线性方程组Ax=b的解
% 输入参数:
% a - 系数矩阵
% b - 常数项向量
% x0 - 初始迭代向量
% 输出参数:
% y - 线性方程组的解
% n - 达到所需精度所需的迭代次数
D = diag(diag(a)); % 从矩阵a提取对角线元素,创建对角矩阵D
U = -triu(a,1); % 取矩阵a的上三角部分(不包括对角线),并取负号,得到矩阵U
L = -tril(a,-1); % 取矩阵a的下三角部分(不包括对角线),并取负号,得到矩阵L
B = D\(L+U); % 计算D逆矩阵乘以(L+U),即D^-1*A
f = D\b; % 计算D逆矩阵乘以b,得到f
y = B*x0 + f; % 进行第一次迭代计算,y = B*x0 + f
n = 1; % 初始化迭代次数计数器
while norm(y-x0) >= 1.0e-6 % 当当前解与上一次解的差的范数大于1e-6时,继续迭代
x0 = y; % 更新初始向量为当前解
y = B*x0 + f; % 进行下一次迭代计算
n = n + 1; % 迭代次数加1
end
y % 函数返回最终的解向量
n
添加逐行注释的源代码如上
![](https://img-blog.csdnimg.cn/direct/77272c701f9d4ffaacbb215509adf0ee.png)
在matlab命令行窗口输入对应参数矩阵,其中a为系数矩阵,b为常数向量。最后调用 jacobi
函数并传入参数b a
,b
和初始迭代向量 [0; 0; 0]
:
![](https://img-blog.csdnimg.cn/direct/3a49e75c80994e75a6b6e8e971b4be05.png)
其中,y为解向量,n
是达到所需精度(在本例中为 )所需的迭代次数 ,
ans
是 MATLAB 中最后一个计算结果的默认变量名。在这里,ans
与 y
相同,表示线性方程组的解。
若源代码中不加入y,n,输出为ans,无迭代次数。