2014 dxdy logo

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

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




На страницу 1, 2, 3  След.
 
 О собственных значениях
Сообщение15.12.2006, 02:22 
Аватара пользователя
Вопрос.
Может сложиться такая ситуация?:
Ррешается полная проблема собственных значений.
Затем полученный результат проверяется на выполнение условиям, вытекающим из определения собственных значений.
Я знаю таких три:
а) сумма модулей всех собственных значений должна быть близкой сумме модулей диагональных элементов матрицы (не равна т.к. алгоритмы дают приближенный результат)
б) произведение модулей собственных значений - близко величине определителя матрицы
в) собственне значения должны удовлетворять характеристическому уравнению, т.е. равенству нулю определителя $\det \left( {A - \lambda E} \right) = 0$.

Для некоторых матриц у меня получается, что а) и б) выполняются с хорошой точностью, а последнее - в) вообще не выполняется (определитель не близок к нулю, а вообще огромное число).

 
 
 
 
Сообщение15.12.2006, 09:53 
Аватара пользователя
Собственно, условие в есть один из вариантов определения собственных значений. Поэтому оно должно выполняться безусловно.

О матрицах какого порядка идет речь? Ошибка либо в вычислении сотственных значений, либо в вычислении определителя. Возможно, накапливается какая-то вычислительная погрешность. Попробуйте проверить вычисление собственных значений с помощью какого-нибудь математического пакета. Еще можно попробовать провести вычисления с маленькими матрицами, чтобы все можно было проверить вручную.

 
 
 
 
Сообщение15.12.2006, 11:29 
Аватара пользователя
Все, что Вы перечислили было проделано.
1) Сверял результаты с маткадом. Хорошо совпадает.
2) Проверял алгоритм на разных хороших матрицах, т.е. на небольших (проверяемых вручную) и больших, но хорошо обусловленных (все три условия выполняются).
3) Точно также проверял и определитель. Причем для расчета определителя у меня имеются два алгоритма.
4) Матрицы небольшие, но плохо обусловленные.
5) В правильности решения более или менее уверен.

При использовании алгоритма отыскания собственных значений к различным по размерности, но хорошо обусловленным матрицам получается, что условие в) выполняется все лучше с увелоичением размерности (0пределитель получается $\det (A - \lambda E) \simeq 10^{ - 30} $
и даже меньше).

 
 
 
 
Сообщение15.12.2006, 12:15 
1) Ничего не написали ни про размерность матриц, ни про число обусловленности, ни про спектр, а это, вообще говоря, существенно.
2) Можете найти собственные вектора и проверить качество того и другого.
3) Матрицу принято балансировать для вычислений (например для вычисления детерминанта)

 
 
 
 
Сообщение15.12.2006, 15:46 
Аватара пользователя
Матрицы размерностью не болле чем $1000 \times 1000$.
Спектр, как указано выше, удовлетворяет условиям а) и б), но не удовлетворяет в). И при этом он содержит комплексно значные числа. Но из постановки вопроса должно быть ясно, что всем этим расчетам я не доверяю, поэтому о числе обусловленности писать не буду (я пока считаю, что алгоритмы, которые я использую не позволяют его найти). Определитель (в нем я более уверен) очень мал. К примеру $\det \left( {A^{300 \times 300} } \right) = {\text{2}}{\text{,3}} \cdot {\text{10}}^{{\text{ - 531}}} $.
Comga писал(а):
2) Можете найти собственные вектора и проверить качество того и другого.

Что значит качество того и другого (не понял)?
Comga писал(а):

3) Матрицу принято балансировать для вычислений (например для вычисления детерминанта)

Что значит балансировать?

 
 
 
 
Сообщение15.12.2006, 16:03 
Аватара пользователя
Так проверьте по заданной матрице и собственные вектора, и определитель (сравните с мат.пакетом). Что не совпадет, там значит и ошибка.

 
 
 
 
Сообщение15.12.2006, 21:38 
Аватара пользователя
А какой смысл мне искать собственные вектора для возможно неправильно посчитанных собственных значений?
С Mathcad мои расчеты совпадают и по спектру и по определителю исходной матрицы $A$.
Но условие $\det \left( {A - \lambda _i E} \right) = 0$ для некоторых $\lambda _i $ (не для всех, только для нескольких максимальных по модулю) нарушается (и в Mathcad и в моей программе для $\det \left( {A - \lambda _i E} \right)$ выдаются большие значения, причем эти значения не совпадают).

 
 
 
 
Сообщение15.12.2006, 22:04 
Аватара пользователя
Т.е. Вы получаете, что Mathcad выдает в качестве собственного значения матрицы $A$ некоторое число $\lambda$, и он же выдает что $\det (A-\lambda E)$ большое число? Забавно.

 
 
 
 
Сообщение15.12.2006, 22:22 
Аватара пользователя
Так точно.
Использую для нахождения собственных значений в Mathcad процедуру eigenvals.
Это не так уж удивительно, бывало, что он (Mathcad) решал мне СЛАУ своими встроенными процедурами (lsolve в частности), а невязка получалась >100% (максимальная по модулю а не среднеквадратичная).

 
 
 
 
Сообщение15.12.2006, 23:42 
Аватара пользователя
Вероятно, это эффект ограниченной точности вычислений.

Вот забавный пример, показывающий неустойчивость больших корней алгебраического уравнения при малых изменениях уравнения (Mathematica 4.1):
$\mathbf{N[Solve[(x-1)(x-2)(x-3)(x-4)(x-5)(x-6)(x-7)(x-8)(x-9)}\\ \mathbf{(x-10)(x-11)(x-12)(x-13)(x-14)(x-15)(x-16)(x-17)(x-18)}\\ \mathbf{(x-19)(x-20)(x-21)(x-22)(x-23)(x-24)(x - 25)(x-26)(x-27)}\\ \mathbf{(x-28)(x-29)(x-30)(x-31)(x-32)+10^{-10}x^{30}==0,x],32]}$
$\{\{x\to 1.0000000000000000000000000000000\},\{x\to 2.0000000000000000000000000000000\},\\ \{x\to 3.0000000000000000000000000011643\},\{x\to 3.9999999999999999999999369757528\},\\ \{x\to 5.0000000000000000003563740703508\},\{x\to 5.9999999999999995431882789700103\},\\ \{x\to 7.0000000000002018194531903925218\},\{x\to 7.9999999999604120144505793703333\},\\ \{x\to 9.0000000040668704573265153740176\},\{x\to 9.9999997548285116609861286668699\},\\ \{x\to 11.000009412125009829985354941177\},\{x\to 11.999755752234634932515017125887\},\\ \{x\to 13.004553284959005167895987932308\},\{x\to 13.946540522513496405570270760926\},\\ \{x\to 15.123707811264094608818337034159-0.53711285777461487448822314708445i\},\\ \{x\to 15.123707811264094608818337034159+0.53711285777461487448822314708445i\},\\ \{x\to 16.622094130075808086747990926958-1.5456175599389122810029307442652i\},\\ \{x\to 16.622094130075808086747990926958+1.5456175599389122810029307442652i\},\\ \{x\to 18.364608131845854161643873898998-2.5642322226808945743950208315371i\},\\ \{x\to 18.364608131845854161643873898998+2.5642322226808945743950208315371i\},\\ \{x\to 20.423603500663870585088947020059-3.5122886056935141050178841917609i\},\\ \{x\to 20.423603500663870585088947020059+3.5122886056935141050178841917609i\},\\ \{x\to 22.845107881677431927305762648229-4.2498899092607344561408606754910i\},\\ \{x\to 22.845107881677431927305762648229+4.2498899092607344561408606754910i\},\\ \{x\to 25.605860880036052180282347387421-4.5617749317042816582931275571119i\},\\ \{x\to 25.605860880036052180282347387421+4.5617749317042816582931275571119i\},\\ \{x\to 28.522501899638564672144532643147-4.1874426798036444740315541566807i\},\\ \{x\to 28.522501899638564672144532643147+4.1874426798036444740315541566807i\},\\ \{x\to 31.161290603893327262854551185261-2.9576907519531275340494730588972i\},\\ \{x\to 31.161290603893327262854551185261+2.9576907519531275340494730588972i\},\\ \{x\to 32.855795795560925599249839965109-1.0445164385329707877790708850561i\},\\ \{x\to 32.855795795560925599249839965109+1.0445164385329707877790708850561i\}\}$
Здесь Вы можете видеть, что происходит с корнями, если коэффициенты уравнения подвергаются малому возмущению вследствие каких-либо причин (например, вследствие возникновения ошибки округления при вычислении коэффициентов).

 
 
 
 
Сообщение16.12.2006, 03:33 
Такие задачи делать с помощью Маthematica, MathCad или Maple -- лучше повеситься (основное предназначение у них не то). По-моему, MatLAB для этого дела больше подходит. В последний раз мы, я, сравнивали результаты собственных значений в Mathematica 5.1 и MatLAB для небольших матриц (поскольку часть результатов была получена в Мathematica, после чего переносилась в MatLAB). Приняла их удовлетворяющими критериям точности (можно сказать "на глаз", но результаты отличались уже в х знаке после запятой). Может стоить попробовать другой пакет, специально предназначенных для численных вычислений?

 
 
 
 
Сообщение16.12.2006, 08:10 
Аватара пользователя
:evil:
LynxGAV писал(а):
Такие задачи делать с помощью Маthematica, … -- лучше повеситься

Mathematica делает ровно то, что написано. Если написать 100 знаков, сделает 100. Напишешь 1000 — сделает 1000. Но писать надо, признаю, аккуратно (и указывая accuracy в том числе :) ).

У меня не очень большой опыт с М., но то, что я видел — численные методы сделаны вполне приемлемо (не по скорости, но по качеству результата).

 
 
 
 
Сообщение16.12.2006, 11:17 
Fgolm писал(а):
Матрицы размерностью не болле чем $1000 \times 1000$.
Спектр, как указано выше, удовлетворяет условиям а) и б), но не удовлетворяет в). И при этом он содержит комплексно значные числа. Но из постановки вопроса должно быть ясно, что всем этим расчетам я не доверяю, поэтому о числе обусловленности писать не буду (я пока считаю, что алгоритмы, которые я использую не позволяют его найти). Определитель (в нем я более уверен) очень мал. К примеру $\det \left( {A^{300 \times 300} } \right) = {\text{2}}{\text{,3}} \cdot {\text{10}}^{{\text{ - 531}}} $.

Максимальное по модулю собственное число можно найти, используя прямую итерацию. Есть отдельные программы, вычисляющие число обусловленности. Если число обусловленности 10^N, то необходимо иметь минимум N разрядную арифметику, чтобы не было потерь из-за ограниченной точности вычислений. Было бы правильно выложить матрицу и результаты работы для всех.

Fgolm писал(а):
Comga писал(а):
2) Можете найти собственные вектора и проверить качество того и другого.

Что значит качество того и другого (не понял)?

Проверить A x=\lambda x

Fgolm писал(а):
Что значит балансировать?

Построчная нормализация элементов матрицы, например.

 
 
 
 
Сообщение16.12.2006, 14:38 
Резутаты MatLAB для уравнения Someone.
:shock:

Код:
-35.45034264785386 + 1.82671978774743i
-35.45034264785386 - 1.82671978774743i
-33.52469196167482 + 5.08710672034733i
-33.52469196167482 - 5.08710672034733i
-30.27702935506426 + 7.35018191359883i
-30.27702935506426 - 7.35018191359883i
-26.42684031787888 + 8.40778900672977i
-26.42684031787888 - 8.40778900672977i
-22.51127078798312 + 8.36886431583805i
-22.51127078798312 - 8.36886431583805i
-18.85383855580688 + 7.56990822316522i
-18.85383855580688 - 7.56990822316522i
-20.46688512805427 + 3.01367775813702i
-20.46688512805427 - 3.01367775813702i
-15.74220016403341 + 6.40974874424462i
-15.74220016403341 - 6.40974874424462i
-13.26718829787621 + 5.05841568691830i
-13.26718829787621 - 5.05841568691830i
-11.31548361243937 + 3.65349243871979i
-11.31548361243937 - 3.65349243871979i
-9.76756227283725 + 2.29764220011169i
-9.76756227283725 - 2.29764220011169i
-8.53212069262100 + 1.05076344556426i
-8.53212069262100 - 1.05076344556426i
-7.70895927435456                   
-7.02022107103860                   
-5.99991866849548                   
-4.99999348318864                   
-3.99999990625347                   
-3.00000000852557                   
-1.99999999989745                   
-1.00000000000040

 
 
 
 
Сообщение16.12.2006, 15:39 
Аватара пользователя
Если кому интересно предлагаю матрицу одной из СЛАУ о которых шла речь:
http://slil.ru/23583981
Здесь матрица размерностью 100*100 (ВСЕ ЭЛЕМЕНТЫ ЗАПИСАНЫ В ОДИН СТОЛБЕЦ, т.е. первые 100 чисел в файле - это элементы первой строки матрицы, вторая сотня - элементы соответственно второй строки матрицы и т.д.). Все диагональные элементы этой матрицы - единичные. Ее определитель (у меня так получилось) $\det \left( A \right) = {\text{ - 9}}{\text{,5}} \cdot {\text{10}}^{{\text{ - 52}}} $.

Собственные значения, которые я получаю:
http://slil.ru/23583969.
Здесь имеется 4 пары комплексно сопряженных.

 
 
 [ Сообщений: 38 ]  На страницу 1, 2, 3  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group