Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Частичное обращение матрицы


Автор: StranikS 1.2.2006, 20:23
Я реализовал обращение матрицы методом Жордана-Гаусса. И сейчас я его использую для получения обратных матриц. Но я не всегда использую всю обращенную матрицу - очень часто мне нужно получить значение только одного элемента обр. матрицы, лежащего на главной диагонали.

Можно ли модифицировать алгоритм, тем самым сократив лишние расчеты!

Автор: zogman2 2.2.2006, 15:55
Насколько я понимаю, можно попробывать так:
пусть этот элемент он последний
по формуле Крамера тебе надо считать минор/определ
- если у тебя уже есть метод Гаусса - значит ты можешь считать опредлитель -
когда ты привел матрицу к верхне-диаг виду - то определетель это просто произв диаг элементов

ну типа все - когда привел к верхне диаг виду - то последний элемент - он=1/(то что тебе нужно)

то есть реально сократили только обратный ход в Гауссе - что конечно не супер много

наверно не ясно?
(может еще и не верно smile
если что-то умное узнаешь напиши пожалуйста в форум
мне тоже интересно


Автор: StranikS 2.2.2006, 17:36
Я прекрасно понял, то что ты хотел сказать, но это неподходит, т.к:
1. Мой элемент размещен на диагонали случайно и почти не бывает последним;
2. Вся модификация в твоем примере будет сводиться к установке точки выхода из Ж-Г при расчете требуемого элемента, ведь если мой элемент является первым, то обращение будет проведено полностью, что совсем не то, что мне хотелась!

Дело в том, что данную проблему я решаю применительно к расчету сопротивлений электрической схемы:
диагональная матрица сопротивлений ветвей - Z;
матрица содинений схемы замещения - М;
матрица узловых проводимостей - Yu=M*1/Z*MT;
! матрица узловых сопротивлений - Zu=Revers(Yu);//азъ есим - обращение матрицы

Но мне нужно посчитать собственное сопротивление только одного узла, т.е. Zu[x,x].
Сначала я думал, что Zu[i,i]=1/Yu[i,i], но это утверждение работало для некоторых матриц, а для некоторых нет.

Из твоих слов я понял, что это справедливо только для последнего элемента в треугольной матрице, получаемой при прямом ходе в методе Гаусса. Тогда может необходимо делать какие-нибудь перестановки перед этим, что бы мой элемент оказывался в конце, например в самой матрице соединений М. А вот этого лучше не делать!
Поэтому я и ищу модификацию именного самого алгоритма обращения.

Автор: zogman2 2.2.2006, 19:05
Да точно про перестановкуу надо еще подумать...

А у тебя матрица не какого-нибудь спец вида ?


Автор: StranikS 2.2.2006, 21:24
Матрица обычная - квадратная десингулированная (т.е. неособенная)

Автор: StranikS 3.2.2006, 00:32
Я, тут, поэксперементировал со своим МЖГ и заметил, что окончательные значения диагональных элементов формируются только на последней итерации, а следовательно никакие модификации не позволят получить значение выбранного диагонально элемента за меньшее число итераций.

Возможно мое утверждение справедливо только для метода Жордана-Гаусса, но тот вид его реализации, которым я пользуюсь наиболее быстрый.

Вероятно, нужно идти по пути удаления заведомо ненужных узлов. Я прочитал в С.Бернас и З.Цек "Мат. модели элементов ЭЭС", что есть методика "исключения" ненужных узлов в матрице Yu таким образом, что при обращении можно получить Zu c необходимыми значениями, но обращаться теперь будет не вся матрица. Описание метода там не было smile , но отдельно было добавлено, что

"исключаются ненужные узлы при условии, что учтены все ветви, отходящие от таких узлов, т.е. что все ненулевые выражения строки матрицы Y находятся в левой, если считать от собственной проводимости, части строки"!

Вот этого я непонимаю, ведь матрица Y - квадратная и симметричная (или зеркальная) относительно главной диагонали и следовательно если есть нулевые элементы, то они будут с обоих сторон диагонали?!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)