| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Частичное обращение матрицы |
| Автор: StranikS 1.2.2006, 20:23 |
| Я реализовал обращение матрицы методом Жордана-Гаусса. И сейчас я его использую для получения обратных матриц. Но я не всегда использую всю обращенную матрицу - очень часто мне нужно получить значение только одного элемента обр. матрицы, лежащего на главной диагонали. Можно ли модифицировать алгоритм, тем самым сократив лишние расчеты! |
| Автор: zogman2 2.2.2006, 15:55 |
| Насколько я понимаю, можно попробывать так: пусть этот элемент он последний по формуле Крамера тебе надо считать минор/определ - если у тебя уже есть метод Гаусса - значит ты можешь считать опредлитель - когда ты привел матрицу к верхне-диаг виду - то определетель это просто произв диаг элементов ну типа все - когда привел к верхне диаг виду - то последний элемент - он=1/(то что тебе нужно) то есть реально сократили только обратный ход в Гауссе - что конечно не супер много наверно не ясно? (может еще и не верно если что-то умное узнаешь напиши пожалуйста в форум мне тоже интересно |
| Автор: 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 необходимыми значениями, но обращаться теперь будет не вся матрица. Описание метода там не было "исключаются ненужные узлы при условии, что учтены все ветви, отходящие от таких узлов, т.е. что все ненулевые выражения строки матрицы Y находятся в левой, если считать от собственной проводимости, части строки"! Вот этого я непонимаю, ведь матрица Y - квадратная и симметричная (или зеркальная) относительно главной диагонали и следовательно если есть нулевые элементы, то они будут с обоих сторон диагонали?! |