
Отчет по учебной практике
.docМинистерство образования Российской Федерации
Удмуртский государственный университет
Математический факультет
Кафедра математического анализа
ОТЧЕТ ПО УЧЕБНОЙ ПРАКТИКЕ
Тема работы:
" Обращение матриц и вычисление определителя по схеме Гаусса "
Научный руководитель:
Исполнитель: студент группы 11–23, Захарова Валентина Михайловна
Ижевск 2007
Введение
Современная вычислительная техника требует от инженеров и техников знаний основ вычислительной математики и применения этих знаний к решению различных практических задач.
Вычислительная математика являлась и является одной из основных дисциплин, необходимых для подготовки специалистов, работающих в различных областях.
Кому как не нам, прикладным математикам, заниматься решением этих задач!
В данном отчёте представлена работа по решению задач, связанных с обращением матриц и вычислением определителя по схеме Гаусса.
Сама задача состоит в том, чтобы найти обратную матрицу и найти её определитель.
Задание
Каждый студент сам выбрал себе задание. Меня привлекает работа с матрицами, я иду на кафедру алгебры, поэтому я взяла задание из темы "Алгебра матриц.Обращение матрицы и вычисление определителя по схеме Гаусса".
Задание № 16.
Обращение матрицы и вычисление определителя по схеме Гаусса.
Обратить матрицу
и вычислить её определитель по схеме
Гаусса с точностью до
Подпись
руководителя практики:
Для решения данной задачи я определила для себя следующие этапы:
-
Общие способы нахождения обратной матрицы. Их описания.
-
Описание метода Гаусса для нахождения определителя.
-
Выбор метода для нахождения обратной матрицы.
-
Алгоритм решения общей задачи.
-
Программа на языке Pascal для общего случая (по алгоритму).
-
Правильность программы на примерах.
-
Результаты (5. для данной задачи).
-
Преимущества программы, написанной на Pascal, над решением "вручную".
Способы нахождения обратной матрицы{1}
Определение.
Пусть матрица А.
Матрица
называется
обратной
к матрице А, если выполнено соотношение:
А*=
*А=Е,
где Е=
– единичная матрица,
–
множество квадратных матриц ( размерами
n на n
) над полем К.
Обратные матрицы позволяют решать матричные уравнения вида:
,
A,B.
Если detA0,
то
.
-
Обратная матрица
для данной неособенной матрицы находится по формуле
=
,
где detA – определитель
матрицы А;
–
алгебраические дополнения соответствующих
элементов матрицы А.
-
Формулы для обращения клеточной матрицы
S=.
Обратная матрица ищется в виде клеточной матрицы
.
а) Если легко
определяется матрица
, то
–
,
,
–
,
.
б) Если легко
определяется матрица
, то
,
,
–
,
.
3. Обращение матриц методом окаймления. Пусть
,
где
–
столбец,
–
строка,
–
число. Обратная матрица
ищется в виде
,
где
;
;
;
.
4. Обращение матрицы с помощью разбиения её на произведение двух треугольных матриц. Пусть
,
где
;
.
Обратная матрица
ищется в виде
.
5. Для
нахождения обратной матрицы к А составляем
расширенную матрицу (
),
и, преобразованием только строк, получаем
из (АЕ)
расширенную матрицу (
)
( для работы со столбцами надо рассмотреть
).
Определитель{2}
Определение.
Определителем
матрицы А=()
,
K–
поле, называется число, которое вычисляется
по правилу:
detA=A==
,
где
и
число инверсий индексов строк и столбцов
соответственно.
Есть много способов нахождения определителей. Мы рассмотрим лишь один из них.
Метод Гаусса заключается в том, что мы приводим определитель к треугольному виду, а затем перемножаем элементы, стоящие на главной диагонали.
Пусть дана матрица
.
={
для
}=
=={
для
}=
=
=…=
=
.
Этот метод реализован в процедуре Opredelitel_Obratn_Matrix программы "Обратная матрица и её определитель ". Несмотря на то, что процедура носит название как "Определитель обратной матрицы" её можно использовать для произвольной матрицы.
Выбор метода. Алгоритм.{3,4}
Я выбрала пятый метод, так как я с ним уже знакома.
Рассмотрим его более подробно.
;
;
(
преобразования строк)
=(E
),
где
;
(A
)
и (
)
.
Поле К в нашем случае– поле вещественных чисел().
Как преобразовать строки?
Умножим первую
строку на
(
0
). Заметим, что первый элемент первой
сроки стал равен единице. С помощью этой
еденицы "обнуляем" первый столбец,
начиная со второй строки (
для
).
Для этого первую строку умножаем на
элемент
(
)
и вычитаем из соответствующей i–ой
строки.
(
)
=
==(*)
{ где
для
}
Умножим вторую
строку на
(
0
). Заметим, что второй элемент второй
строки стал равен единице. Теперь с
помощью этой еденицы "обнуляем"
второй столбец, начиная с третьей строки
.Для этого вторую строку умножаем на
элемент
(
)
и вычитаем её из соответствующей i–ой
строки.
Далее аналогично проделываем это еще (n–3) раза. В (n–2)–ой раз остаётся лишь поделить "n"–ую строку на "nn"–ый элемент.В результате получаем матрицу вида:
(*)=(SB)
Мы действовали "сверху–вниз".
Аналогично действуем "снизу–вверх". Отличие в том, что теперь не надо умножать строки на элементы, так как единицы уже получены и стоят они на главной диагонали матрицы S.
В итоге должны получить матрицу вида:
(SB)=(
).
В процедуре Obratn_matrix программы "Обратная матрица и её определитель ", написанная на языке Pascal, реализовывается именно этот способ нахождения обратной матрицы.
Программа "Обратная матрица и её определитель "{5}
PROGRAM OBR_MATRIX_EE_OPREDELITEL;
Uses Crt;
Const n=4; {Размер матрицы}
Type Matrix=array[1..n] of array[1..n] of extended;
RashMatrix=array[1..n] of array[1..2*n] of extended;
{чтобы активизировать тип extended: options->compiler->8087/80287(поставить X)}
VAR i,j,k,kk:word; { вспомогательные величины}
A,E,OB:Matrix; {величины для обозначения данной матрицы, еденичной и обратной соответственно}
AE:RashMatrix; { величина для обозначения расширенной матрицы }
Del,Opredelitel: extended; {вспомогательная величина,величина для обозначения определителя }
PROCEDURE Print_matrix( var A: Matrix ); {Вывод матрицы на экран}
begin
For i:=1 to n do
begin
For j:=1 to n do
If A[i,j]>=0 then
write(' ',(Trunc(A[i,j])+round(frac(A[i,j])*10000)*0.0001):4:4, ' ' )
else
write((Trunc(A[i,j])+round(frac(A[i,j])*10000)*0.0001):4:4, ' ' );
writeln;
end;
end;
PROCEDURE Opredelitel_Obratn_Matrix(OB: Matrix;Opredelitel:extended); {Определитель обратной матрицы}
Begin
Opredelitel:=OB[1,1];
k:=1;
While k<=n-1 do
Begin
Del:=OB[k,k];
For j:=k to n do OB[k,j]:=OB[k,j]/Del;
For i:=k to n do Begin
For j:=1 to n do OB[i,j]:=OB[i,j]-OB[k,j]*OB[i,k];
End;
Opredelitel:=Opredelitel*OB[k+1,k+1];
k:=k+1;
End;
write('определитель обратной матрицы равен ', (Trunc(Opredelitel)+round(frac(Opredelitel)*10000)*0.0001):4:4)
End;
PROCEDURE Obratn_matrix(A,E,OB: Matrix;AE:RashMatrix);
{Обратная матрица, вывод её на экран, вывод на экран её определителя}
Begin
{Составляем еденичную матрицу}
For i:=1 to n do
For j:=1 to n do
If j=i then E[i,j]:=1
else E[i,j]:=0;
{Составляем расширенную матрицу}
For i:=1 to n do
For j:=1 to 2*n do
If j<=n then AE[i,j]:=A[i,j]
else AE[i,j]:=E[i,j-n];
{Преобразования расширенной матрицы}
k:=1;
While k<=n do
Begin
Del:=AE[k,k];
For j:=k to 2*n do AE[k,j]:= AE[k,j]/Del;
For i:=k+1 to n do
For j:=1 to 2*n do AE[i,j]:=AE[i,j]-AE[k,j]*A[i,k];
k:=k+1;
End;
kk:=n;
While kk>0 do
Begin
For i:=kk downto 1 do
For j:=1 to 2*n do
AE[i,j]:=AE[i,j]-AE[kk,j]*AE[i,kk];
kk:=kk-1;
end;
For i:=1 to n do
For j:=1 to n do
OB[i,j]:=AE[i,j+n];
writeln;
Print_Matrix(OB);{Для вывода обратной матрицы}
Opredelitel_Obratn_Matrix(OB,Opredelitel)
End;
{тело программы}
BEGIN
ClrScr;
For i:=1 to n do
For j:=1 to n do
begin
writeln ('введите элемент',i,'-ой строки ', j,'-го столбца' );
readln (A[i,j]);
end;
writeln (' данная матрица ');
print_matrix(A);
writeln;
write('обратная матрица');
Obratn_matrix(A,E,OB,AE);
END.
Примечание 1. В программе для вывода на экран матрицы и определителя используются функции Trunc, round, frac. Функция Trunc отсекает дробную часть вещественного числа, оставляя длинное целое. Round преобразует вещественное значение в ближайшее к нему значение типа LongInt. Frac– дробная часть вещественного числа, так же имеющие вещественный тип.
Примечание 2. В данной программе не рассматриваются случаи, когда необходимо поменять местами строки ( например, первый элемент матрицы равен нулю ). Но это можно осуществить следующим образом: ввести переменные ind:word и Ctroka: array[1..2*n] of extended (ind–вспомогательный элемент, Ctroka– для обозначения строки, которую будем менять с той строкой, у которой на главной диагонали первой "полуматрицы" расширенной матрицы стоит 0) ; в процедуре Obratn_matrix перед преобразованием расширенной матрицы вставить (не забыв провести соответствующего наращивания индекса ind :
If AE[ind,k]=0 then
Begin
ind:=ind+1;
For j:=1 to 2*n do
Ctroka[j]:=Ae[ind,j];
For j:=1 to 2*n do
AE[ind,j]:=AE[k,j];
For j:=1 to 2*n do
AE[k,j]:=Ctroka[j];
End;
Простейшие примеры для отладки и тестирования программы{6}
Пример 1.В программе в разделе констант n приравниваем двум и запускаем прграмму ( Ctrl+F9).
На запрос
программы вводим элементы матрицы
.
После нажатия Alt+F5 мы увидим на экране:
Пример 2. В программе в разделе констант n приравниваем трём и запускаем прграмму ( Ctrl+F9).
На запрос
программы вводим элементы матрицы
.
После нажатия Alt+F5 мы увидим на экране:
Легко проверить, что обратные матрицы действительно являются обратными к данным (по определению). Да и определители можно посчитать вручную.
Выполнение задачи №16 в Тurbo Pascal. {7}
Запускаем программу"Обратная матрица и её определитель " (Сtrl+F9); вводим с клавиатуры элементы матрицы (на соответствующий запрос программы).
–
данная матрица
(“matrix” на экране);
Программа работает считанные доли секунды. Вообщем, очень быстро ( в отличие от метода вручную или с помощью калькулятора).
Нажав сочетание клавиш Alt+F5 получаем:
Таким образом,
обратная матрица
,
а её определитель det
=1,5456.
Заметим, что обратная матрица выводится
на экран
так же с точностью
,
как и определитель.
Преимущества программы{8}
-
Скорость работы.
-
Диалоговый режим.
-
Подходит для матриц любого размера ( ограничено лишь памятью).
-
Многие знают язык Pascal, разобраться в программе можно за короткий срок.
-
Вывод данных в понятном виде.
Минусы программы заключены в её плюсах: простой язык (Turbo Pascal),ограничение памяти. Конечно программа не может сравниться с программами, написанными на других, более современных, языках. В первую очередь, она помогла мне закрепить навыки программирования. Подобные задачи помогают развивать в себе не просто математика, а именно прикладного математика. Наверняка, подобные задачи разобраны в таких пакетах как Mathematica, Maple и др.
Общие выводы
Данный отчет был подготовлен в течение нескольких дней. Большую часть времени заняло составление программы на языке Turbo Pascal. Результаты работы меня удовлетворили. Я более чётко определила для себя правила составления отчета, в чем сильно помогли методические указания и рекомендации по вычислительной практике (автор Латыпова Н.В.). Так же я вспомнила некоторые возможности Turbo Pascal ( например, использование процедур). Просмотрела полезные книжки и лекции, которые помогли подготовить отчет (Воробьёва Г.Н., Данилова А.Н. "Практикум по вычислительной математике";
Немнюгин С.А."Turbo Pascal. Программирование на языке высокого уровня";Лекции по алгебре( Читал Мерзляков А.С.)). Разобрала новые, для меня, возможности пакета Mathematica ( использование матриц ).
Список литературы
-
Латыпова Н.В./Методические указания и рекомендации по вычислительной практике/УдГУ. Ижевск, 2004.16с.
-
Воробьёва Г.Н., Данилова А.Н./ Практикум по вычислительной математике./Высш. Шк.,1990.
-
Немнюгин С.А./ Turbo Pascal. Программирование на языке высокого уровня/ учебник для вузов. 2–е изд– СПб, 2005.
-
Лекции по алгебре. Читал Мерзляков А. С.
Аннотация
Данный отчет на тему обращение матриц и вычисление определителя по схеме Гаусса содержит в себе:
-
Введение
-
Задание и его описание
-
Этапы решения задания
-
Описание каждого из этапов (включая методы решения, алгоритмы, компьютерную программу, примеры тестирования)
-
Общие выводы о проделанной работе
-
Список литературы
-
Дискета с отчетом и программой на языке Turbo Pascal