我正在使用SOR方法並需要找到最佳的重量因子。我認爲一個很好的方法是使用從0到2的多個omegas運行我的SOR代碼,然後存儲每個這些代碼的迭代次數。然後我可以看到哪個迭代是最低的以及它對應的是哪個歐米伽。然而,作爲新手程序員,我不確定如何去做這件事。找到SOR的最佳重量因子
這裏是我的SOR代碼:
function [x, l] = SORtest(A, b, x0, TOL,w)
[m n] = size(A); % assigning m and n to number of rows and columns of A
l = 0; % counter variable
x = [0;0;0]; % introducing solution matrix
max_iter = 200;
while (l < max_iter) % loop until max # of iters.
l = l + 1; % increasing counter variable
for i=1:m % looping through rows of A
sum1 = 0; sum2 = 0; % intoducing sum1 and sum2
for j=1:i-1 % looping through columns
sum1 = sum1 + A(i,j)*x(j); % computing sum using x
end
for j=i+1:n
sum2 = sum2 + A(i,j)*x0(j); % computing sum using more recent values in x0
end
x(i) =(1-w)*x0(i) + w*(-sum1-sum2+b(i))/A(i,i); % assigning elements to the solution matrix.
end
if abs(norm(x) - norm(x0)) < TOL % checking tolerance
break
end
x0 = x; % assigning x to x0 before relooping
end
end
如果歐米茄是1,你會如何運行你的代碼?如果你能回答這個問題,那麼考慮如何使用for循環來增量更改onega並重新運行你的函數。 – David 2015-02-11 21:55:28
如果歐米茄是一個,它只會是高斯賽德爾方法 – user3681755 2015-02-11 23:11:57