#matlab #iteration #linear-algebra
#matlab #итерация #линейная алгебра
Вопрос:
Как бы вы закодировали это в MATLAB?
Это то, что я пробовал, но это работает не совсем правильно.
function x = my_jacobi(A,b, tot_it)
%Inputs:
%A: Matrix
%b: Vector
%tot_it: Number of iterations
%Output:
%:x The solution after tot_it iterations
n = length(A);
x = zeros(n,1);
for k = 1:tot_it
for j = 1:n
for i = 1:n
if (j ~= i)
x(i) = -((A(i,j)/A(i,i)) * x(j) (b(i)/A(i,i)));
else
continue;
end
end
end
end
end
Ответ №1:
j
является итератором суммы по каждой i
, поэтому вам нужно изменить их порядок. Также формула имеет сумму, и в вашем коде вы ничего не добавляете, так что это еще одна вещь, которую следует учитывать. Последнее, что я вижу, что вы опускаете, это то, что вы должны сохранить предыдущее состояние x
, потому что в правой части формулы это необходимо. Вы должны попробовать что-то вроде этого:
function x = my_jacobi(A,b, tot_it)
%Inputs:
%A: Matrix
%b: Vector
%tot_it: Number of iterations
%Output:
%:x The solution after tot_it iterations
n = length(A);
x = zeros(n,1);
s = 0; %Auxiliar var to store the sum.
xold = x
for k = 1:tot_it
for i = 1:n
for j = 1:n
if (j ~= i)
s = s (A(i,j)/A(i,i)) * xold(j);
else
continue;
end
end
x(i) = -s b(i)/A(i,i);
s = 0;
end
xold = x;
end
end