реклама на сайте
подробности

 
 
> Вычисление собственных векторов
mihalevski
сообщение Aug 1 2013, 03:49
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 20-05-10
Из: Omsk
Пользователь №: 57 391



Имеется матрица комплексных значений размером 4 на 4.
Необходим код на Си решающий задачу определения собственных векторов указанной матрицы.
Дополнительные сведения:
1. Собственные числа матрицы уже определены с помощью алгоритма QR.
2. Система построена на сигнальном процессоре Аналог девайс DSP TigerSHARC.

Помогите ссылкой на удобный в реализации на процессоре алгоритм или готовый код программы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Xenia
сообщение Aug 1 2013, 11:47
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



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

К сожалению, эти надежды оправдываются далеко не всегда. В большинстве случае бавает гораздо проще вычислить полный набор того и другого, используя алгортмы, вычисляющие собзначения вместе с их собвекторами, нежели прилаживать вектора к уже имеющимся собственным значениям.

Не знаю, как сейчас, но традиционно для последней цели использовались обратные итерации с последующей реортогонализацией полученного набора собвекторов. Процедура гадкая по части объема вычислений, т.к. матрицу векторов приходится очень много раз вращать. А в случае комплексных чисел и вовсе ужасная по числу операций.

Из собственного опыта (правда он у меня касается только действительных матриц) могу посоветовать повторить QR-алгоритм в варианте с собственными векторами. Однако ускорив его тем, что "подсказывать" этой процедуре готовые величины собзначений (в точности в том же порядке, в котором они были найдены и никаком другом!), а не находить их методом итераций. Тогда, несмотря на итерационную реализацию алгоритма, он сходится за один проход на каждое собственное значение. Об этом еще Парлетт писал в своей книжке "Симметричная проблема собственных значений". И, кажется, именно он это свойство впервые обнаружил.

Но это я пишу лишь с очень слабой надеждой, что реализация алгоритма вам интересна. Но если нужен просто чужой готовый код, чтоб свои мозги не утруждать, то тогда я пас.
Go to the top of the page
 
+Quote Post
AndrewN
сообщение Sep 16 2013, 01:30
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961



QUOTE (mihalevski @ Aug 1 2013, 06:49) *
Имеется матрица комплексных значений размером 4 на 4.
Необходим код на Си решающий задачу определения собственных векторов
Удалось?
QUOTE (Xenia @ Aug 1 2013, 14:47) *
Об этом еще Парлетт писал
Ай да Бересфорд... А за пол-итерации можно?

Go to the top of the page
 
+Quote Post
mihalevski
сообщение Jun 26 2014, 07:22
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 20-05-10
Из: Omsk
Пользователь №: 57 391



Цитата(AndrewN @ Sep 16 2013, 08:30) *
Удалось?
Ай да Бересфорд... А за пол-итерации можно?

Все удалось но только ж...пу отсидел. И еще выполнение операций в фомате float не позволяло пеленговать сигналы приходящие с малым угловым разрешением. И только переход на long double дал результат.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jun 27 2014, 11:44
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(mihalevski @ Jun 26 2014, 11:22) *
Все удалось но только ж...пу отсидел. И еще выполнение операций в фомате float не позволяло пеленговать сигналы приходящие с малым угловым разрешением. И только переход на long double дал результат.


Оно и без программирования было ясно, что на float'е в матричной алгебре далеко не уедешь. Но процессор у вас прежний остался, TigerSHARC? Какой разрядности у него doublе и long double? Аппаратная арифметика или эмуляция?

P.S. Давно (в 2008 году) у нас на форуме тема была, где Sharc-процессоры сильно ругали по поводу плавучки:
http://electronix.ru/forum/index.php?showtopic=55332
Насколько это справедливо к вашему TigerSHAC? Что-то сдинулсь с тех времен?
Может быть вам на другой процессор перейти, где double64 аппаратно поддерживается?
Go to the top of the page
 
+Quote Post
mihalevski
сообщение Jun 27 2014, 13:33
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 20-05-10
Из: Omsk
Пользователь №: 57 391



Цитата(Xenia @ Jun 27 2014, 18:44) *
Оно и без программирования было ясно, что на float'е в матричной алгебре далеко не уедешь. Но процессор у вас прежний остался, TigerSHARC? Какой разрядности у него doublе и long double? Аппаратная арифметика или эмуляция?

P.S. Давно (в 2008 году) у нас на форуме тема была, где Sharc-процессоры сильно ругали по поводу плавучки:
http://electronix.ru/forum/index.php?showtopic=55332
Насколько это справедливо к вашему TigerSHAC? Что-то сдинулсь с тех времен?
Может быть вам на другой процессор перейти, где double64 аппаратно поддерживается?


Это DSP и арифметика у него аппаратная. Платформу TS201 выбирали другие специалисты и кстати не прогадали если
учесть что в следующем году Миландер по программе импортозамещения выпускает процессор 1967ВЦ2Т и обещает
обратную совместимость с ADSP-TS201 как по исполняемому кода, так и по работе со средой разработки VisualDSP,
Минимальное изменение системной платы при миграции с TS201 на 1967ВЦ2Т.
Использовался Си компилятор поставляемый со средой VisualDSP и он соответсвует стандартну. Со средой разработки
поставляется библиотека Синапс для работы с комплексными числами complex_long_double и complex_float, матрицами, БПФ,
цифровые фильтры и множество разных функций. Но нужно вниметельно смотреть на версию среды разработки так как
несмотря на то что названия функций в зависимости от арифметики оканчиваются либо на f или d в старых версиях это
всегда f.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01801 секунд с 7
ELECTRONIX ©2004-2016