Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Використання елементарних перетворень для знаходження оберненої матриці

Тип Реферат
Предмет Математика
Просмотров
612
Размер файла
58 б
Поделиться

Ознакомительный фрагмент работы:

Використання елементарних перетворень для знаходження оберненої матриці

Міністерство освіти і науки України

Факультет інформатики

Курсова робота

Тема:

“Використання елементарних перетворень

для знахожження оберненої матриці ”

Виконав студент ІІ-го курсу

Факультету інформатики

Заочної форми навчання

Науковий керівник:

Ужгород 2009

Зміст

Зміст. 2

Вступ. 3

1. Теория. 4

2. Опис програми. 8

3. Програма. 10

Висновок. 45

Список використаної літератри. 46

Вступ

Квадратна матриця називається виродженою (для особливої), якщо її визначник дорівнює нулю, і невиродженою (чи неособливої) - у протилежному випадку. Відповідно лінійне перетворення невідомих називається виродженим чи невиродженим у залежності від того, чи буде дорівнює чи нулю відмінний від нуля визначник з коефіцієнтів цього приобразования. З теореми випливає наступне твердження:

Добуток матриць, хоча б одна з яких вироджена, буде вродженою матрицею.

Добуток будь-яких невироджених матриць саме буде невирожденою матрицею. Звідси випливає, через зв'язок, що існує між множенням матриць і послідовним виконанням лінійних перетворень, таке твердження: результат послідовного виконання декількох лінійних перетворень тоді і тільки тоді буде невиродженим перетворенням, якщо всі задані перетворення невироджені.

1. Теория

Квадратна матриця називається виродженою (для особливої), якщо її визначник дорівнює нулю, і невиродженою (чи неособливої) - у протилежному випадку. Відповідно лінійне перетворення невідомих називається виродженим чи невиродженим у залежності від того, чи буде дорівнює чи нулю відмінний від нуля визначник з коефіцієнтів цього приобразования. З теореми випливає наступне твердження:

Добуток матриць, хоча б одна з яких вироджена, буде вродженою матрицею.

Добуток будь-яких невироджених матриць саме буде невирожденою матрицею. Звідси випливає, через зв'язок, що існує між множенням матриць і послідовним виконанням лінійних перетворень, таке твердження: результат послідовного виконання декількох лінійних перетворень тоді і тільки тоді буде невиродженим перетворенням, якщо всі задані перетворення невироджені.

Роль одиниці у множенні матриць грає одинична матриця


причому вона перестановочна з будь-якою матрицею А даним порядком

АЕ=ЕА=А (1)

Доводяться ці чи рівності безпосереднім приминением правилаумножения матриць, чи ж на підставі зауваження, що еденичная матриця відповідає тотожному лінійний приобразованию невідомих

x1=y1

x2= y2

... ... ... .

xn= yn

Виконання якого до чи після будь-якого іншого лінійного переутворення, очевидно не змінює цього останнього.

Помітимо, що матриця Е є єдиною матрицею, що задовольняє умові (1) при будь-якій матриці А. Дійсно, якби існувала матриця Е' з цією же властивістю, то ми мали б

E’E=E’, E’E=E,

звідки E’=E.

Питання про існування для даної матирцы А зворотної матриці виявляється болеее складним. Через некомутативности множення матриць ми будемо говорити зараз про праву зворотну матрицю, тоесть про таку зворотну матрицю А-1

Що добуток матриці А праворуч на цю матрицю дає еденичную матрицю,

AA-1=E (2)

Якщо матриця А вырожденная, то, якби матриця А-1 існувала, добуток, що коштує в лівій частині рівності (2), було б, як ми знаємо, вырожденной матрицею, у той час як насправді матриця Е, що коштує в правій частині цієї рівності, є невырожденной, тому що його визначник дорівнює еденице. Таким чином, вырожденная матриця не може мати правої зворотної матриці. Такого ж розуміння показують, сто вона не має і лівої зворотний і тому для вырожденной матриці обратеая матриця воопше не існує.

Переходячи до випадку невырожденной матриці, уведемо спочатку наступне допоміжне поняття. Нехай дана матриця n-го порядку


a11 a12... a1n

a21 a22... a2n

А=... ... ... ... ... ... ... ... .

an1 an1... ann


Матриця


a11 a12... a1n

A*= a21 a22... a2n

... ... ... ... ... ... ... ... .

an1 an1... ann

Складання з алгебраїчних доповнень до елементів матриці А, причому алгебраїчне доповнення до елементу aіj коштує на перетинанні j-й рядка й і-го стовпця, називається приєднаної (чи взаємної) до матриці А.

Знайдемо добуток АА* і А*А. Використовуючи відому формулу розкладання визначника по чи рядку стовпцю, а також теорему про суму добутків елементів будь-якого рядка (стовпця) визначника на алгебраїчні доповнення до відповідних елементів іншого рядка (стовпця), і позначаючи через d визначник матриці А,

d=|A|,

ми одержимо наступні рівності:

d 0...0

0 d...0

АА*=А*А=... ... ... . . (3)

0 0... d

Звідси випливає, що якщо матриця А невырожденная, те її присоедененная матриця А* також буде невырожденной, причому визначник d* матриці А* дорівнює (n-1) - й ступеня визначника d матриці А.

Справді, переходячи від рівностей (3) до рівності між визначниками, ми одержимо

dd*= dn,

звідки d≠0

d*= dn-1

Тепер можна довести існування зворотної матриці для всякої не виродженої матриці А и знайти її вид. Помітимо спочатку, що якщо ми розглянемо добуток двох матриць АВ і всі елементи одногоиз множників, наприклад У, розділимо на те саме число d, те всі елементи добутку АВ також розділяться на це ж число: для доказу потрібно лише згадати визначення множення матриць. Таки мобразом, якщо

d=|A|≠0

те з рівностей (3) випливає, що зворотною матрицею для А буде служити матриця, що виходить із присоедененной матриці А* розподілом усіх її елементів на d:


Дійсно, з (3) випливають рівності

(4)

Ще раз підкреслимо, що в і-й рядку матриці А-1 коштують алгебраическиедополнения до елементів і-го стовпця визначника |А|, ділені на d=|A|.

Легко довести що матриця А-1 є єдиною матрицею, що задовольняє умові (4) для даної невырожденной матриці А. Дійсно, якщо матриця З така, що

АС=СА=Е

то

САА-1=С(АА-1) =СЕ=С

САА-1=(СА) А-1=ЕА=А-1

Звідки С=А-1.

З (4) і теореми про множення визначників випливає, що визначник матриці А-1 дорівнює, так що ця матриця так само

буде невиродженою. Зворотної для неї служить матриця А.

Якщо тепер дані квадратні матриці n-го порядку А и В, з яких А-невырожденная, а В - довільна, то ми можемо виконати правий і лівий розподіл У на А, тобто, вирішити матричні рівняння

AX=B, YA=B (5)

Для цього, через асоціативності множення матриць, досить покласти

X=A-1B, Y=BA-1,

причому ці рішення рівнянь (5) буду, через некоммутативности множення матриць, у загальному випадку різними.

2. Опис програми

Програма Matrtest. pas являється демо программою, котра показує роботу процедур з модуля Matr. pas.

Модуль програми Matr. pas – в ній розміщені процедури і функції, котрі роблять перетворення матриць.

У файлі – Time. dat записані коефіціенти матриці, розмірність матриці. Він мусить містити в собі початкову матрицю, і її розмірність, тому, що програма без цих даних працювати не буде.

Нижче приведений “скрин” програми, тобто вигляд програми в роботі.

3. Програма

{============================Matrtest. pas=========================}

Uses matr;

Var A,C: MAtrix;

Begin

A. VMT; C. VMT;

Writeln(' Коэффициеты уравнения ');

A. ReadOfText('time',' Коэффициеты уравнения ');

A. WriteToText('con',7,3);

Write('Enter'); Readln;

Writeln('Обращаем матрицу коэффициентов');

C. RevWithGauss(A);

C. WriteToText('con',7,3);

Write('Enter'); Readln;

End.

{============================ Matr. pas ==========================}

{$A+,B-,D-,E-,F+,G+, I-,L-,N+,O-,P-,Q-,R-,S-,T+,V+,X+}

{$M 24000,32,655360}

Unit Matr;

Interface

Const

CTooManySize=1;

CBadPosition=2;

CFileNotFound=3;

CFileError=4;

CReadError=5; {A}

CWriteError=6; {A}

COutOfData=7;

CBadOperands=8;

CMulError=9; {A}

CSearchError=10;

CNotExist=11;

CMNotSquare=12;

CAddError=13; {A}

CReversError=14; {A}

CMDegenerate=15;

CUnkNownError=16;

CMDgError=17; {A}

CMSqrError=18; {A}

CDetError=19; {A}

CSortError=20; {A}

CDGaussError=21; {A}

CCuanZeeroError=22; {A}

CSwapError=23; {A}

CMulToNumError=24; {A}

CStopped=25;

CDegrError=26; {A}

CIgError=27; {A}

CZFE=28;

Type

TOE=Extended;

Ar=Array [1. . (Word(Pred(0)) +1) div SizeOf(TOE)] of TOE;

Ar31=Array [1. .31,1. .31] of TOE;

Ar63=Array [1. .63,1. .63] of TOE;

Tabl=Object

CBars,CLines: Byte;

M: Pointer; {**}

SizeInMemory: Word; {**}

Errors: Set of Byte;

Exist: Boolean;

Constructor VMT;

Procedure DataInit(L,B: Byte); Virtual;

Procedure SetE(I,J: Byte; E: TOE);

Function GetE(I,J: Byte): TOE;

Procedure Del;

Procedure ReadOfText(Name: String; Search: String);

Procedure WriteToText(Name: String; F1,F2: Byte);

Procedure AllClear; Virtual; {}

Procedure Let(Var A); Virtual;

Procedure ZeeroFill;

{ Errors }

Procedure TooManySize; Virtual;

Procedure BadPosition; Virtual;

Procedure FileNotFound; Virtual;

Procedure FileError; Virtual;

Procedure ReadError; Virtual;

Procedure WriteError; Virtual;

Procedure OutOfData; Virtual;

Procedure SearchError; Virtual;

Procedure NotExist; Virtual;

Procedure UnkNownError; Virtual;

Procedure AnyError; Virtual;

Procedure ZFE; Virtual;

End;

Line=Set of Byte;

Mem=Record

mPlus: Boolean;

mDirection: Boolean;

mSortLines: Boolean;

mBeginZeero: Boolean;

mSpecialSort: Boolean;

mGauss: Boolean;

mDetForRev: Boolean;

End;

Matrix=Object(Tabl)

Lin,Bar: Line;

Plus: Boolean;

Direction: Boolean;

SortLines: Boolean;

BeginZeero: Boolean;

SpecialSort: Boolean;

Chek: Integer;

Gauss: Boolean;

DetForRev: Boolean; {ўбҐ Ї а ¬Ґвал - ў­гв७­ЁҐ}

{Mem}

Procedure AllClear; virtual;

Function SIgn(C: Word): TOE;

Procedure Revers(Var A: Matrix); {®Ўа й Ґв бҐЎп ¬Ґ¤«Ґ­­л¬ бЇ®б®Ў®¬}

Procedure RevWithGauss(Var A: Matrix); {®Ўа й Ґв ᥡ ­ ў®а®зҐ­­л¬ бЇ®б®Ў®¬}

Procedure InnerRevers(Var A: Matrix); Virtual;

Procedure ZeeroSortBars;

Procedure ZeeroSortLines;

Procedure UniversalSort;

Function DetWithGauss: TOE; Virtual; {®Ўа й Ґв бҐЎп ­ ў®а®зҐ­­л¬ (Ўлбвал¬) бЇ®б®Ў®¬}

Function CuanZeeroInLine(L1: Integer): Integer;

Procedure SwapLines(L1,L2: Integer); Virtual;

Procedure SwapBars(B1,B2: Integer);

Function CuanZeeroInBar(B1: Integer): Integer;

Procedure SpecialSortLines;

Procedure SpecialSortBars;

Procedure SelfClear; Virtual;

Procedure StepRevers; Virtual;

Procedure RemSettings(Var FM: Mem); Virtual;

Procedure RestoreSettings(Var FM: Mem); Virtual;

Procedure MSqr(Var A: Matrix); {ў®§ў®¤Ёв ўбҐ н«Ґ¬Ґ­вл ¬ ваЁжл ў Єў ¤а в}

Procedure MDg(Var A: Matrix);

{errors}

Procedure BadOperands; Virtual;

Procedure MulError; Virtual;

Procedure MNotSquare; Virtual;

Procedure AddError; Virtual;

Procedure ReversError; Virtual;

Procedure MDegenerate; Virtual;

Procedure MDgError; Virtual;

Procedure MSqrError; Virtual;

Procedure DetError; Virtual;

Procedure SortError; Virtual;

Procedure DGaussError; Virtual;

Procedure CuanZeeroError; Virtual;

Procedure SwapError; Virtual;

Procedure MulToNumError; Virtual;

Procedure Stopped; Virtual;

Procedure DegrError; Virtual;

Procedure IgError; Virtual;

End;

Matrix31=Object(Matrix)

Function DetWithGauss: TOE; Virtual;

Procedure SwapLines(L1,L2: Integer); Virtual;

End;

Matrix63=Object(Matrix)

Function DetWithGauss: TOE; Virtual;

Procedure SwapLines(L1,L2: Integer); Virtual;

End;

Implementation

{**************************************************************************}

Procedure TAbl. ZeeroFill;

Var i,j: Integer;

Begin

IF Not Exist Then Begin NotExist; ZFE; Exit; End;

IF (Errors<> [0]) Then Begin ZFE; Exit; End;

For i: =1 to CLines do

For j: =1 to CBars do

SetE(i,j,0);

End;

Procedure Tabl. Let(Var A);

Begin

End;

Procedure Tabl. AllClear;

Begin

CBars: =0;

CLines: =0;

SizeInMemory: =0;

Errors: = [0] ;

M: =Nil;

End;

Procedure Tabl. DataInit(L,B: Byte);

Begin

IF Exist Then Del;

AllClear;

IF 1.0*SizeOf(TOE) *L*B>(Word(Pred(0)) +1) *1.0 Then Begin TooManySize; Exit; End;

CBars: =B;

CLines: =L;

SizeInMemory: =SizeOf(TOE) *CBars*CLines;

If MaxAvail < SizeInMemory Then Begin TooManySize; Exit; End;

GetMem(M,SizeInMemory);

Exist: =True;

End;

Procedure Tabl. SetE(I,J: Byte; E: TOE);

Begin

IF Errors<> [0] Then Exit;

IF Not Exist Then Begin NotExist; Exit; End;

IF (I>CLines) or (J>CBars) or (I<1) or (J<1) Then Begin BadPosition; Exit; End;

Ar(M^) [((I-1) *CBars+J)]: =E;

End;

Function Tabl. GetE(I,J: Byte): TOE;

Begin

IF Errors<> [0] Then Exit;

IF Not Exist Then Begin NotExist; Exit; End;

IF (I>CLines) or (J>CBars) or (I<1) or (J<1)

Then

Begin

GetE: =0.0;

BadPosition;

End

Else

GetE: =Ar(M^) [((I-1) *CBars+J)] ;

End;

Procedure Tabl. Del;

Begin

IF Errors<> [0] Then Exit;

IF Not Exist Then Begin NotExist; Exit; End;

IF SizeInMemory<>0 Then FreeMem(M,SizeInMemory);

AllClear;

Exist: =False;

End;

Procedure Tabl. ReadOfText(Name: String; Search: String);

Var F: Text;

I,J: Byte;

Prom: TOE;

Help: Integer;

Function Searcher: Boolean;

Var Prom: String;

Begin

Repeat

Readln(F,Prom);

IF IOResult<>0 Then Begin ReadError; Close(F); Exit; End;

Until (EOF(F)) or (Pos(Search,Prom) <>0);

IF Pos(Search,Prom) =0

Then

Begin

SearchError;

Searcher: =False;

End

Else Searcher: =True;

End;

Begin

IF Exist Then Del;

Assign(F,Name);

{$I-}

Reset(F);

IF IOResult=2 Then Begin FileNotFound; ReadError; Exit; End;

IF IOResult<>0 Then Begin FileError; ReadError; Exit; End;

IF Not Searcher Then Exit;

Readln(F,CLines);

IF IOResult<>0 Then Begin AllClear; ReadError; Close(F); Exit; End;

Readln(F,CBars);

IF IOResult<>0 Then Begin AllClear; ReadError; Close(F); Exit; End;

DataInit(CLines,CBars);

IF Errors<> [0] Then Exit;

IF Not Exist Then Exit;

For I: =1 to CLines do

For J: =1 to CBars do

Begin

Read(F,Prom);

IF (EOF(F)) and (I<>CLines) And (I<>CBars) Then Begin Del; OutOfData; ReadError; Close(F); Exit; End;

IF IOResult<>0 Then Begin Del; ReadError; Close(F); Exit; End;

SetE(I,J,Prom);

End;

Close(F);

{$I+}

End;

Procedure Tabl. WriteToText(Name: String; F1,F2: Byte);

Var F: Text;

I,J: Byte;

Begin

IF Errors<> [0] Then Exit;

IF Not Exist Then Begin NotExist; WriteError; Exit; End;

Assign(F,Name);

{$I-}

ReWrite(F);

IF IOResult<>0 Then Begin FileError; WriteError; Exit; End;

For I: =1 to CLines do

Begin

For J: =1 to CBars do

Begin

Write(F,GetE(I,J): F1: F2,' ');

IF IOResult<>0 Then Begin Close(F); WriteError; Exit; End;

End;

Writeln(F)

End;

Close(F);

{$I+}

End;

Procedure Tabl. TooManySize;

Begin

Errors: =Errors+ [CTooManySize] ;

AnyError

End;

Procedure Tabl. BadPosition;

Begin

Errors: =Errors+ [CBadPosition] ;

AnyError

End;

Procedure Tabl. FileNotFound;

Begin

Errors: =Errors+ [CFileNotFound] ;

AnyError

End;

Procedure Tabl. FileError;

Begin

Errors: =Errors+ [CFileError] ;

AnyError

End;

Procedure Tabl. ReadError;

Begin

Errors: =Errors+ [CReadError] ;

AnyError

End;

Procedure Tabl. WriteError;

Begin

Errors: =Errors+ [CWriteError] ;

AnyError

End;

Procedure Tabl. OutOfData;

Begin

Errors: =Errors+ [COutOfData] ;

AnyError

End;

Procedure Tabl. SearchError;

Begin

Errors: =Errors+ [CSearchError] ;

AnyError

End;

Procedure Tabl. NotExist;

Begin

Errors: =Errors+ [CNotExist] ;

AnyError

End;

Procedure Tabl. ZFE;

Begin

Errors: =Errors+ [CZFE] ;

AnyError

End;

Procedure Tabl. UnkNownError;

Begin

Errors: =Errors+ [CUnkNownError] ;

AnyError

End;

Procedure Tabl. AnyError;

Begin

End;

Constructor TAbl. VMT;

Begin

Exist: =False;

End;

Procedure Matrix. MSqr;

Var i,j: Integer;

Begin

IF Not A. Exist Then Begin A. NotExist; BadOperands; MSqrError; Exit; End;

IF A. Errors<> [0] Then Begin MsqrError; Exit; End;

IF Self. Exist Then Del;

Self. DataInit(A. CLines,A. CBars);

For i: =1 to CLines do

For j: =1 to CBars do

SetE(i,j,Sqr(A. GetE(i,j)));

Self. SelfClear;

End;

Procedure Matrix. MDg;

Var i,j: Integer;

Begin

IF Not A. Exist Then Begin A. NotExist; BadOperands; MDgError; Exit; End;

IF A. Errors<> [0] Then Begin MDgError; Exit; End;

IF A. CLines<>A. CBars Then Begin MNotSquare; MDgError; Exit; End;

IF Exist Then Del;

DataInit(A. CLines,A. CBars);

For i: =1 to A. CLines do

For j: =1 to A. CBars do

IF i=j Then SetE(i,j,A. GetE(i,j))

Else SetE(i,j,0);

Self. SelfClear;

End;

Procedure Matrix. BadOperands;

Begin

Errors: =Errors+ [CBadOperands] ;

AnyError;

End;

Procedure Matrix. MulError;

Begin

Errors: =Errors+ [CMulError] ;

AnyError;

End;

Procedure Matrix. MDgError;

Begin

Errors: =Errors+ [CMDgError] ;

AnyError;

End;

Procedure Matrix. SortError;

Begin

Errors: =Errors+ [CSortError] ;

AnyError;

End;

Procedure Matrix. DetError;

Begin

Errors: =Errors+ [CDetError] ;

AnyError;

End;

Procedure Matrix. DGaussError;

Begin

Errors: =Errors+ [CDGaussError] ;

AnyError;

End;

Procedure Matrix. MSqrError;

Begin

Errors: =Errors+ [CMSqrError] ;

AnyError;

End;

Procedure MAtrix. CuanZeeroError;

Begin

Errors: =Errors+ [CCuanZeeroError] ;

AnyError;

End;

Procedure MAtrix. SwapError;

Begin

Errors: =Errors+ [CSwapError] ;

AnyError;

End;

Procedure Matrix. MulToNumError;

Begin

Errors: =Errors+ [CMulToNumError] ;

AnyError

End;

Procedure Matrix. DegrError;

Begin

Errors: =Errors+ [CDegrError] ;

AnyError

End;

Procedure Matrix. IgError;

Begin

Errors: =Errors+ [CIgError] ;

AnyError

End;

Procedure MAtrix. SelfClear;

Begin

Lin: = [0] ;

Bar: = [0] ;

Plus: =True;

Direction: =True;

SortLines: =True;

BeginZeero: =True;

SpecialSort: =False;

Chek: =0;

Gauss: =False;

DetForRev: =False;

End;

Procedure Matrix. AllClear;

Begin

inherited AllClear;

SelfClear;

End;

Procedure Matrix. Revers;

VAr FM: Mem;

Begin

Gauss: =False;

InnerRevers(A);

End;

Procedure Matrix. RevWithGauss;

Var FM: Mem;

Begin

Gauss: =True;

InnerRevers(A);

End;

Procedure Matrix. InnerRevers;

Var P,A1: Matrix;

D: TOE;

i,j: Integer;

Var Ver: TOE;

Var FM: Mem;

Begin

IF Not A. Exist Then Begin A. NotExist; BadOperands; ReversError; Exit; End;

IF (A. Errors<> [0]) Then Begin Exit; ReversError; End;

IF (A. CBars<>A. Clines) Then Begin BadOperands; ReversError; Exit; End;

P. VMT;

P. DataInit(A. CLines,A. CBars);

A1. VMT;

A1: =A;

IF A1. CLines=31 Then Begin Matrix31(A1). VMT; A1. Exist: =True; End;

IF A1. CLines=63 Then Begin Matrix63(A1). VMT; A1. Exist: =True; End;

IF Gauss Then D: =A1. DetWithGauss;

IF D=0 Then

Begin

MDegenerate;

ReversError;

Exit;

End;

DetForRev: =True;

For i: =1 to P. Clines do

Begin

A. StepRevers;

For j: =1 to P. CBars do

Begin

A1. Lin: =A1. Lin+ [i] ;

A1. Bar: =A1. Bar+ [j] ;

IF Gauss Then Ver: =A1. DetWithGauss;

IF (A1. Errors<> [0]) or (A. Errors<> [0]) Then Begin ReversError; Exit; End;

P. SetE(j, i,(Ver) *Sign(i+j) /D);

A1. Lin: =A1. Lin- [i] ;

A1. Bar: =A1. Bar- [j] ;

End;

End;

IF Self. Exist Then Self. del;

Self: =P;

Self. SelfClear;

End;

Procedure Matrix. SwapBars(B1,B2: 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 CLines do

Begin

Prom: =GetE(i,B1);

SetE(i,B1,GetE(i,B2));

SetE(i,B2,Prom)

End;

End;

Function Matrix. CuanZeeroInBar(B1: Integer): Integer;

Var i: Integer;

Sum: Integer;

Begin

IF Not Exist Then Begin NotExist; CuanZeeroError; Exit; End;

IF (Errors<> [0]) Then Begin CuanZeeroError; Exit; End;

Sum: =0;

IF Not SpecialSort

Then

For i: =1 to CLines do IF GetE(i,B1) =0 Then Inc(Sum) else

Else

IF BeginZeero

Then

Begin

Sum: =1;

While (GetE(Sum,B1) =0) and (Sum<=CLines) do inc(Sum);

Dec(Sum);

End

Else

Begin

Sum: =CLines;

While (GetE(Sum,B1) =0) and (Sum>0) do Dec(Sum);

Sum: =Clines-Sum;

End;

CuanZeeroinBar: =Sum;

End;

Procedure Matrix. ZeeroSortBars;

Var i,j: Integer;

Max,NMax,CZ: Integer;

FM: Mem;

Begin

IF Not Exist Then Begin NotExist; Exit; End;

IF (Errors<> [0]) Then Exit;

RemSettings(FM);

SortLines: =False;

SpecialSort: =False;

UniversalSort;

RestoreSettings(FM);

End;

Function Matrix. CuanZeeroinLine(L1: Integer): Integer;

Var i: Integer;

Sum: Integer;

Begin

IF Not Exist Then Begin NotExist; CuanZeeroError; Exit; End;

IF (Errors<> [0]) Then Begin CuanZeeroError; Exit; End;

Sum: =0;

IF Not SpecialSort

Then

For i: =1 to CBars do IF GetE(L1, i) =0 Then Inc(Sum) else

Else

IF BeginZeero

Then

Begin

Sum: =1;

While (GetE(L1,Sum) =0) and (Sum<=CBars) do inc(Sum);

Dec(Sum);

End

Else

Begin

Sum: =CBars;

While (GetE(L1,Sum) =0) and (Sum>0) do Dec(Sum);

Sum: =CBars-Sum;

End;

CuanZeeroinLine: =Sum;

End;

Procedure Matrix. 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: =GetE(L1, i);

SetE(L1, i,GetE(L2, i));

SetE(L2, i,Prom)

End;

End;

Procedure Matrix. ZeeroSortLines;

VAr FM: Mem;

Begin

IF Not Exist Then Begin NotExist; Exit; End;

IF (Errors<> [0]) Then Exit;

RemSettings(FM);

SortLines: =True;

SpecialSort: =False;

UniversalSort;

RestoreSettings(FM);

End;

Procedure Matrix. UniversalSort;

Var i,j: Integer;

Max,NMax,CZ: Integer;

Cuan: Integer;

Begin

IF Not Exist Then Begin NotExist; SortError; Exit; End;

IF (Errors<> [0]) Then Begin SortError; Exit; End;

IF SortLines Then Cuan: =CLines

Else Cuan: =CBars;

For i: =1 to Cuan do

Begin

IF SortLines Then Max: =CuanZeeroInLine(i)

Else Max: =CuanZeeroInBar(i);

Nmax: =i;

For j: =i to Cuan do

Begin

IF SortLines Then CZ: =CuanZeeroInLine(j)

Else CZ: =CuanZeeroInBar(j);

IF (CZ<Max) xor Direction

Then

Begin

Max: =CZ;

NMax: =j;

End;

End;

IF i<>NMax Then

Begin

IF SortLInes Then SwapLines(i,NMax)

Else SwapBars(i,NMax);

Inc(Chek);

End;

End;

End;

Function Matrix. DetWithGauss: TOE;

Var i,j: Integer;

K: TOE;

P: TOE;

S: Matrix;

Si,Sj: Integer;

Procedure SortLinesOfTheBar(B1: Integer);

Var i: Integer;

Max: TOE;

nMax: Integer;

Begin

Max: =S. GetE(1,B1);

nMax: =1;

For i: =2 to S. Clines do

IF Abs(Max) <Abs(S. GetE(i,B1))

Then

Begin

Max: =S. GetE(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

S. SetE(l2, i,(S. GetE(l2, i) - S. GetE(l1, i) *K));

End;

Procedure InitObject;

Var i,j: Integer;

Ver: TOE;

Begin

Si: =0;

Sj: =0;

For i: =1 to CLines do IF not (i in Lin) Then Inc(Si);

For j: =1 to CBars do IF not (j in Bar) Then Inc(sj);

S. VMT;

S. DataInit(Si,Sj);

Si: =0;

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);

Ver: =GetE(i,j);

S. SetE(Si,Sj,Ver);

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;

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 S. GetE(i, i) =0 Then Begin DetWithGauss: =0; Exit; End;

For j: =i-1 downto 1 do

IF S. GetE(j, i) <>0 Then

Begin

K: =S. GetE(j, i) /S. GetE(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*S. GetE(i, i);

DetWithGauss: =P*S. Sign(S. Chek);

S. Del;

End;

Function Matrix. Sign;

Begin

IF (C div 2) *2=C Then Sign: =1.0 Else Sign: =-1.0;

End;

Procedure Matrix. SpecialSortLines;

VAr FM: Mem;

Begin

IF Not Exist Then Begin NotExist; Exit; End;

IF (Errors<> [0]) Then Exit;

RemSettings(FM);

SpecialSort: =True;

SortLines: =True;

UniversalSort;

RestoreSettings(FM);

End;

Procedure Matrix. SpecialSortBars;

VAr FM: Mem;

Begin

IF Not Exist Then Begin NotExist; Exit; End;

IF (Errors<> [0]) Then Exit;

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


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
148428
рейтинг
icon
3134
работ сдано
icon
1355
отзывов
avatar
Математика
Физика
История
icon
142444
рейтинг
icon
5882
работ сдано
icon
2654
отзывов
avatar
Химия
Экономика
Биология
icon
95919
рейтинг
icon
2036
работ сдано
icon
1275
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
55 191 оценка star star star star star
среднее 4.9 из 5
ИРНИТУ
Отличный исполнитель, сразу пошла навстречу в выполнении работы по раньше. На просьбы реаг...
star star star star star
Кубгу
Все отлично, обращаюсь не первый раз. Все работы выполнены очень качественно, внимательно ...
star star star star star
РТУ МИРЭА
Работа выполнена в наилучшем виде и очень оперативно. Огромное спасибо!
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Генеалогия

Другое, Генеалогия

Срок сдачи к 6 нояб.

только что

Переделать работу

Курсовая, Строительство

Срок сдачи к 4 нояб.

только что

Сделать презентацию на тему Виды расчетов предприятий.

Другое, Экономика и управление предприятием

Срок сдачи к 31 окт.

1 минуту назад

кароче надо отсосать всю сперму у отчима

Онлайн-репетитор, членососание

Срок сдачи к 2 нояб.

1 минуту назад

Система единиц величин. Единицы величин системы «СИ»

Контрольная, метрология

Срок сдачи к 3 нояб.

1 минуту назад

Учет основных средств вариант 11 26 января 20?г

Решение задач, Бухгалтерский учет

Срок сдачи к 31 окт.

1 минуту назад

Политика кондефециальности защиты информации в управлении документацией

Реферат, Документационное обеспечение управления

Срок сдачи к 3 нояб.

2 минуты назад

В единстве народа -сила России

Сочинение, На конкурс

Срок сдачи к 3 нояб.

2 минуты назад

Решить 5 задач по вероятности и статистике

Решение задач, Вероятность и статистика

Срок сдачи к 30 окт.

3 минуты назад

Конспект урока

Другое, Педагогика

Срок сдачи к 30 окт.

3 минуты назад

Тезисы по теме исследования

Статья, Креативная деятельность и социокультурное проектирование в образовании

Срок сдачи к 2 нояб.

3 минуты назад

Нужен иск

Другое, Документационное обеспечение

Срок сдачи к 31 окт.

4 минуты назад
4 минуты назад

Диплом по предмету «Педагогическое образование»

Диплом, Педагогическое образование

Срок сдачи к 13 дек.

4 минуты назад
4 минуты назад
4 минуты назад

Две презентации на любые темы из списка

Презентация, Основы безопасности и защиты родины

Срок сдачи к 31 окт.

4 минуты назад

2 задания

Эссе, Управление профессиональным развитием персонала

Срок сдачи к 1 нояб.

5 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно