Как реализовать итерацию ряда Неймана для приближения Ax = b? - PullRequest
0 голосов
/ 24 октября 2019

Я работаю над проблемами 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, чтобы завершить выполнение цикла, как только условие будет выполнено. Я не могу понять, что не так с моей петлей. Я следовал псевдокоду как можно ближе. Любые отзывы или предложения приветствуются, спасибо заранее.

1 Ответ

0 голосов
/ 24 октября 2019

Вы всегда устанавливаете T = t, возможно, вы забыли, что такое t.

Вы определяете t = 10000 в строке 5 функции neumann, это не меняет ваш выводT всегда 10000.

Вместо этого я предполагаю, что вы хотели T = ii;, так как ii - текущий временной шаг при достижении порога.

...