|
Вычисление собственных векторов |
|
|
|
 |
Ответов
|
Aug 1 2013, 17:01
|
вопрошающий
    
Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436

|
Цитата(mihalevski @ Aug 1 2013, 09:49)  Помогите ссылкой на удобный в реализации на процессоре алгоритм или готовый код программы. проще всего взять Lapack в сорсах, если нет фортрановского компилера - скачать его сишную версию, или f2c на пол-мегабайта сорсов натравить, и будет счастье - знание собственных значений в этом случае Вам не обязательно. Кстати, так как не сказано, что матрица - эрмитова, у Вас есть гарантии, что там нет жордановых форм, или их Вам тоже надобно найти? Если хочется без лапака - обратные итерации, особенно с предобуславливателем в виде сдвинутой обратной очень просто дадут Вам решение - метод Арнольди (так это называется) должен с минимумом шаманства сойтись в Вашем случае за несколько итераций или показать Вам жордановы формы.
|
|
|
|
|
Aug 4 2013, 06:46
|
Частый гость
 
Группа: Участник
Сообщений: 100
Регистрация: 20-05-10
Из: Omsk
Пользователь №: 57 391

|
Цитата(iiv @ Aug 2 2013, 00:01)  проще всего взять Lapack в сорсах, если нет фортрановского компилера - скачать его сишную версию, или f2c на пол-мегабайта сорсов натравить, и будет счастье - знание собственных значений в этом случае Вам не обязательно.
Кстати, так как не сказано, что матрица - эрмитова, у Вас есть гарантии, что там нет жордановых форм, или их Вам тоже надобно найти?
Если хочется без лапака - обратные итерации, особенно с предобуславливателем в виде сдвинутой обратной очень просто дадут Вам решение - метод Арнольди (так это называется) должен с минимумом шаманства сойтись в Вашем случае за несколько итераций или показать Вам жордановы формы. Это корреляционная матрица, симметричная, обращаемая, с комплексными значениями. Математическое моделирование показало, что QR алгоритм работает, правда сходится медленно. На Си написать можно, но если уже имеется готовое решение на Си то лучше им и воспользоваться, а не изобретать велосипед. Если вы в теме то не могли бы дать ссылки на Lapack в сорсах, f2c. метод Арнольди и пояснить как это скачать.
|
|
|
|
|
Aug 4 2013, 19:57
|
вопрошающий
    
Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436

|
Цитата(mihalevski @ Aug 4 2013, 12:46)  Это корреляционная матрица, симметричная, обращаемая, с комплексными значениями. да, тогда она у Вас не симметричная, а эрмитова, жордановых форм у Вас не будет, все собственные значения должны быть не отрицательны, и Арнольди Вам попросту будет не нужен. Самое простое, скачать, скомпилить и радоваться http://www.netlib.org/lapack может Вам повезет и Вы найдете уже готовую сборку лапака для TigerSHARC, на раз гуглом я не нашел, но об этом много пишут, то есть должно быть. Вам нужна единственная функция zheev - но она за собой потянет сотни, а может тысячи других функций, то есть Вы конечно можете вытащить из лапака только то, что Вам надо, и компилить только эту вырезку, но лучше компилить весь лапак и не париться. Если будут конкретные затыки с компиляцией - говорите, постараюсь помочь. При Вашей маленькой размерности может подойти и быть почти оптимальным по скорости еще один вариант: Пусть Ваша матрица A=A_1, выполним для нее последовательно следующие операции A_{i+1} = A_i * A_i / ||A||_2^2 ||A_i||_2^2 - сумма квадратов всех матричных элементов. За число итераций, не более машинной точности (53 для двойной точности) Вы сойдетесь к одноранговой матрице, любая строка которой после нормировки равна собственному вектору, соответствующему максимальному собственному значению. Отнормировав собственный вектор v_1 и посчитав собственное его значение по формуле l_1=v_1^* A v_1 Вы можете вычесть из исходной матрицы l_1 v_1 v_1^* и найти следующий, второй собственный вектор. Также дальше можно поступить и с третьим вектором, а для четвертого Вам и в квадрат-то возводить не надо будет. Единственный затык этого метода будет в том случае, если Вы подадите точное в машинной арифметике матрицы с кратными нулевыми собственными значениями, но это тоже легко обойти добавив возмущение порядка машинной точности, но я предполагаю, что матрица корреляций возникает из экспериментальных данных, где такое происходит с какой-то очень маленькой вероятностью. Такой алгоритм пишется примерно в 100 строк за вечер и по скорости только слегка проигрывает лапаку без оптимальных бласовских примочек при Вашей размерности матрицы. Видя Ваши вопросы бласовские примочки на тигршарке Вы на раз не скомпилите, то есть лапак у Вас работать будет, а вот на сколько оптимально (по времени) он будет работать, я не ручаюсь.
|
|
|
|
|
Aug 11 2013, 19:23
|
Местный
  
Группа: Участник
Сообщений: 239
Регистрация: 15-11-09
Из: Санкт-Петербург
Пользователь №: 53 639

|
Цитата(iiv @ Aug 4 2013, 23:57)  Пусть Ваша матрица A=A_1, выполним для нее последовательно следующие операции A_{i+1} = A_i * A_i / ||A||_2^2 ||A_i||_2^2 - сумма квадратов всех матричных элементов.
Такой алгоритм пишется примерно в 100 строк за вечер и по скорости только слегка проигрывает лапаку без оптимальных бласовских примочек при Вашей размерности матрицы. Видя Ваши вопросы бласовские примочки на тигршарке Вы на раз не скомпилите, то есть лапак у Вас работать будет, а вот на сколько оптимально (по времени) он будет работать, я не ручаюсь. Во-первых, что такое у вас ||A||_2? Я так понимаю, вы хотели отнормировать матрицу, но тогда, вообще-то, надо указывать какая норма матрицы считается. Во-вторых, ваша итерационная процедура, если я её правильно понял, сойдётся в конце концов к диагональной матрице с собственными числами на диагонали. А причём тут собственные вектора? В-третьих, какой lapack, какой blas?! Вы вообще когда-нибудь програмили ЦПОСы для real-tim'а? Открою вам небольшой печальный секрет: на ЦПОС можно запрограмить "примерно в 100 строк за вечер" только то, что использует прилагаемую разработчиком математическую (или сигнальную) библиотеку. Ибо, всё иное либо: а) приведёт к совершенно не realному времени (а нахрена тогда нужен DSP'шник - считайте на калькуляторе), б) наём дорогостоящего программера, который вашу функцию будет ногами и руками упихивать в прокрустово ложе конкретной архитектуры на асме.
|
|
|
|
|
Aug 13 2013, 08:26
|
вопрошающий
    
Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436

|
2 Kluwert, не буду с Вами дискутировать, видя у Вас полное отсутствие знаний по вычислительной математике, тому пример, Ваше Высказывание: Цитата(Kluwert @ Aug 12 2013, 00:23)  Во-вторых, ваша итерационная процедура, если я её правильно понял, сойдётся в конце концов к диагональной матрице с собственными числами на диагонали. А причём тут собственные вектора? Без уважения к Kluwert и с уважением к остальным ИИВ
|
|
|
|
Сообщений в этой теме
mihalevski Вычисление собственных векторов Aug 1 2013, 03:49 Xenia Задача получения собственных векторов к уже имеющи... Aug 1 2013, 11:47 AndrewN QUOTE (mihalevski @ Aug 1 2013, 06:49) Им... Sep 16 2013, 01:30  mihalevski Цитата(AndrewN @ Sep 16 2013, 08:30) Удал... Jun 26 2014, 07:22   Xenia Цитата(mihalevski @ Jun 26 2014, 11:22) В... Jun 27 2014, 11:44    mihalevski Цитата(Xenia @ Jun 27 2014, 18:44) Оно и ... Jun 27 2014, 13:33   AndrewN QUOTE (mihalevski @ Jun 26 2014, 10:22) В... Aug 12 2014, 17:06 mihalevski Цитата(mihalevski @ Aug 1 2013, 10:49) Им... Aug 1 2013, 16:53   mihalevski Цитата(iiv @ Aug 5 2013, 02:57) да, тогда... Aug 13 2013, 17:46    iiv Цитата(mihalevski @ Aug 13 2013, 23:46) д... Aug 14 2013, 00:41 Major ЦитатаИ только переход на long double дал результа... Jun 27 2014, 04:04
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|