Модифицированная итерация Ричардсона - как реализовать - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть задание в Matlab.Я должен реализовать модифицированную итерацию Ричардсона.Я не мог по-настоящему понять алгоритм, но я придумал это:

A = [9 1 1;
    2 10 3;
    3 4 11];  
b = [10;
    19;
    0];  
x = [0;
    0;
    0];  
G=eye(3)-A; %I-A  
z = [0,x'];  
for k=1:30  
  x = G*x + b;  
  z = [k,x'];  
  fprintf('Number of Iterations: %d \n', k);  
display(z);  
end  

Вывод, который я получаю, неверен, и я действительно не знаю, почему.Любая помощь хорошо получена.Спасибо!

1 Ответ

0 голосов
/ 20 декабря 2018

Вам не хватает параметра omega.На вики-странице итерация выглядит следующим образом:

x(k+1) = x(k) + omega*( b - A*x(k) )
       = (I - omega*A)*x(k) + omega*b

, где omega - скалярный параметр, который должен быть выбран соответствующим образом.

Так что вам нужно изменить свой расчет на Gto:

G = eye(3)-omega*A;

и вычисление x внутри цикла до:

x = G*x + omega*b;

На странице вики обсуждается, как можно выбрать значение omega.В вашем конкретном случае omega = 0.1, кажется, работает хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...