МЕНЮ
ОПЕРАЦИЙ 1.Решить систему линейных уравнений методом Гаусса. 2.Найти
обратную матрицу. 3.Вычислить определитель матрицы. 4.Выход.
|
Схема взаимодействия интерфейсных
форм
Интерфейсные формы схематически представлены на
рисунках 2.2.1-2.2.4
Рисунок 2.2.1 - Схематическое изображение формы
«Меню операций»
Введите
количество переменных ___ Введите матрицу коэффициентов Введите вектор
свободных членов
РЕШИТЬ
Вектор свободных членов
|
Рисунок 2.2.2 - Схематическое изображение формы
1
Введите количество переменных ___
Введите квадратную матрицу
НАЙТИ
Обратная матрица
|
Рисунок 2.2.3 - Схематическое изображение формы
2
Введите строк и столбцов ___ Введите
квадратную матрицу
НАЙТИ
Определитель матрицы равен __
|
Взаимодействие представленных выше интерфейсных
форм описано в виде диаграммы переходов состояний интерфейса программы (рисунок
2.2.5).
Рисунок 2.2.5 - Диаграмма переходов состояний
интерфейса программы
Схема взаимодействия модулей
Программа состоит из двух модулей:
· Модуль интерфейса,
· Модуль решения СЛАУ методом Гаусса.
Модуль решения СЛАУ методом Гаусса состоит из
трех процедур:
· Процедура нахождения СЛАУ методом Гаусса
· Процедура нахождения обратной
матрицы методом Гаусса
· Процедура нахождения определителя
методом Гаусса
Схема взаимодействия модулей представлена на
рисунке 2.3.1
Рисунок 2.3.1 - Схема взаимодействия процедур
модуля
Описание процедур и функций
Описание процедур и функций программы,
приведенное в таблице 2.4.1, включает название процедуры, входные и выходные
параметры и назначение процедуры.
Таблица 2.4.1 - Описание процедур и функций
Название
процедуры
|
Входные
параметры
|
Выходные
параметры
|
Назначение
процедуры
|
Procedure Gauss (a:matrica;
b:massiv; n:integer; var x:massiv; var pr:byte)
|
a-матрица коэффициентов при
неизвестных b-вектор свободных
членов n-размерность
СЛАУ
|
x-массив решений СЛАУ Pr-признак
существования
|
Нахождение
корней СЛАУ
|
Function Opredelitel (a:matrica;
n:integer):real;
|
a-матрица коэффициентов при
неизвестных n-размерность
СЛАУ
|
Det-значение определителя
матрицы
|
Нахождение
определителя матрицы
|
Procedure Obr_matrica (a:matrica;
n:integer; var h:matrica; var pr:byte)
|
a-матрица коэффициентов при
неизвестных n-размерность
СЛАУ
|
h-обратная матрица Pr-признак
существования
|
Нахождение
обратной матрицы
|
Обоснование выбора структуры
представления данных
Основными данными, которые необходимо
представлять в программе, являются матрицы и векторы. В качестве структуры
представления данных были выбраны динамические массивы, поскольку они позволяют
задавать количество строк и столбцов матрицы (элементов в векторе) в процессе
выполнения программы. Также динамические массивы можно удалять из памяти в
процессе выполнения программы. Это позволяет экономить память.
Руководство пользователю
Для того чтобы решить СЛАУ методом Гаусса необходимо
ввести матрицу коэффициентов и векторов свободных членов (рисунок 2.6.1).
Рисунок 2.6.1 - Панель ввода данных
Количество коэффициентов матрицы вектора
свободных членов можно ввести, нажав на соответствующую кнопку (рисунок 2.6.2).
Рисунок 2.6.2 - Кнопка введения количества
коэффициентов матрицы и вектора свободных членов
Для решения СЛАУ методом Гаусса необходимо
нажать кнопку (рисунок 2.6.3).
Рисунок 2.6.3 - Кнопка запуска программы решения
СЛАУ методом Гаусса
Результат решения СЛАУ будет представлен в
векторе неизвестных (рисунок 2.6.4).
Рисунок 2.6.4 - Панель результата решения СЛАУ
Для нахождения обратной матрицы необходимо
ввести коэффициенты квадратной матрицы (рисунок 2.6.5), количество
коэффициентов можно ввести с помощью кнопки (рисунок 2.6.6).
Рисунок 2.6.5 - Панель ввода квадратной матрицы
Рисунок 2.6.6 - Кнопка выбора количества
коэффициентов матрицы
Для нахождения обратной матрицы необходимо
нажать кнопку (рисунок 2.6.7).
Рисунок 2.6.7 - Кнопка запуска программы
нахождения обратной матрицы
Результат работы программы будет представлен на
панели (рисунок 2.6.8)
Рисунок 2.6.8 - Панель результата нахождения
обратной матрицы
Для нахождения определителя необходимо ввести
коэффициенты квадратной матрицы (рисунок 2.6.9), количество коэффициентов можно
ввести с помощью соответствующей кнопки (рисунок 2.6.10).
Рисунок 2.6.9 - Панель ввода квадратной матрицы
Рисунок 2.6.10 - Кнопка выбора количества
коэффициентов матрицы
Для запуска программы необходимо нажать кнопку
(рисунок 2.6.11).
Рисунок 2.6.11 - Кнопка запуска программы
определителя матрицы
Результат работы программы будет представлен на
панели (рисунок 2.6.12)
Рисунок 2.6.12 - Панель результата нахождения
определителя
Данные в программу можно ввести двумя способами:
с клавиатуры, либо открыть из файла.
При вводе с клавиатуры необходимо задать
количество строк/столбцов матрицы и ввести сами элементы матрицы (в случае
решения СЛАУ необходимо ввести еще элементы вектора свободных членов).
Для того чтобы очистить форму, нужно нажать на
соответствующую кнопку (рисунок 2.6.13).
Рисунок 2.6.13 - Кнопка «Очистить форму»
Для того, чтобы открыть данные из файла, нужно
нажать на соответствующую кнопку (рисунок 2.6.14) и выбрать необходимый файл.
Рисунок 2.6.14 - Кнопка «Открыть данные из
файла»
Кроме того, программа позволяет сохранять в файл
исходные данные и полученный результат. Для этого необходимо нажать на кнопки,
представленные на рисунках 2.6.15 и 2.6.16 соответственно.
Рисунок 2.6.15 - Кнопка « Сохранить данные в
файл»»
Рисунок 2.6.16 - Кнопка «Сохранить результаты в
файл»
Рисунок 2.6.17 - Кнопка «Выход»
Тестирование
Тестированием называют процесс выполнения
программы с различными исходными данными, для которого заранее известны
результаты. В большинстве случаев перебрать все возможные комбинации
невозможно, а выборочное тестирование не доказывает правильность программы, так
как то, что программа работает на десяти наборах данных, не означает то, что
она будет давать правильные результаты на одиннадцатом наборе. Поэтому целью
тестирования является обнаружение ошибок.
Соответственно хорошим можно считать тест,
обнаруживающий ошибку. Для формирования таких тестов определены две стратегии:
· «белого» или «прозрачного ящика» (крайний правый
подход);
· «черного ящика» (крайний левый
подход).
При тестировании с использованием стратегии
«белого ящика» тесты стараются подобрать так, чтобы хотя бы один раз пройти по
каждой ветви алгоритма. Стратегия имеет существенный недостаток: по ней
принципиально невозможно обнаружить пропущенный маршрут.
При тестировании с использованием стратегии
«черного ящика» структура программы считается неизвестной, и тесты подбираются
так, чтобы проверить выполнение всех функций программы, а затем отследить
реакцию на ввод некорректных данных.
Оптимальная стратегия проектирования между двумя
этими подходами, но ближе к крайнему левому подходу. Он включает создание
тестов по классификации исходя из принципа: на каждую используемую функцию, на
каждую область и границу изменения какой либо величины, на каждый особый случай
хотя бы один тест.
Тест №1. Решение СЛАУ методом Гаусса. Случай,
когда СЛАУ имеет единственное решение (3 параметра, 3 уравнения).
Исходные данные:
Ожидаемый результат:
Результат работы программы: при
занесении исходных данных, программа выдала результат, приведенный на рисунке
2.7.1
Рисунок 2.7.1 - Окно программы с
результатом решения
метод гаусс решение
уравнение
Анализ результата: полученный
результат совпадает с ожидаемым.
Тест №2. Решение СЛАУ методом
Гаусса. Случай, когда СЛАУ имеет единственное решение (4 параметра, 4
уравнения).
Исходные данные:
Ожидаемый результат:
Результат работы программы: при
исходных данных выше, программа выдала результат, приведенный на рисунке 2.7.2.
Рисунок 2.7.2 - Окно с результатом
решения
Анализ результата: полученный
результат совпадает с ожидаемым.
Тест №3. Решение СЛАУ методом
Гаусса. Ввод некорректных данных (не все коэффициенты матицы, вектора свободных
членов введены).
Исходные данные:
Ожидаемый результат: элементы
матрицы коэффициентов и вектора свободных членов не введены или введены
неверно.
Результат работы программы: при
занесении исходных данных выше, программа выдала результат, приведенный на
рисунке 2.7.3.
Рисунок 2.7.3 - Окно программы с
результатом решения
Анализ результата: полученный
результат совпадает с ожидаемым.
Тест №4. Решение СЛАУ методом
Гаусса. Случай, когда СЛАУ не имеет решения (4 параметра, 4 уравнения).
Исходные данные:
Ожидаемый результат: система не
имеет решения.
Результаты работы программы: при
занесении исходных данных выше, программа выдала результат, приведенный на
рисунке 2.7.4.
Рисунок 2.7.4 - Окно программы с
результатом решения
Анализ результата: полученный
результат совпадает с ожидаемым.
Тест №5. Решение СЛАУ методом
Гаусса. Случай, когда СЛАУ имеет множество решений (3 параметра, 3 уравнения).
Исходные данные:
Ожидаемый результат: система имеет
множество решений (вывод одного из базисных решений).
Результат работы программы: при
занесении исходных данных выше, программа выдала результат, приведенный на рисунке
2.7.5.
Рисунок 2.7.5 - Окно программы с
результатом решения
Анализ результата: полученный
результат совпадает с ожидаемым.
Тест №6. Обратная матрица. Случай,
когда матрица имеет обратную матрицу.
Исходные данные:
Ожидаемый результат: с помощью
пакета Mathcat был получен
следующий результат:
Результат работы программы: при
занесении исходных данных выше, программа выдала результат, приведенный на
рисунке 2.7.6.
Анализ результата: полученный
результат совпадает с ожидаемым.
Тест №7. Обратная матрица. Случай,
когда матрица не имеет обратную матрицу.
Исходные данные:
Ожидаемый результат: обратная
матрица не существует.
Результат работы программы: при
занесении исходных данных выше, программа выдала результат, приведенный на
рисунке 2.7.7.
Анализ результата: полученный результат
совпадает с ожидаемым.
Тест №8. Вычисление определителя.
Случай, когда значение определителя равно числу.
Исходные данные:
Ожидаемый результат: 12
Результат работы программы: при занесении
исходных данных выше, программа выдала результат, приведенный на рисунке 2.7.8.
Рисунок 2.7.7 - Окно программы с
результатом решения
Анализ результата: полученный
результат совпадает с ожидаемым.
Тест №9. Вычисление определителя.
Случай, когда значение определителя равно числу.
Исходные данные:
Ожидаемый результат: 1120
Результат работы программы: при
занесении исходных данных выше, программа выдала результат, приведенный на
рисунке 2.7.9.
Рисунок 2.7.9 - Окно программы с
результатом решения
Анализ результата: полученный
результат совпадает с ожидаемым.
Исходные данные:
Ожидаемый результат: 0
Результат работы программы: при
занесении исходных данных выше, программа выдала результат, приведенный на
рисунке 2.7.10.
Рисунок 2.7.10 - Окно программы с
результатом решением
Анализ результата: полученный
результат совпадает с ожидаемым.
Заключение
В результате выполнения данной
курсовой работы получен конечный продукт, который представляет собой решения
задач с помощью метода Гаусса. Программа рассчитана на широкий круг
пользователей, так как может быть использована не только студентами, но и
преподавателями, учителями и всеми желающими изучить решение задач с помощью
метода Гаусса. Программа значительно экономит время потребителя. Данный продукт
включает в себя:
) Решение систем алгебраических
линейных уравнений методом Гаусса
) Нахождение обратной матрицы
методом Гаусса
) Вычисление определителя методом
Гаусса.
Список использованных источников
. Вержбицкий В.М. Основы численных
методов [Текст]: учебное пособие для вузов/ В.М.Вержбицкий; под общ. ред. Л.В.
Честной; Мн-во образования РФ, Удмурдский гос. Университет - М.:Высш.шк.,2002.
- 840 с.:ил - ISBN
5-06-004020-8(в пер.).
. Алексеев Е.Р. Турбо Паскаль 7.0
[Текст]: учебное пособие для вузов/ Алексеев Е.Р., Чеснокова О.В., Павлыш Н.Н.,
Славинская Л.В. - 2-е изд.- М.: НТ Пресс, 2006.- 272с.:ил - ISBN
5-477-00276-Х(в пер.).
. Канатников А.Н., Крищенко А.П.
Аналитическая геометрия [Текст]: Учеб. для вузов. 3-е изд./ Под ред.
В.С.Зарубина, А.П.Крищенко. - М.: изд-во МГТУ им. Н.Э. Баумана, 2002. - 388
с.(сер. Математика в техническом университете; вып. 3) - ISBN
5-7038-1671-8 (вып. 3).
. Шапрута В.В. Delphi
2005. Учимся программировать [Текст]: учебное пособие для вузов/ Шапрута В.В. -
М.: НТ Пресс, 2005. - 352 с.: ил. - (самоучитель) - ISBN
5-477-00118-6.
. Кострикин А.И. Введение в алгебру.
Часть 1. основы алгебры: Учебник для вузов. - М.: Физико-математическая
литература,2001. - 272 с. - ISBN
5-9221-0167-6.
Приложение А
Общая символьная схема алгоритма.
Символьная схема алгоритма решения СЛАУ методом
Гаусса
Символьная схема алгоритма нахождения обратной
матрицы с использованием метода Гаусса
Символьная схема алгоритма нахождения
определителя матрицы с использованием метода Гаусса
Приложение Б
Код программы
unit
modul;
interface=array of real;=array
of array of real;Gauss(a:matrica;b:massiv;n:integer;x:massiv;var
pr:byte);opredelitel(a:matrica; n:integer):real;obrmatrica (a:matrica;
n:integer;h:matrica;var pr:byte);Gauss
(a:matrica;b:massiv;n:integer;x:massiv;var
pr:byte);i,j,k,r:integer;,m,c,s:real;
{прямой ход метода Гаусса}
for i:=1 to n doj:=1 to n do
k:=1 to n do:=abs(a[k,k]);
{пусть диагональный элемент - максимальный}
r:=k;
{Номер строки, в которой он находится}
for i:=k+1 to n
doabs(a[i,k])>max then
begin{Если
в строке найдется элемент, превышающий }
max:=abs(a[i,k]);
{максимум, сохранить его, а}
r:=i;
{также номер строки, в которой он находится}
end;
for
j:=1
to
n
do {Текущая
строка меняется местами со}
begin
{строкой содержащий максимальный элемент}
c:=a[k,j];[k,j]:=a[r,j];[r,j]:=c;
end;
{Приведение расширенной матрицы к ступенчатому
виду}
c:=b[k];[k]:=b[r];[r]:=c;i:=k+1
to n do:=a[i,k]/a[k,k];j:=k to n do[i,j]:=a[i,j]-m*a[k,j];[i]:=b[i]-m*b[k];;;
{Обратный ход метода Гаусса}
if
a[n,n]=0
then{Если
последний диагональный элемент равен нулю}
if
b[n]=0
then{и
последний свободный коэффициент равен нулю, то}
pr:=1{система
не имеет решений, иначе , если последний}
else
pr
:=2{свободный
коэффициент не нулевой, то система имеет}
else{бесконечное
множество решений}
begin{Если
последний диагональный элемент не нулевой}
pr:=0;
{переходим к определению решений СЛАУ.}
SetLength(x,n);[n]:=b[n]/a[n,n];i:=n
downto 1 do:=0;j:=i+1 to n do:=s+a[i,j]*x[j];[i]:=(b[i]-s)/a[i,i];;;opredelitel
(a:matrica; n:integer):real;i,j,k,r:integer;,m,c,det:real;:=1;k:=1 to n do
max:=abs(a[k,k]);
{пусть диагональный элемент - максимальный}
r:=k;
{Номер строки, в которой он находится}
for i:=k+1 to n
doabs(a[i,k])>max then{Если в строке найдется
элемент, превышающий }
max:=abs(a[i,k]);
{максимум, сохранить его, а}
r:=i;
{также
номер строки, в которой он находится}
end;r<>k then det:=-det; j:=1
to
n
do{Текущая
строка меняется местами со}
begin
{строкой содержащий максимальный элемент}
c:=a[k,j];[k,j]:=a[r,j];[r,j]:=c;
end;
{приведение расширенной матрицы к ступенчатому
виду}
for i:=k+1 to n
do:=a[i,k]/a[k,k];j:=k to n do[i,j]:=a[i,j]-m*a[k,j];;;i:=1 to n
do:=det*a[i,i];:=det;;obrmatrica (a:matrica; n:integer;h:matrica;var
pr:byte);i,j:integer;:byte;,b:massiv;i:=1 to n do
if i=j
then[j]:=1b[j]:=0;(a,b,n,x,pr1); {Решение
СЛАУ
методом
Гаусса}
if pr1<>0
then:=1;;beginj:=1 to n do {формирование
обратной
матрицы}
h[j,i]:=x[j];:=0; end;;;.