2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Mathematica Метод степенных итераций для подсчёта С.В. С. З.
Сообщение27.05.2012, 21:15 


27/10/11
228
Здравствуйте, товарищи, помогите разобраться в коде реализации метода степенной итерация для подсчёта максимального собственного значения и соответствующего собственного вектора. Сам метод я понял, но вот как он реализуется в системе 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]];

 Профиль  
                  
 
 Re: Mathematica Метод степенных итераций для подсчёта С.В. С. З.
Сообщение27.05.2012, 21:24 


20/12/11
44
Alexeybk5 в сообщении #577390 писал(а):
Вот эта функция что нам даёт, и как мы можем заходить в -1 ячейку списска, и зачем ?

Это просто мы с конца списка идем. Т.е. w[[-1]] -- это последний элемент списка w.
Функция maxsize[W_] дает нам наибольший по модулю элемент из списка W. Она сортирует W, потом сравнивает по модулю последний и первый его элементы, и возвращает нам тот, который больше.

 Профиль  
                  
 
 Re: Mathematica Метод степенных итераций для подсчёта С.В. С. З.
Сообщение27.05.2012, 22:01 


27/10/11
228
gribble911 в сообщении #577393 писал(а):
Alexeybk5 в сообщении #577390 писал(а):
Вот эта функция что нам даёт, и как мы можем заходить в -1 ячейку списска, и зачем ?

Это просто мы с конца списка идем. Т.е. w[[-1]] -- это последний элемент списка w.
Функция maxsize[W_] дает нам наибольший по модулю элемент из списка W. Она сортирует W, потом сравнивает по модулю последний и первый его элементы, и возвращает нам тот, который больше.


Т.е. эта часть кода выбирает из собственных значений максимальный из них?)

п.с. если не трудно, Вы не могли бы ещё посоветовать на счёт умножения матриц
http://dxdy.ru/topic59134.html

 Профиль  
                  
 
 Re: Mathematica Метод степенных итераций для подсчёта С.В. С. З.
Сообщение28.05.2012, 10:25 


20/12/11
44
Alexeybk5 в сообщении #577411 писал(а):
Т.е. эта часть кода выбирает из собственных значений максимальный из них?)

Эта часть кода полагается на функцию Sort и ожидает, что после ее работы наибольший элемент будет первым или последним в списке. Пример:
Код:
In> a = {1, 10, -5, -8, -8}
b = {-5, -4, -3, -5}
Sort[a] (* здесь наибольший элемент будет последним *)
Sort[b] (* здесь -- первым *)
maxsize[a]
maxsize[b]

 Профиль  
                  
 
 Re: Mathematica Метод степенных итераций для подсчёта С.В. С. З.
Сообщение28.05.2012, 22:18 


27/10/11
228
Спасибо большое, а вот эта часть кода для чего ? Зачем нам m нужно
Код:
While[ count <= m,
    count = count + 1;
    Y = A.X0;
    \[Lambda] = maxsize[Y];
    X = 1/\[Lambda] Y

 Профиль  
                  
 
 Re: Mathematica Метод степенных итераций для подсчёта С.В. С. З.
Сообщение29.05.2012, 22:45 


27/10/11
228
Товарищи))

 Профиль  
                  
 
 Re: Mathematica Метод степенных итераций для подсчёта С.В. С. З.
Сообщение30.05.2012, 10:18 


20/12/11
44
По ссылке в первом посте писал(а):
Assume that the $n\times n$ matrix $A$ has $n$ distinct eigenvalues $\lambda_1, \lambda_2,\dots,\lambda_n$

Вот $n$ здесь, есть $m$ в коде.

 Профиль  
                  
 
 Re: Mathematica Метод степенных итераций для подсчёта С.В. С. З.
Сообщение30.05.2012, 21:26 


27/10/11
228
Спасибо :-)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group