我基于这篇论文使用Matlab实现了Jacobi迭代,代码如下:
function x = jacobi(A, b)
% Executes iterations of Jacobi's method to solve Ax = b.
assert(size(A, 1) == size(A, 2))
assert(size(A, 1) == size(b, 1))
% matrix with all zeros except the diagonal elements,
% which are those of A.
D = diag(diag(A));
% matrix A but with its diagonal elements equal zero
R = D - A;
tol = 1.e-8;
max_num_of_iter = 1000;
% initialize relative error to large value
relative_error = inf;
num_of_iter = 1;
% initial guess
x_prev = zeros(size(b, 1), 1);
% iterate until convergence or maximum number of iterations is reached
while relative_error > tol && num_of_iter < max_num_of_iter
x = D \ (b + R * x_prev);
relative_error = norm(x - x_prev, inf) / norm(x, inf);
x_prev = x;
num_of_iter = num_of_iter + 1;
end
现在我不明白为什么x
使用 找到迭代D \ (b + R * x_prev)
,更具体地说,为什么我们有一个+
符号而不是一个-
登录D \ (b + R * x_prev)
?
根据[维基百科]( https://en.wikipedia.org/wiki/Jacobi_method,雅可比方法如下:
其中是一个矩阵,除了对角线元素是的对角线元素外,它的元素都是零。中对应元素相同的矩阵。
显然,如果我们想解决
和 然后
既然我们已经定义了,那么
所以迭代方法的原始公式提供维基百科似乎与我的计算一致。问题是,如果我使用 a而不是我找不到正确的解决方案。我怎么知道?我正在使用(即高斯消除)来检查解决方案。-
+
x = A \ b