Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Центр помощи > [C++] Нахождение обратной матрицы |
Автор: Court 26.11.2006, 14:40 |
Найти обратную матрицу методом Гаусса-Жордан , желательно попроще, размеры матрицы вводятся с клавы ![]() |
Автор: Kuvaldis 26.11.2006, 15:12 | ||
Court,
|
Автор: Court 26.11.2006, 15:49 |
нужно на С++, сорри забыл указать... ![]() |
Автор: sentinel 17.3.2010, 04:11 | ||||
Буквально сегодня дописала программу, реализующую решение системы линейных алгебраических уравнений методом Гаусса (в моем случае - метод без обратного хода), которая также находит и обратную матрицу для матрицы коэффициентов А (при задании системы в форме A*x=b) методом Гаусса-Жордана. Я писала отдельный класс, поэтому выложу только часть метод приведения расширенной матрицы (A|E) (Е - тождественная матрица) к диагональному виду и часть кода самого метода Гаусса, которая завершает вычисление обратной матрицы. Это - большая часть процедуры приведения расширенной матрицы к диагональному виду, я работала параллельно с матрицами-элементами A и A_, вторая из которых до первой итерации приведения была тождественной, а после последней - стала обратной:
dim - размерность системы, задается извне. После вышеприведенных манипуляций остается только пронормировать построчно матрицу А - и вуаля!
В итоге получаем А=Е и А_ - обратную к первоначальной матрице А. |
Автор: AXE7 12.10.2010, 00:54 | ||||
Неплохой код, но в нём присутствуют логические ошибки. 1)(пометил восклицательными знаками) При выборе ведущего элемента просматриваются значения из строки, а нужно из столбца
2)(необходимо обеспечить остановку программы при нулевом столбце, так как обратной матрицы при его наличии не существует. 1) решается так: if ( fabs(A[j][i])>fabs(leader) ){ //!!!! leader=A[j][i]; //!!!! 2) пусть каждый решает в зависимости от того, как он использует нахождение обратной матрицы. (я решил воспользоваться генерацией исключения). |
Автор: sentinel 12.10.2010, 19:48 |
AXE7, спасибо, сама на днях пересматривала и исправила, а здесь поленилась =) насчет пункта 2) - у меня в конце процедуры диагонализации стояла проверка определителя на равенство нулю, тут ее я решила не приводить (ну, вроде как если человек знает про условия существования обратной матрицы, то должен сам догадаться =) ) |