Это снова я.
Переписал алгоритм SVD из Уилкисон и Райнш, "Справочник алгоритмов на языке Алгол-60".
Появилась несколько вопросов.
1. Почему результат собственных значений отличается от результата SVD?
Просто я думал что они одинаковые и реализовать поиск собственных чисел через SVD, а оказалось не совсем так.
Код:
a[0,0]:=1; a[0,1]:=1; a[0,2]:=3;
a[1,0]:=1; a[1,1]:=2; a[1,2]:=1;
a[2,0]:=3; a[2,1]:=1; a[2,2]:=10;
EigenValue(a);
//Результат (11,080311068, 2,0516557687,
-0,13196683656)
SVD(q,u,v,A,True,True);
//Результат (11,080311068,
0,13196683656, 2,0516557687)
Как видно отличие в знаке. Если что в MathCad результат такой же, как у меня в коде.
2. Что делать если условие m>=n не выполняется?
С этим я думаю сам справлюсь.
3. Не могу понять в чём отличие преобразование Хаусхолдера от QR ?
Почему нельзя было сразу привести к диагональному виду используя преобразование Хаусхолдера, вернее почему это не будет SVD разложением?