2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 
Сообщение16.12.2006, 17:43 
Экс-модератор
Аватара пользователя


23/12/05
12064
MatLAB дает тоже $det(A)=-9.517125718623159\cdot10^{-52}$
и среди собственных значений четыре пары комплексно-сопряженных:
Код:
  1.24109930684514 + 0.82813911549924i
  1.24109930684514 - 0.82813911549924i
  1.91787489084256 + 0.00135018136097i
  1.91787489084256 - 0.00135018136097i
-0.18282665574439 + 0.00022681243020i
-0.18282665574439 - 0.00022681243020i
-0.10532373596563 + 0.00006042103784i
-0.10532373596563 - 0.00006042103784i


остальные - действительные

PS скачивалось, несмотря на малый объем, очень тяжко - попытки с тридцатой

 Профиль  
                  
 
 
Сообщение16.12.2006, 19:28 
Заслуженный участник
Аватара пользователя


31/10/06
371
РФ, РК, г.Симферополь
А что получится, если на MatLAB посчитать $\det \left( {A - \lambda _0 E} \right)$, где ${\lambda _0 }$ - максимальное по модулю собственное значение, $E$ - единичная матрица?

 Профиль  
                  
 
 
Сообщение16.12.2006, 19:31 
Экс-модератор
Аватара пользователя


23/12/05
12064
Fgolm писал(а):
А что получится, если на MatLAB посчитать $\det \left( {A - \lambda _0 E} \right)$, где ${\lambda _0 }$ - максимальное по модулю собственное значение, $E$ - единичная матрица?


Код:
-2.349387318151008e-047

 Профиль  
                  
 
 
Сообщение16.12.2006, 20:35 
Заслуженный участник
Аватара пользователя


31/10/06
371
РФ, РК, г.Симферополь
А само ${\lambda _0 }$ чему равно?

 Профиль  
                  
 
 
Сообщение16.12.2006, 20:41 
Экс-модератор
Аватара пользователя


23/12/05
12064
$3.78041071319155$

 Профиль  
                  
 
 
Сообщение16.12.2006, 21:38 
Заслуженный участник
Аватара пользователя


31/10/06
371
РФ, РК, г.Симферополь
Остальные собственные значения, как я понимаю, тоже совпадают.

А что ж тогда у меня за бред получается.
Дело в том, что когда я проверяю условие $\det \left( {A - \lambda _N E} \right)$, где ${\lambda _N }$ - минимальное по модулю то получаю $\det \left( {A - \lambda _N E} \right) = 3,06 \cdot 10^{ - 67} $. А вот $\det \left( {A - \lambda _0 E} \right) = 1,17 \cdot 10^{ + 40} $, где ${\lambda _0 }$ - максимальное по модулю.

А вы случайно не знаете каким методом в MatLAB считаются определители.
Я - методом разложения на треугольные сомножители (Mathcad по моему тоже).

 Профиль  
                  
 
 
Сообщение16.12.2006, 21:47 
Экс-модератор
Аватара пользователя


23/12/05
12064
MatLAB help: det писал(а):
Algorithm

The determinant is computed from the triangular factors obtained by Gaussian elimination
Код:
[L,U] = lu(A)
s =  det(L)        % This is always +1 or -1
det(A) = s*prod(diag(U))


MatLAB help: lu писал(а):
The lu function expresses a matrix X as the product of two essentially triangular matrices, one of them a permutation of a lower triangular matrix and the other an upper triangular matrix. The factorization is often called the LU, or sometimes the LR, factorization. X can be rectangular. For a full matrix X, lu uses the Linear Algebra Package (LAPACK) routines described in Algorithm.

[L,U] = lu(X) returns an upper triangular matrix in U and a permuted lower triangular matrix L (that is, a product of lower triangular and permutation matrices), such that X = L*U.

[L,U,P] = lu(X) returns an upper triangular matrix in U, a lower triangular matrix L with a unit diagonal, and a permutation matrix P, so that L*U = P*X.

Y = lu(X) returns a matrix Y, which contains the strictly lower triangular L, i.e., without its unit diagonal, and the upper triangular U as submatrices. That is, if [L,U,P] = lu(X), then Y = U+L-eye(size(X)). The permutation matrix P is not returned by Y = lu(X).

[L,U,P,Q] = lu(X) for sparse nonempty X, returns a unit lower triangular matrix L, an upper triangular matrix U, a row permutation matrix P, and a column reordering matrix Q, so that P*X*Q = L*U. This syntax uses UMFPACK and is significantly more time and memory efficient than the other syntaxes, even when used with colamd. If X is empty or not sparse, lu displays an error message.

[L,U,P] = lu(X,thresh) controls pivoting in sparse matrices, where thresh is a pivot threshold in the interval [0,1]. Pivoting occurs when the diagonal entry in a column has magnitude less than thresh times the magnitude of any sub-diagonal entry in that column. thresh = 0 forces diagonal pivoting. thresh = 1 (conventional partial pivoting) is the default.

[L,U,P,Q] = lu(X,thresh) controls pivoting in UMFPACK, where thresh is a pivot threshold in the interval [0,1]. Given a pivot column j, UMFPACK selects the sparsest candidate pivot row i such that the absolute value of the pivot entry is greater than or equal to thresh times the absolute value of the largest entry in the column j. For complex matrices, absolute values are computed as abs(real(a)) + abs(imag(a)). The magnitude of entries in L is limited to 1/thresh.

Setting thresh to 1.0 results in conventional partial pivoting. The default value is 0.1. Smaller values of thresh lead to sparser LU factors, but the solution might be inaccurate. Larger values usually (but not always) lead to a more accurate solution, but increase the number of steps the algorithm performs.

 Профиль  
                  
 
 
Сообщение16.12.2006, 23:39 
Заслуженный участник
Аватара пользователя


23/07/05
17976
Москва
LynxGAV писал(а):
Резутаты MatLAB для уравнения Someone.

Код:
-35.45034264785386 + 1.82671978774743i
...


Почему-то все корни с противоположными знаками. Вероятно, Вы вместо минусов написали плюсы.

Но результаты странные.
Подстановка процитированного корня (с противоположным знаком) в уравнение даёт $-2.27109\times 10^{38}-7.12456\times 10^{38}i$, в то время как при подстановке своего значения $x=32.855795795560925599249839965109+1.0445164385329707877790708850561i$ Mathematica выдаёт $0.\times 10^6+0.\times 10^6i$ (внутреннее представление этого числа: $203030.9296`-0.9556+94940.669786006`-1.2605i$; числа после обратных штрихов означают количество правильных значащих цифр; поскольку эти "количества" отрицательные, правильных цифр нет вообще, а Mathematica при выдаче результата пишет только нули, указывая, что результат имеет порядок $10^6$).
Вычисление корня с точностью 64 цифры даёт
$x=32.85579579556092559924983996510925420091889286109187395090919651++1.044516438532970787779070885056079053309750778291120063496930296i\text{,}$
а при подстановке его в уравнение получается $-0.\times 10^{-26}+-0.\times 10^{-26}i$. Это означает, что в процессе вычисления многочлена теряются $64-26=38$ значащих цифр.

Остаётся только гадать, сколько значащих цифр теряются при манипуляциях с матрицей сотого порядка, её определителем, характеристическим многочленом и так далее. В свете этих экспериментов меня не удивляет то, что наблюдает Fgolm. Я могу только посоветовать, считая элементы матрицы точными числами, провести вычисления с точностью несколько сотен десятичных цифр. Сколько это займёт времени, если пользоваться, например, пакетом Mathematica, не знаю (прежде, чем начинать вычисления, нужно к каждому элементу матрицы применить функцию x=SetAccuracy[x,n], где $n$ - требуемое количество "правильных" цифр элементов матрицы).

 Профиль  
                  
 
 
Сообщение16.12.2006, 23:44 
Экс-модератор
Аватара пользователя


23/12/05
12064
а в MatLAB все типа double, а если залазить в символьные вычисления, то там ядро, если не ошибаюсь, такое же как и у Mathematika, но я считаю, что MatLAB создан не для этого и крайне редко этими возможностями пользуюсь

 Профиль  
                  
 
 
Сообщение17.12.2006, 00:05 
Заслуженный участник


28/10/05
1368
Someone писал(а):
Почему-то все корни с противоположными знаками. Вероятно, Вы вместо минусов написали плюсы.


Нет. Я скопировала код.

 Профиль  
                  
 
 
Сообщение17.12.2006, 00:17 
Заслуженный участник
Аватара пользователя


23/07/05
17976
Москва
LynxGAV писал(а):
Someone писал(а):
Почему-то все корни с противоположными знаками. Вероятно, Вы вместо минусов написали плюсы.


Нет. Я скопировала код.


Тогда не понимаю, почему знаки корней противоположные. А подстановка $-35.45034264785386 + 1.82671978774743i$ даёт вообще $1.91108\times 10^{54}-4.41581\times 10^{54}i$.

 Профиль  
                  
 
 
Сообщение17.12.2006, 01:47 
Заслуженный участник


28/10/05
1368
Someone писал(а):
Тогда не понимаю, почему знаки корней противоположные. А подстановка $-35.45034264785386 + 1.82671978774743i$ даёт вообще $1.91108\times 10^{54}-4.41581\times 10^{54}i$.


Да. Я ошиблась со знаками. Корни положительные:

Код:
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

 Профиль  
                  
 
 
Сообщение18.12.2006, 11:01 


02/05/06
56
Someone писал(а):
Остаётся только гадать, сколько значащих цифр теряются при манипуляциях с матрицей сотого порядка, её определителем, характеристическим многочленом и так далее. В свете этих экспериментов меня не удивляет то, что наблюдает Fgolm. Я могу только посоветовать, считая элементы матрицы точными числами, провести вычисления с точностью несколько сотен десятичных цифр.


Для борьбы с потерей точности и делают балансировку, а также применяют другие вполне очевидные приемы.

 Профиль  
                  
 
 
Сообщение18.12.2006, 11:56 
Аватара пользователя


09/05/06
115
Fgolm писал(а):
Так точно.
Использую для нахождения собственных значений в Mathcad процедуру eigenvals.
Это не так уж удивительно, бывало, что он (Mathcad) решал мне СЛАУ своими встроенными процедурами (lsolve в частности), а невязка получалась >100% (максимальная по модулю а не среднеквадратичная).
На самом деле Mathcad имеет 2 движка. Один численный, второй символьный. В Mathcad встроена система MapleV R4. В интерфейсе программы используются два оператора "равно": = и ->. Когда Вы используете стрелку, то Mathcad передаёт данные Maple'у внутри себя и потом возвращает результат. Библиотека Maple имеет много дублирующих функций, которые можно выполнять независимо от численных, которые приведены в справке к Mathcad. Замечено (некоторыми дотошными пользователями), что функция поиска собственных значений иногда выдаёт неожиданные результаты, причём встроенная такая же символьная функция выдаёт правильный результат. Найду пример по-проще, покажу. Мы как-то сравнивали эвивалентные символьные недокументированные и численные документированные функции Mathcad.

Вот пример. Выполнено в MC11. Пример принадлежит Годунову Сергею Константиновичу (был продемонстрирован мне на форуме Mathcad Казаковым Ю. В.)
Изображение

Добавлено спустя 17 минут 30 секунд:

photon писал(а):
а в MatLAB все типа double, а если залазить в символьные вычисления, то там ядро, если не ошибаюсь, такое же как и у Mathematika, но я считаю, что MatLAB создан не для этого и крайне редко этими возможностями пользуюсь
Ошибаетесь. Там тоже Maple. Если посмотреть в папке с тулбоксом Symbol Toolbox, то это можно обнаружить невооружённым глазом (symbolic). Matlab использует OEM библиотеку Maple, точнее даже пакет, который раньше назывался MathEdge2 (или просто MathEdge). Этот пакет в конце прошлого тысячилетия использовался во многих приложэениях, т.к. давал возможность использования символьных вычислений у себя в программе. Matlab обращается к библиотеке mapleoem.dll для расчётов через специальный интерфейсный .m файл. Надо отметить, что возможностей у этого ядра больше, чем в стандартной поставке Mathcad, но последнее лего лечится небольшим апгрейдом.

 Профиль  
                  
 
 
Сообщение18.12.2006, 12:40 
Экс-модератор
Аватара пользователя


23/12/05
12064
photon писал(а):
то там ядро, если не ошибаюсь, такое же как и у Mathematika

uni писал(а):
Ошибаетесь. Там тоже Maple.

А у Maple и Mathematika они разные?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2, 3  След.

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



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

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


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

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