Міністерство освіти і науки України
Факультет інформатики
Курсова робота
Тема:
“Використання елементарних перетворень
для знахожження оберненої матриці ”
Виконав студент ІІ-го курсу
Факультету інформатики
Заочної форми навчання
Науковий керівник:
Ужгород 2009
Зміст. 2
Вступ. 3
1. Теория. 4
2. Опис програми. 8
3. Програма. 10
Висновок. 45
Список використаної літератри. 46
Квадратна матриця називається виродженою (для особливої), якщо її визначник дорівнює нулю, і невиродженою (чи неособливої) - у протилежному випадку. Відповідно лінійне перетворення невідомих називається виродженим чи невиродженим у залежності від того, чи буде дорівнює чи нулю відмінний від нуля визначник з коефіцієнтів цього приобразования. З теореми випливає наступне твердження:
Добуток матриць, хоча б одна з яких вироджена, буде вродженою матрицею.
Добуток будь-яких невироджених матриць саме буде невирожденою матрицею. Звідси випливає, через зв'язок, що існує між множенням матриць і послідовним виконанням лінійних перетворень, таке твердження: результат послідовного виконання декількох лінійних перетворень тоді і тільки тоді буде невиродженим перетворенням, якщо всі задані перетворення невироджені.
Квадратна матриця називається виродженою (для особливої), якщо її визначник дорівнює нулю, і невиродженою (чи неособливої) - у протилежному випадку. Відповідно лінійне перетворення невідомих називається виродженим чи невиродженим у залежності від того, чи буде дорівнює чи нулю відмінний від нуля визначник з коефіцієнтів цього приобразования. З теореми випливає наступне твердження:
Добуток матриць, хоча б одна з яких вироджена, буде вродженою матрицею.
Добуток будь-яких невироджених матриць саме буде невирожденою матрицею. Звідси випливає, через зв'язок, що існує між множенням матриць і послідовним виконанням лінійних перетворень, таке твердження: результат послідовного виконання декількох лінійних перетворень тоді і тільки тоді буде невиродженим перетворенням, якщо всі задані перетворення невироджені.
Роль одиниці у множенні матриць грає одинична матриця
причому вона перестановочна з будь-якою матрицею А даним порядком
АЕ=ЕА=А (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...00 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) буду, через некоммутативности множення матриць, у загальному випадку різними.
Програма Matrtest. pas являється демо программою, котра показує роботу процедур з модуля Matr. pas.
Модуль програми Matr. pas – в ній розміщені процедури і функції, котрі роблять перетворення матриць.
У файлі – Time. dat записані коефіціенти матриці, розмірність матриці. Він мусить містити в собі початкову матрицю, і її розмірність, тому, що програма без цих даних працювати не буде.
Нижче приведений “скрин” програми, тобто вигляд програми в роботі.
{============================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; {®Ўа й Ґв бҐЎп ў®а®зҐл¬ (Ўлбвал¬) бЇ®б®Ў®¬}