RemSettings(FM);
SpecialSort: =True;
SortLines: =False;
UniversalSort;
RestoreSettings(FM);
End;
Procedure RemSettings;
Begin
End;
Procedure MAtrix. MNotSquare;
Begin
Errors: =Errors+ [CMNotSquare] ;
AnyError
End;
Procedure Matrix. AddError;
Begin
Errors: =Errors+ [CAddError] ;
AnyError
End;
Procedure Matrix. ReversError;
Begin
Errors: =Errors+ [CReversError] ;
AnyError
End;
Procedure Matrix. MDegenerate;
Begin
Errors: =Errors+ [CMDegenerate] ;
AnyError
End;
Procedure Matrix. Stopped;
Begin
Errors: =Errors+ [CStopped] ;
AnyError
End;
Procedure Matrix. StepRevers;
Begin
End;
Procedure Matrix. RemSettings;
Begin
With FM do
Begin
mPlus: = Plus;
mDirection: = Direction;
mSortLines: = SortLines;
mBeginZeero: = BeginZeero;
mSpecialSort: = SpecialSort;
mGauss: = Gauss;
mDetForRev: = DetForRev;
End
End;
Procedure Matrix. RestoreSettings;
Begin
With FM do
Begin
Plus: = mPlus;
Direction: = mDirection;
SortLines: = mSortLines;
BeginZeero: = mBeginZeero;
SpecialSort: = mSpecialSort;
Gauss: = mGauss;
DetForRev: = mDetForRev;
End;
End;
{********************************Quick metods *****************************}
Function Matrix31. DetWithGauss;
Var i,j: Integer;
K: TOE;
P: TOE;
S: Matrix31;
si,sj: Integer;
Procedure SortLinesOfTheBar(B1: Integer);
Var i: Integer;
Max: TOE;
nMax: Integer;
Begin
Max: =Ar31(S. M^) [1,B1] ;
nMax: =1;
For i: =2 to S. Clines do
IF Abs(Max) <Abs(Ar31(S. M^) [i,B1])
Then
Begin
Max: =Ar31(S. M^) [i,B1] ;
nMAx: =i;
End;
IF S. Clines<>nMAx Then
Begin
S. SwapLines(S. Clines,nMAx);
Inc(S. Chek);
End;
End;
Procedure AddLines(l1,l2: Integer; K: TOE);
Var i: Integer;
Begin
For i: =1 to S. CBars do
Begin
Ar31(S. M^) [l2, i]: =Ar31(S. M^) [l2, i] -Ar31(S. M^) [l1, i] *K;
End;
End;
Procedure InitObject;
Var i,j: Integer;
Ver: TOE;
Begin
S. VMT;
S. DataInit(31,31);
Si: =0;
IF DetForRev
Then
Begin
si: =31;
sj: =31;
Ar31(S. M^): =Ar31(M^)
End
Else
For i: =1 to CLines do
IF not (i in Lin) Then
Begin
Inc(Si);
Sj: =0;
For j: =1 to CBars do
IF not (j in Bar) Then
Begin
Inc(sj);
Ar31(S. M^) [Si,Sj]: =Ar31(M^) [i,j] ;
End
End;
End;
Begin
IF Not Exist Then Begin NotExist; DGaussError; Exit; End;
IF (Errors<> [0]) Then Begin DGaussError; Exit; End;
IF CBars<>CLines Then Begin MNotSquare; DGaussError; Exit; End;
InitObject;
S. Clines: =si;
S. CBars: =sj;
IF S. CBars<>S. CLines Then Begin MNotSquare; DGaussError; Exit; End;
For i: =si downto 2 do
Begin
S. Clines: =i;
SortLinesOfTheBar(i);
S. Clines: =si;
IF Ar31(S. M^) [i, i] =0 Then Begin DetWithGauss: =0; Exit; End;
For j: =i-1 downto 1 do
IF Ar31(S. M^) [j, i] <>0 Then
Begin
K: =Ar31(S. M^) [j, i] /Ar31(S. M^) [i, i] ;
AddLines(i,j,K);
End;
End;
P: =1;
S. Clines: =si;
S. CBars: =sj;
For i: =1 to S. Clines do
P: =P*Ar31(S. M^) [i, i] ;
DetWithGauss: =P*S. Sign(S. Chek);
S. Del;
End;
Procedure Matrix31. SwapLines(L1,L2: Integer);
Var Prom: TOE;
i: Integer;
Begin
IF Not Exist Then BEgin NotExist; SwapError; Exit; End;
IF (Errors<> [0]) Then Begin SwapError; Exit; End;
For i: =1 to CBars do
Begin
Prom: =Ar31(M^) [L1, i] ;
Ar31(M^) [L1, i]: =Ar31(M^) [L2, i] ;
Ar31(M^) [L2, i]: =Prom
End;
End;
{-------------------------------------------------------------------------}
Function Matrix63. DetWithGauss;
Var i,j: Integer;
K: TOE;
P: TOE;
S: Matrix63;
si,sj: Integer;
Procedure SortLinesOfTheBar(B1: Integer);
Var i: Integer;
Max: TOE;
nMax: Integer;
Begin
Max: =Ar63(S. M^) [1,B1] ;
nMax: =1;
For i: =2 to S. Clines do
IF Abs(Max) <Abs(Ar63(S. M^) [i,B1])
Then
Begin
Max: =Ar63(S. M^) [i,B1] ;
nMAx: =i;
End;
IF S. Clines<>nMAx Then
Begin
S. SwapLines(S. Clines,nMAx);
Inc(S. Chek);
End;
End;
Procedure AddLines(l1,l2: Integer; K: TOE);
Var i: Integer;
Begin
For i: =1 to S. CBars do
Begin
Ar63(S. M^) [l2, i]: =Ar63(S. M^) [l2, i] -Ar63(S. M^) [l1, i] *K;
End;
End;
Procedure InitObject;
Var i,j: Integer;
Ver: TOE;
Begin
S. VMT;
S. DataInit(63,63);
Si: =0;
IF DetForRev
Then
Begin
si: =63;
sj: =63;
Ar63(S. M^): =Ar63(M^)
End
Else
For i: =1 to CLines do
IF not (i in Lin) Then
Begin
Inc(Si);
Sj: =0;
For j: =1 to CBars do
IF not (j in Bar) Then
Begin
Inc(sj);
Ar63(S. M^) [Si,Sj]: =Ar63(M^) [i,j] ;
End
End;
End;
Begin
IF Not Exist Then Begin NotExist; DGaussError; Exit; End;
IF (Errors<> [0]) Then Begin DGaussError; Exit; End;
IF CBars<>CLines Then Begin MNotSquare; DGaussError; Exit; End;
InitObject;
S. Clines: =si;
S. CBars: =sj;
IF S. CBars<>S. CLines Then Begin MNotSquare; DGaussError; Exit; End;
For i: =si downto 2 do
Begin
S. Clines: =i;
SortLinesOfTheBar(i);
S. Clines: =si;
IF Ar63(S. M^) [i, i] =0 Then Begin DetWithGauss: =0; Exit; End;
For j: =i-1 downto 1 do
IF Ar63(S. M^) [j, i] <>0 Then
Begin
K: =Ar63(S. M^) [j, i] /Ar63(S. M^) [i, i] ;
AddLines(i,j,K);
End;
End;
P: =1;
S. Clines: =si;
S. CBars: =sj;
For i: =1 to S. Clines do
P: =P*Ar63(S. M^) [i, i] ;
DetWithGauss: =P*S. Sign(S. Chek);
S. Del;
End;
Procedure Matrix63. SwapLines(L1,L2: Integer);
Var Prom: TOE;
i: Integer;
Begin
For i: =1 to CBars do
Begin
Prom: =Ar63(M^) [L1, i] ;
Ar63(M^) [L1, i]: =Ar63(M^) [L2, i] ;
Ar63(M^) [L2, i]: =Prom
End;
End;
END.
Контрольні приклади
Дана матриця:
3 - 1 0А= - 2 1 1
2 - 1 4
Відповідь:
1 0,8 - 0,2
А-1 = 2 2,4 - 0,6
0 0,2 0,2
Квадратна матриця називається виродженою (для особливої), якщо її визначник дорівнює нулю, і невиродженою (чи неособливої) - у протилежному випадку. Відповідно лінійне перетворення невідомих називається виродженим чи невиродженим у залежності від того, чи буде дорівнює чи нулю відмінний від нуля визначник з коефіцієнтів цього приобразования. З теореми випливає наступне твердження:
Добуток матриць, хоча б одна з яких вироджена, буде вродженою матрицею.
Добуток будь-яких невироджених матриць саме буде невирожденою матрицею. Звідси випливає, через зв'язок, що існує між множенням матриць і послідовним виконанням лінійних перетворень, таке твердження: результат послідовного виконання декількох лінійних перетворень тоді і тільки тоді буде невиродженим перетворенням, якщо всі задані перетворення невироджені.
1. А.Г. Курош «курс высшей алгебры», «наука», Москва 1975
2.С.Т. Завало, В.М. Костарчук, Б.И. Хацет «алгебра и теория чисел», Том 1,«высшая школа», Киев 1974
3. С.Т. Завало, В.М. Костарчук, Б.И. Хацет «алгебра и теория чисел», Том 2, «высшая школа», Киев 1976