|
Эрмитовые Матрицы, выразыть в параметрах собственный вектор соответствующий... |
|
|
|
Apr 3 2012, 09:42
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 4-03-12
Пользователь №: 70 608

|
Привет уважаемые форумчане,
У меня есть такой вопрос: Есть некая комплексная матрица V размером (Nx3). Я создаю Эрмитовую матрицу G=V^H*V (размер NxN). H обозначает conjugate transpose. Мне нужно выразить собственный вектор матрицы G соответствующий максимальному собственному значению. Может кто знает книгу где выведено уже готовое выражение для соответствующей задачи или может это есть в какой нибудь статье на IEE.
с уважением
|
|
|
|
|
 |
Ответов
|
Apr 3 2012, 10:36
|

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

|
Цитата(reginil_y @ Apr 3 2012, 13:42)  У меня есть такой вопрос: Есть некая комплексная матрица V размером (Nx3). Я создаю Эрмитовую матрицу G=V^H*V (размер NxN). H обозначает conjugate transpose. Мне нужно выразить собственный вектор матрицы G соответствующий максимальному собственному значению. Может кто знает книгу где выведено уже готовое выражение для соответствующей задачи или может это есть в какой нибудь статье на IEEE. А что вам мешает решать задачу в лоб? Вычислите G, а потом найдите у нее главный собственный вектор. Благо алгоримы для нахождения собственных векторов и значений эрмитовых матриц можно найти в любом справочнике по матричным вычислениям. Хотя, если бы я решала эту задачу, то скорее всего получила другую эрмитову матрицу, F=V*V H размером 3x3, нашла у нее главный собственный вектор, а потом умножила его на исходную матрицу V, получив в результате то, что вам надо  . Этот путь вычислительно эффективен, благодаря малой размерности F. А из короткого собственного вектора всегда можно получить длинный, умножением на саму матрицу.
|
|
|
|
|
Apr 3 2012, 11:58
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 4-03-12
Пользователь №: 70 608

|
Цитата(Xenia @ Apr 3 2012, 13:36)  Хотя, если бы я решала эту задачу, то скорее всего получила другую эрмитову матрицу, F=V*V H размером 3x3, нашла у нее главный собственный вектор, а потом умножила его на исходную матрицу V, получив в результате то, что вам надо  . Этот путь вычислительно эффективен, благодаря малой размерности F. А из короткого собственного вектора всегда можно получить длинный, умножением на саму матрицу. 100 балов!!! Дело в том, что в лоб решать было бы не то что бы сложно... просто невозможно. Так как все в параметрах и для каждого собственного значения пришлось бы искать детерминанту матрицы размером NxN. Да еще и в добавок нужно подставить этот вектор в выражение, которое совсем не маленькое а потом еще и делать производную по параметрам которые будут присутствовать в данном векторе .А вот сделать как вы сказали это намного элегантней. Большое спасибо! P.S. Для того чтоб воспользоваться вашим решением необходимо знать что собственные значения отличные от нуля матриц V*V^(H) и V^(H)*V одинаковы. Это к счастью я знал. А вот как потом удлиннить вектор, догадаться не смог
Сообщение отредактировал reginil_y - Apr 3 2012, 12:05
|
|
|
|
|
Apr 3 2012, 23:24
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 4-03-12
Пользователь №: 70 608

|
Цитата(Xenia @ Apr 3 2012, 19:11)  По нынешним временам никто через детеминанты эту задачу не решает - QL метод рулит.
Уточнение. Умножением короткого СВ на исходную матрицу получается не совсем длинный СВ, а его произведение на соответствующее ему собственное значение. Формально это не мешает ему называться собственным вектором, но все-таки желательно нормировать его на единицу, тем самым, избавляясь от сомножителя. Может я действительно что то пропустил,но... Допустим F=V^H*V - матрица 3на3 Тогда должно выполнаться: (V^H*V)*h=lam*h, где h СВ, а lam СЗ матрицы F соответственно Обозначим y=V*h отсюда V^H*y=lam*h Умножим обе части на V: (V*V^H)*y=lam*(V*h) Отсюда получаем: G*y=lam*y. Тоесть y и есть искомый СВ. Хотя интуиция подсказывает что нормировать было бы не лишним. А что такое QL? Потому что даже для матрицы 3на3 мне расчеты показываются слишком длинными.
|
|
|
|
|
Apr 3 2012, 23:51
|

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

|
Цитата(reginil_y @ Apr 4 2012, 03:24)  А что такое QL? Потому что даже для матрицы 3на3 мне расчеты показываются слишком длинными. А они и не могут быть короткими  . QL - это итерационный метод, основанный на разложении тридиагональной матрицы на произведение ортогональной Q и нижней трегольной L. На самом же деле эти сомножители не вычисляются, а имеет место хитрая последовательность однообразных процедур, когда с тридиагональной матрицы "сдирают кожу"  , при этом ее поддиагональ с верхнего края "обтёсывается" после каждого прохода преобразований по цепочке сверху вниз. Итерации сходятся замечательно - в среднем требуется не более 2-х итераций на каждое собственное значение. Но сам процесс вычислений муторный и малопонятный  . Да, еще позабыла сказать, что первой стадией является приведение матрицы к тридиагональному виду, а дальше алгоритм работает лишь с парой диагоналей - главной диагональю и ее соседкой (поддиагональю). Соседка с другой стороны в вычислениях не участвует, т.к. триагональная матрица, получаемая из эрмитовой всегда симметрична, а QL-алгоритм тем и хорош, что своими итерациями эту симметричность не нарушает. Например, посмотрите здесь: http://num-anal.srcc.msu.ru/lib_na/cat/ae/aeh1c.htm
|
|
|
|
|
Apr 4 2012, 11:20
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 4-03-12
Пользователь №: 70 608

|
Цитата(Xenia @ Apr 4 2012, 02:51)  Спасибо за ресурс, Дело все в том что у меня есть два варианта. Или прийти к конкретному математическому выражению или же использовать программу и прийти к численному результату. Для численного я обычно использую Матлаб.
|
|
|
|
|
Apr 4 2012, 13:19
|

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

|
Цитата(reginil_y @ Apr 4 2012, 15:20)  Спасибо за ресурс, Дело все в том что у меня есть два варианта. Или прийти к конкретному математическому выражению или же использовать программу и прийти к численному результату. Для численного я обычно использую Матлаб. Не думаю, что это такой уж хороший ресурс. Там хороши только описания, но не сами тексты программ. Лучше всего, на мой взгляд, старый добрый Eispack (это проект такой "древний" матричных функций на FORTRANе), а еще лучше алгоритмы этих функций на ALGOLе из Справочника Уилкинсона-Райнша, которые послужили прототипом для проекта Eispack. Первоисточник мне нравится больше, поскольку код на ALGOLе очень легко переписывается на C, чего нельзя сказать про FORTRAN. А автоматический перевод с FORTRANа на C при помощи ретранслятора f2c вызывает у меня слёзы  , т.к. напрочь убивает понимание алгоритма. Вас, я полагаю, вся эта кухня интересует много меньше, чем решение вашей конкретной задачи, поэтому я вам капать на мозги больше не стану  , а ограничусь исключительно практическим советом. Суть его с том, что комплексная эрмитова матрица после приведения ее к тридиагональной форме становиться действительной! Всегда! Т.е. и главная диагональ тридиагональной матрицы, и две ее симметричные соседки (нижняя и верхняя поддиагонали) не содержат мнимых членов. Доказательств этого удивительного явления не знаю, но знаю алгоритм (htridi), который это делает. На FORTRANе тут: http://www.netlib.org/eispack/htridi.fДурацкий автоматический перевод на C тут: http://www.koders.com/cpp/fidD3E4B58F2614D...6B45.aspx?s=desЭтот алгоритм запихивает обе найденные диагонали в вектора d и e, а на месте исходной матрицы строит базис матрицы поворота (она понадобится для получения собственных векторов). А дальше с комплексными числами можно распрощаться и вычислять собственные значения и вектора тридиагональной матрицы с учетом состовшегося поворота). Т.е. далее задача сводится к действительному случаю: http://www.netlib.org/eispack/tql2.f Кстати, на каком языке пишете вы? Ведь если вы используете MatLab, то тот бы решил вашу задачу в лоб одной командой. Я бы могла с вами поделиться и своим кодом для решения таких задач, только он вряд ли вам подойдет из-за того, что я храню комплексные матрицы в особом виде - не в виде массива комплексных структур, а в виде двух отдельных массивов для реальных и мнимых ее составляющих. А кроме того активно пользуюсь ассеблерными функциями для ускорений вычислений (главным образом, для вычисления скалярного произведения пары векторов и гивенсовских вращений матрицы), из-за чего код становится непереносимым и трудно понимаемым для тех, кто его не писал.
|
|
|
|
Сообщений в этой теме
reginil_y Эрмитовые Матрицы Apr 3 2012, 09:42       reginil_y Цитата(Xenia @ Apr 4 2012, 17:19) Кстати,... Apr 4 2012, 15:13 iiv Цитата(reginil_y @ Apr 3 2012, 15:42) Ест... Apr 14 2012, 20:35 reginil_y Цитата(iiv @ Apr 15 2012, 00:35) собствен... Apr 15 2012, 08:21  AndrewN QUOTE (reginil_y @ Apr 15 2012, 12:21) мн... Apr 18 2012, 21:27   reginil_y AndrewN , Спасибо (запоздалое) за отклик. Пожалуй ... Apr 29 2012, 11:02
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|