先放源码,后续文字即公式解释稍后发布。
1.此为函数文件,之后主文件调用此文件。
function sol = jacobi_iterative(A,b,x0,eps,maxiter)
%%
% 输入矩阵判断
[m,n] = size(A); %matrix rows = m, matrix column = n
if m ~= n
error('系数矩阵A必须是方阵,否则不能用雅可比迭代求解!')
elseif m ~= length(b) % 行数不等于b矩阵的长度
error('系数矩阵的维度与右端向量的维度不一致')
end
%%
%判断迭代矩阵是否收敛
if det(A) ~= 0 % 判断矩阵行列式不等于0,即矩阵invertible,non-singular
%获得系数矩阵的对角线向量
D = diag(A); % 此为向量
if all(D) ~= 0 % 系数矩阵对角线元素都不为零
% 核心代码,判断雅可比矩阵
J = inv(diag(D)) * (A - diag(D)); %迭代矩阵,我觉得有问题,
lamda = max(abs(eig(J))); % 求lamda,即为谱半径,特征值的绝对值最大的一个
if lamda >= 1
disp(['谱半径=',num2str(lamda)]);
error('雅可比矩阵收敛')
end