Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Частичное обращение матрицы |
Автор: 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 - квадратная и симметричная (или зеркальная) относительно главной диагонали и следовательно если есть нулевые элементы, то они будут с обоих сторон диагонали?! |