Метод итераций для ЛС
- 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)