Глава 6. Статические и динамические матрицы
a
00
x
0
+ a
01
x
1
+ a
20
x
2
+ ... + a
0n−1
x
n−1
= b
0
,
a
11
x
1
+ a
21
x
2
+ ... + a
1n−1
x
n−1
= b
1
,
a
22
x
2
+ ... + a
2n−1
x
n−1
= b
2
,
...
a
n−1n−1
x
n−1
= b
n−1
(6.4)
Решение системы (6.4) называют обратным ходом метода Гаусса.
Последнее (n − 1)-е уравнение системы (6.4) имеет вид: a
n−1n−1
x
n−1
= b
n−1
.
Тогда, если a
n−1n−1
6= 0, то x
n−1
=
b
n−1
a
n−1n−1
. В случае, если a
n−1n−1
= 0, и
b
n−1
= 0, то система (6.4), а следовательно, и система (6.1) имеют бесконечное
множество решений.
При a
n−1n−1
= 0 и b
n−1
6= 0 система (6.4), а значит и система (6.1), решения не
имеет. Предпоследнее (n −2)-е уравнение системы (6.4) имеет вид a
n−2n−2
x
n−2
+
a
n−2n−1
x
n−1
= b
n−2
.
Рис. 6.12: Блок-схема алгоритма пе-
рестановки строк расширенной мат-
рицы
Рис. 6.13: Блок-схема алгоритма об-
ратного хода метода Гаусса
Значит, x
n−2
=
b
n−2
−a
n−2n−1
x
n−1
a
n−2n−2
.
Следующее (n − 3)-е уравнение системы (6.4) будет выглядеть так:
a
n−3n−3
x
n−3
+ a
n−3n−2
x
n−2
+ a
n−3n−1
x
n−1
= b
n−3
.
Отсюда имеем
Программирование на языке С++ в среде Qt Creator
6.4. Решение некоторых задач линейной алгебры
205
x
n−3
=
b
n−3
−a
n−3n−2
x
n−2
−a
n−3n−1
x
n−1
a
n−3n−3
, x
n−3
=
b
n−3
−
n−1
P
j=n−2
a
n−3j
x
j
a
n−3n−3
.
Таким образом, формула для вычисления i-го значения x будет иметь вид:
x
i
=
b
i
−
n−1
P
j=i+1
a
ij
x
j
a
ii
.
Алгоритм, реализующий обратный ход метода Гаусса, представлен в виде
блок-схемы на рис. 6.13.
Объединив блок-схемы, изображённые на рис. 6.11, 6.12 и 6.13, получим об-
щую блок-схему метода Гаусса (рис. 6.14). Блоки 2-6 содержат последовательный
ввод данных, где n — это размерность системы линейных алгебраических урав-
нений, а сама система задаётся в виде матрицы коэффициентов при неизвестных
A и вектора свободных коэффициентов b. Блоки 7-18 предусматривают прямой
ход метода Гаусса, а блоки 23-27 — обратный. Для вывода результатов преду-
смотрено несколько блоков вывода. Если результат проверки условий 19 и 20
положительный, то выдаётся сообщение о том, что система имеет бесконечное
множество решений (блок 21). Если условие 19 выполняется, а 20 — нет, то по-
является сообщение о том, что система не имеет решений (блок 22). Сами же
решения системы уравнений, представленные вектором x, вычисляются (блоки
23–26) и выводятся экран/печать (блок 27) только в случае невыполнения усло-
вия.
Теперь алгоритм решения СЛАУ, представленный на рис. 6.14, разобьём на
главную функцию main() и функцию решения СЛАУ методом Гаусса. В функ-
ции main() будет находиться ввод исходных данных, обращение к функции SLAU
и вывод вектора решения. Функция SLAU предназначена для решения системы
линейных алгебраических уравнений методом Гаусса.
При написании функции следует учитывать следующее: в методе Гаусса из-
меняются матрица коэффициентов и вектор правых частей. Поэтому, для того
чтобы их не испортить, в функции SLAU матрицу коэффициентов и вектор пра-
вых частей необходимо скопировать во внутренние переменные, и в функции
обрабатывать внутренние переменные-копии.
Функция SLAU возвращает значение 0, если решение найдено, −1 — если систе-
ма имеет бесконечное множество решений, −2 — если система не имеет решений.
Ниже приведено решение задачи 6.10 с подробными комментариями.
#include
#include
206
Do'stlaringiz bilan baham: |