Глава 6. Статические и динамические матрицы
i f ( r e s u l t ==0)
{ //Вывод массива решения.
cout<<" M a s s i v X "<f o r ( i =0; i cout<cout<}
e l s e i f ( r e s u l t ==
−1)
cout<<"Бесконечное множество решений\ n " ;
e l s e i f ( r e s u l t ==
−2)
cout<<"Нет решений\ n " ;
}
Задача 6.11.
Найти обратную матрицу к квадратной матрице A(N, N).
Один из методов вычисления обратной матрицы основан на решении систем
линейных алгебраических уравнений. Пусть задана некоторая матрица A:
A =
a
00
a
01
a
02
...
a
0n−1
a
10
a
11
a
12
...
a
1n−1
...
...
...
...
...
a
n−10
a
n−11
a
n−12
...
a
n−1n−1
(6.5)
Необходимо найти матрицу A
−1
, которая является обратной к матрице A:
Y = A
−1
=
y
00
y
01
y
02
...
y
0n−1
y
10
y
11
y
12
...
y
1n−1
...
...
...
...
...
y
n−10
y
n−11
y
n−12
...
y
n−1n−1
(6.6)
Матрица (6.6) будет обратной к матрице (6.5), если выполняется соотношение
A · A
−1
= E, где E — это единичная матрица, или более подробно:
a
00
a
01
...
a
0n−1
a
10
a
11
...
a
1n−1
...
...
...
...
a
n−10
a
n−11
...
a
n−1n−1
y
00
y
01
...
y
0n−1
y
10
y
11
...
y
1n−1
...
...
...
...
y
n−10
y
n−11
...
y
n−1n−1
= E
(6.7)
Результат перемножения матриц из соотношения (6.7) можно представить по-
элементно в виде n систем линейных уравнений. Умножение матрицы (6.5) на
нулевой столбец матрицы (6.6) даст нулевой столбец единичной матрицы:
a
00
y
00
+ a
01
y
10
+ ... + a
0n−1
y
n−10
= 1,
a
10
y
00
+ a
11
y
10
+ ... + a
1n−1
y
n−10
= 0,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a
i0
y
00
+ a
i1
y
10
+ ... + a
in−1
y
n−10
= 0,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a
n−10
y
00
+ a
n−11
y
10
+ ... + a
n−1n−1
y
n−10
= 0
.
При умножении матрицы A на первый столбец обратной матрицы получается
следующая система линейных алгебраических уравнений.
Программирование на языке С++ в среде Qt Creator
6.4. Решение некоторых задач линейной алгебры
209
a
00
y
01
+ a
01
y
11
+ ... + a
0n−1
y
n−11
= 0,
a
10
y
01
+ a
11
y
11
+ ... + a
1n−1
y
n−11
= 1,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a
i0
y
01
+ a
i1
y
11
+ ... + a
in−1
y
n−11
= 0,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a
n−10
y
01
+ a
n−11
y
11
+ ... + a
n−1n−1
y
n−11
= 0
Система, полученная в результате умножения матрицы (6.5) на i-й столбец мат-
рицы (6.6), будет выглядеть следующим образом:
a
00
y
0i
+ a
01
y
1i
+ ... + a
0n−1
y
n−1i
= 0,
a
10
y
0i
+ a
11
y
1i
+ ... + a
1n−1
y
n−1i
= 0,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a
i0
y
0i
+ a
i1
y
1i
+ ... + a
in−1
y
n−1i
= 1,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a
n−10
y
0i
+ a
n−11
y
1i
+ ... + a
n−1n−1
y
n−1i
= 0
Понятно, что n-я система будет иметь вид:
a
00
y
0n−1
+ a
01
y
1n−1
+ ... + a
0n−1
y
n−1n−1
= 0,
a
10
y
0n−1
+ a
11
y
1n−1
+ ... + a
1n−1
y
n−1n−1
= 0,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a
i0
y
0n−1
+ a
i1
y
1n−1
+ ... + a
in−1
y
n−1n−1
= 0,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a
n−10
y
0n−1
+ a
n−11
y
1n−1
+ ... + a
n−1n−1
y
n−1n−1
= 1
.
Решением каждой из приведённых выше систем будет i-й столбец обратной
матрицы. Количество систем равно размерности обратной матрицы. Для отыс-
кания решений систем линейных алгебраических уравнений можно воспользо-
ваться методом Гаусса.
Описанный алгоритм представлен в виде блок-схемы на рис. 6.15. Блоки 2–5
отражают формирование вектора правых частей системы линейных алгебраи-
ческих уравнений. Если условие в блоке 3 выполняется и элемент находится на
главной диагонали, то он равен единице, все остальные элементы нулевые. В
блоке 6 происходит вызов подпрограммы для решения системы уравнений ме-
тодом Гаусса. В качестве параметров в эту подпрограмму передаётся исходная
матрица A, сформированный в блоках 2–5 вектор свободных коэффициентов B,
размерность системы n. Вектор X будет решением i-й системы уравнений и,
следовательно, i-м столбцом искомой матрицы Y .
Как видно из блок-схемы, приведённой на рис. 6.15, при нахождении обратной
матрицы понадобится функция SLAU, рассмотренная при решении задачи 6.10.
Ниже приведён текст программы с подробными комментариями решения зада-
чи 6.11. В функции main() будет находиться ввод исходной матрицы, обращение
к функции INVERSE для вычисления обратной матрицы. Из функции INVERSE
будет осуществляться вызов функции SLAU для решения системы линейных ал-
гебраических уравнений.
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.
210
Do'stlaringiz bilan baham: |