Здравствуйте, товарищи, помогите разобраться в коде реализации метода степенной итерация для подсчёта максимального собственного значения и соответствующего собственного вектора. Сам метод я понял, но вот как он реализуется в системе Mathematica ...
(код взят с сайта
http://math.fullerton.edu/mathews/n2003/PowerMethodMod.html)
1)Для чего нужно вот это, т.е. как мы выбираем это число m
Код:
While[ count <= m,
count = count + 1;
Y = A.X0;
\[Lambda] = maxsize[Y];
X = 1/\[Lambda] Y;
2)Вот эта функция что нам даёт, и как мы можем заходить в -1 ячейку списска, и зачем ?
Код:
maxsize[W_] := Module[{w = Sort[W], msize},
If[ Abs[w[[-1]]] >= Abs[w[[1]]],
msize = w[[-1]],
msize = w[[1]]];
Return[msize]; ];
Код:
PowerMeth[A0_, V0_, \[Epsilon]_, m_] :=
Module[{A = N[A0], c1, count, err, \[Lambda], \[Lambda]0, X ,
X0 = N[V0], Y},
maxsize[W_] := Module[{w = Sort[W], msize},
If[ Abs[w[[-1]]] >= Abs[w[[1]]],
msize = w[[-1]],
msize = w[[1]]];
Return[msize]; ];
norm[V_] := Sqrt[V.V];
\[Lambda]0 = 0;
count = 0;
While[ count <= m,
count = count + 1;
Y = A.X0;
\[Lambda] = maxsize[Y];
X = 1/\[Lambda] Y;
Print[NumberForm[\[Lambda], 6], " , ", PaddedForm[X, {6, 6}]];
err = Max[{ Abs[\[Lambda] - \[Lambda]0], norm[X - X0]}];
If[ err < \[Epsilon], Return[{\[Lambda], X}] ];
X0 = X;
\[Lambda]0 = \[Lambda]; ];
Return[{\[Lambda], X}]; ];
Print["A = ", MatrixForm[A], ", X_0 = ", MatrixForm[X0]];
{ \[Lambda], X} = PowerMeth[A, X0, 0.000001, 100]
Print[""]
Print["A = ", MatrixForm[A]];
Print["Eingenpar dominante é: "];
Print[" \[Lambda] = ", \[Lambda], ", X= ", MatrixForm[X]];