Глава 6. Статические и динамические матрицы
}
f l o a t ∗minus_m ( f l o a t ∗A, f l o a t ∗B, i n t N, i n t M)
{ i n t i , j ;
f l o a t ∗temp ;
temp=new f l o a t [N∗M] ;
f o r ( i =0; i f o r ( j =0; j temp [ i ∗M+j ]=A[ i ∗M+j ]−B [ i ∗M+j ] ;
return temp ;
}
f l o a t ∗product_m ( f l o a t ∗A, f l o a t ∗B, i n t N, i n t M, i n t L)
{
i n t i , j , k ;
f l o a t ∗temp ;
temp=new f l o a t [N∗L ] ;
f o r ( i =0; i f o r ( j =0; j f o r ( temp [ i ∗L+j ]=k =0;ktemp [ i ∗L+j ]+=A[ i ∗M+k ] ∗B [ k∗L+j ] ;
return temp ;
}
f l o a t ∗ create_m ( i n t N, i n t M)
{
i n t i , j ;
f l o a t ∗temp ;
temp=new f l o a t [N∗M] ;
cout<<"Ввод матрицы\ n " ;
f o r ( i =0; i f o r ( j =0; j c i n >>temp [ i ∗M+j ] ;
return temp ;
}
void output_m ( f l o a t ∗A, i n t N, i n t M)
{
i n t i , j ;
f o r ( i =0; i f o r ( j =0; j cout<}
i n t main ( i n t argc , char ∗∗ a r g v )
{
f l o a t ∗A, ∗B, ∗C, ∗D, ∗ r e s u l t ;
i n t N,M;
cout<<" N = " ; c i n >>N;
cout<<" M = " ; c i n >>M;
A=create_m (N,M) ;
B=create_m (N,M) ;
C=create_m (M,N) ;
D=create_m (M,N) ;
r e s u l t=product_m ( product_m (sum_m(A, B, N,M) , minus_m (C, D,M,N) ,N,M,N) ,
product_m (sum_m(A, B, N,M) , minus_m (C, D,M,N) ,N,M,N) ,N, N,N) ;
output_m ( r e s u l t , N,N) ;
return 0 ;
}
Задача 6.10.
Решить систему линейных алгебраических уравнений.
При решении этой задачи напишем универсальную функцию решения систе-
мы линейных алгебраических уравнений методом Гаусса, а в функции main()
просто вызовем эту функцию. Вспомним метод Гаусса.
Пусть дана система линейных алгебраических уравнений (СЛАУ) с n неиз-
вестными
Программирование на языке С++ в среде Qt Creator
6.4. Решение некоторых задач линейной алгебры
201
a
00
x
0
+ a
01
x
1
+ ... + a
0n−1
x
n−1
= b
0
,
a
10
x
0
+ a
11
x
1
+ ... + a
1n−1
x
n−1
= b
1
,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a
n−10
x
0
+ a
n−11
x
1
+ ... + a
n−1n−1
x
n−1
= b
n−1
(6.1)
Обозначим через A =
a
00
a
01
...
a
0n−1
a
10
a
11
...
a
1n−1
...
...
...
...
a
n−10
a
n−11
...
a
n−1n−1
матрицу коэффициентов
системы (6.1), через b =
b
0
b
1
...
b
n−1
— столбец её свободных членов, и через x =
x
0
x
1
...
x
n−1
— столбец из неизвестных (искомый вектор). Тогда система (6.1) может
быть записана в виде матричного уравнения Ax = b.
Наиболее распространённым приёмом решения систем линейных уравнений
является алгоритм последовательного исключения неизвестных — метод Гаусса.
При решении систем линейных алгебраических уравнений этим методом все-
возможные преобразования производят не над уравнениями системы (6.1), а над
так называемой расширенной матрицей системы, которая получается путём до-
бавления к основной матрице A столбца свободных членов b.
Первый этап решения системы уравнений, называемый прямым ходом мето-
да Гаусса
, заключается в приведении расширенной матрицы (6.2) к треугольно-
му виду
. Это означает, что все элементы матрицы (6.2) ниже главной диагонали
должны быть равны нулю.
A
′
=
a
00
a
01
...
a
0n−1
b
0
a
10
a
11
...
a
1n−1
b
1
...
...
...
...
...
a
n−10
a
n−11
...
a
n−1n−1
b
n−1
(6.2)
На первом этапе необходимо обнулить элементы 0-го столбца расширенной
матрицы
A
′
=
a
00
a
01
a
02
...
a
0n−1
b
0
0
a
11
a
12
...
a
1n−1
b
1
0
0
a
22
...
a
2n−1
b
2
0
0
0
...
a
3n−1
b
3
...
...
...
...
...
...
0
0
0
...
a
n−1n−1
b
n−1
(6.3)
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.
202
Do'stlaringiz bilan baham: |