Я работаю над проблемами MatLab из моего учебника, и одна из проблем (как пример итерации ряда Неймана) просит меня следовать псевдокоду ниже:
INPUT: A n x n matrix, b n x 1 vector, T a positive integer
OUTPUT: An approximation y of x after T iterations
STEP 1: Set y = zeros(n,1)
STEP 2: Set M = eye(n) - A
STEP 2: For i = 1,2,...,T do STEP 3
STEP 3: Set y = M*y + b
STEP 4: OUTPUT(y)
Я пытаюсь найти самый маленькийзначение T такое, что наибольшая запись вектора A y - b в абсолютном значении меньше установленного допуска I (переменная e, как показано ниже). Затем я сохраняю T и E (наибольшая запись в абсолютном значении A y - b).
function [T,E] = neumann(A,b,e)
n = size(A);
y = zeros(n(1,1),1);
M = eye(n(1,1)) - A;
t = 10000;
for ii = 1:t
y = M*y + b;
if max(abs(A*y - b)) < e
T = t;
E = max(abs(A*y - b));
break
end
end
end
A = [1.1,.2,-.2,.5;
.2,.9,.5,.3;
.1,0.,1.,.4;
.1,.1,.1,1.2];
b = [1;0;1;0];
[T_2, E_2] = neumann(A,b,1e-2);
[T_4, E_4] = neumann(A,b,1e-4);
[T_6, E_6] = neumann(A,b,1e-6);
output = [T_2, E_2; T_4, E_4; T_6, E_6];
Вместо получения наименьшего возможного T, цикл for проходит через всеитерации, хотя я использовал оператор break, чтобы завершить выполнение цикла, как только условие будет выполнено. Я не могу понять, что не так с моей петлей. Я следовал псевдокоду как можно ближе. Любые отзывы или предложения приветствуются, спасибо заранее.