Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2018, 00:33   #1
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию Вопрос по AlgLib.

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

Вот пример с решением в маткаде с которым я пытаюсь свести свои результаты:
Есть матрица:
Код:
 { 1, 2, 3 }, 
 { 0, 1, 2 }, 
 { 3, 4, 1 }
Далее я использую функцию alglib.rmatrixevd Описание

Код:
alglib.rmatrixevd(M, 3, 3, out wr, out wi, out vl, out vr);
Вот результаты:
Код:
матрица wr
Eigenvals
-2,710+0,000i
0,271+0,000i
5,439+0,000i
Это соответствует собственным значениям в том же примере маткада пусть и в перевернутом виде.

А вот дальше беда.
Библиотечная функция дает мне результат как левые и правые вектора:
Код:
Eigenvec
Матрица vr
0.518	-1.000	-0.879	
0.539	0.803	-0.451	
-1.000	-0.293	-1.000	

Матрица vl
0.809	-0.708	-0.561	
0.642	1.000	-1.000	
-1.000	0.172	-0.829
В описании пишут
Цитата:
VL, VR - arrays of left and right eigenvectors (if they are needed).
If WI[i]=0, the respective eigenvalue is a real number,
and it corresponds to the column number I of matrices VL/VR.
If WI[i]>0, we have a pair of complex conjugate numbers with
positive and negative imaginary parts:
the first eigenvalue WR[i] + sqrt(-1)*WI[i];
the second eigenvalue WR[i+1] + sqrt(-1)*WI[i+1];
WI[i]>0
WI[i+1] = -WI[i] < 0
In that case, the eigenvector corresponding to the first
eigenvalue is located in i and i+1 columns of matrices
VL/VR (the column number i contains the real part, and the
column number i+1 contains the imaginary part), and the vector
corresponding to the second eigenvalue is a complex conjugate to
the first vector.
Arrays whose indexes range within [0..N-1, 0..N-1].
Сколько я в это не вчитывался и че только не пробовал требуемый результат даже близко не получается.

Должно быть:
Код:
0,625 0,76 -0,415
0,321 -0,611 -0,432
0,711 0,222 0,801
В общем прошу ткните меня носом что где и как нужно посчитать чтобы прийти к указанному результату?
Спасибо.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 28.02.2019, 13:20   #2
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 979
По умолчанию

И так разъясняю, это некро пост, так как других на русском я не нашёл.

Тут всё верно выдало. погрешность всего 0,01 по сравнению с маскадом.
Если почитать теорию, то вектору пофиг на умножение на одно и то же число всех его координат.

исходные данные утверждение
Матрица vr
0.518 -1.000 -0.879
0.539 0.803 -0.451
-1.000 -0.293 -1.000
должно быть по маскаду
0,625 0,76 -0,415
0,321 -0,611 -0,432
0,711 0,222 0,801

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

а доказательства верности.
столбец 3 у vr
-0,879
-0,451
-1
соответствует для маскада
0,625
0,321
0,711

то есть в библиотеке AlgLib столбцы с конца идут.
проверяем
1. найдём число на которое умножен вектор библиотеки, лучше сделать с нормированым.
0,711/-1=-0,711
2.домножим все координаты на полученное число
-0,879*-0,711=0,624969
-0,451*-0,711=0,320661
-1*-0,711=0,711
в итоге получили если округлить тоже что и в маскаде.
со вторым столбцом аналогично ищем нормированый и домножаем,
-1
0,803
-0,293
маскад
0,76
-0,611
0,222
множитель 0,76/-1=-0,76
проверка
0,76
-0,61028
0,22268
в итоге получили, если округлить, тоже что и в маскаде с точностью 0,01.
Последний то же сойдётся, можете сами проверить.

Выводы.
Если либа выдала вам странные вектора, то наверное была другая сортировка собственных значений.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.

Последний раз редактировалось IliaIT; 28.02.2019 в 13:43.
IliaIT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Жизненный вопрос - Дано: я - самый умный. Вопрос: что делать? где это найти то, чего тебе не хватает? jura_k Свободное общение 16 10.03.2017 12:12
примеры кода с ALGLIB alik98 Помощь студентам 0 05.03.2013 19:04
Библиотека ALGLIB PROkaZZZniK Свободное общение 0 12.05.2012 19:28
Установка ALGLIB GRischka Общие вопросы .NET 0 20.07.2010 17:02
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10