Метод итераций для ЛС

From
Roman Kukushkin (2:5025/37.216)
To
Sergei Katkovsky
Date
2002-06-08T15:45:30Z
Area
RU.ALGORITHMS
Как поживаете, Sergei ?

 Суббота Июнь 08 2002 в 01:51 Sergei Katkovsky писал Evgenij Masherov:

 SK>>> Вообще, значения первого и второго собственных чисел могут быть
 SK>>> просто близки, и тогда сходимость тоже будет не ахти.

 EM>> Если они действительны - сходимость будет великолепна.

 SK> Чтобы не быть голословным. С Матлабом знаком, наверное? Врочем, тут
 SK> все прозрачно.

 SK> clear;
 SK> A=diag([100 90 40 30 20 15 10 5 3 1]);
 SK> x=ones(10);
 SK> n=0;
 SK> while( abs(norm(x) - 100) > 1e-6)
А почему не, скажем,
while( abs(norm(x) - norm_old) > 1e-6)?
У меня матлаба нет, но с этой проверкой сойдется точно быстрее (насчет точности не уверен).
 SK>     x=x/norm(x);
 SK>     x=A*x;
 SK>     n=n+1;
 SK> end
 SK> norm(x)
 SK> n

 SK> Потребовалось 78 итераций. Меняем второе собственное значение на 99,
 SK> 99.9 и 99.99 требуется, соответственно, 689, 5755 и 46050 итераций.
 SK> Для матрицы 10х10 последнее многовато, не так ли?

Здесь можно просто изменить условие контроля, вместо евклидовой нормы (norm(*) - евклидова?) использовать норму максимума $(\|x\|_\infty=max_i |x_i|)$. Алгоритм сойдется за одну итерацию. Правда этот алгоритм будет плохо работать если начальное приближение близко к одному из собственных векторов (независимо от выбора нормы).

                C уважением, Roman Kukushkin.

--- УТВЕРЖДАЮ. MSG-редактор капитан 2.5 ранга Голд Дедович фор ДОС UNREG
 * Origin: Очень приятно! Царь! (2:5025/37.216)