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

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

? нажать соответствующие кнопки инструментальной панели). Полученные результаты выводятся в окно вывода.

. Выход из программы - меню Файл, команда Выход или кнопка закрытия окна.

 

3.4 Контрольный пример

 

Задание: Методом Гаусса решить систему линейных алгебраических уравнений Аx = b, найти определитель и обратную матрицу.

 

 

Найдем решение системы:

Прямой ход:

 

 

Обратный ход:

/5 x4 = 37/3; x4 = 185/261 ? 0,708812;

x3 - 33 x4 = -5; x3 = -320/87 ? -3,67816;

/3 x2 + 2 x3 + 20/3 x4 = 1; x2 = 2843/261 ? 10,8927;

x1 + 2 x2 + 3 x3 - 5 x4 = 0; x1 = 209/261 ? 0,80076;

Найдем определитель матрицы:

det A = - 9 1/3 (-5) 87/5 = 261

Найдем обратную матрицу:

Прямой ход:

 

 

Обратный ход:

 

 

Рисунок 9 - Пример работы программы

 

Как видно из полученного решения оно совпадает с точным, что дает нам возможность убедиться в правильности работы разработанной программы.

Заключение

 

В результате выполнения курсовой работы на тему Разработка программы решения систем линейных уравнений, вычисления определителя и обращения матриц мной была разработана программа, реализующая решение СЛАУ методом Гаусса. В программе используются оригинальные процедуры которые обеспечивают возможность нахождения LU - разложения, корней уравнений, определителей и обращения матриц. Эти процедуры могут без изменений переноситься и использоваться программами в которых решаются задачи линейной алгебры.

Программа позволяет решать любые системы, имеющие порядок не выше 10. Причем, благодаря удобному пользовательскому интерфейсу, за один сеанс работы с программой, можно решать любое число систем.

Учитывая широкую распространенность систем линейных уравнений в различных областях науки и техники, разработанная программа значительно облегчает процесс их решения и сокращает необходимое на решение время.

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

 

Список использованной литературы

 

1 Бидасюк Ю.М. Mathsoft MathCAD: самоучитель / Ю.М. Бидасюк. - М.: Диалектика, 2009. - 751 c.

Ваулин А.С. Языки программирования / А.С. Ваулин. - М.: Мир, 2003. - 248 с.

Вержбицкий В.М. Численные методы (линейная алгебра и нелинейные уравнения) / В.М. Вержбицкий. - М.: Высш. шк., 2000. - 433 c.

Глушаков С.В. Программирование на Delphi / С.В. Глушаков. -Харьков: Фолио, 2002. - 518 с.

Жоголев Е.А. Введение в технологию программирования (конспект лекций) / Е.А. Жоголев. - М.: ДИАЛОГ-МГУ, 1994. - 286 с.

Калиткин В.Г. Численные методы / В.Г. Калиткин. - М.: Наука, 1978. - 398 с.

Д. Мак-Кракен. Численные методы и программирование на Фортране / Д. Мак-Кракен, У.Дорн. - М.: Мир, 1977. - 584 с.

Ракитин В.И. Практическое руководство по методам вычислений с приложением программ для персональных компьютеров / В.И. Ракитин, В.Е. Первушин. - М.: Высшая школа, 1998. - 383 с.

 

Приложение

 

Листинг программы

(Программная реализация решения систем СЛАУ. Модули программы: main, opro, gauss_lu, vvod).

1) Главный модуль main

{Модуль main является главным модулем программы. В этом модуле выводятся результаты выполнения программы, предоставляется доступ к модулям opro, gauss_lu, vvod.}

unit main;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Menus, ActnList, StdCtrls, ComCtrls, ToolWin, ImgList, XPMan;= class(TForm): TActionList;: TAction;: TAction;: TAction;: TAction;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TToolBar;: TToolButton;: TToolButton;: TMemo;: TImageList;: TToolButton;: TXPManifest;aVyhodExecute(Sender: TObject);aVvodExecute(Sender: TObject);aGaussExecute(Sender: TObject);aOprgExecute(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm1;gauss_lu, opro, vvod;

{$R *.dfm}TForm1.aVyhodExecute(Sender: TObject); //выход;;TForm1.aVvodExecute(Sender: TObject); //вызов окна ввода данных.ShowModal;;TForm1.aGaussExecute(Sender: TObject); //управляющая процедура // метода Гаусса, j, k, //счетчики циклов: integer; //число уравнений системы, norm: real; //определитель, норма матрицы, //обратная матрица, //расширенная матрица коэффициентов системы размерности n x n+1, U: matr; //L,U матрицы LU-разложения, //вектор решения системы методом Гаусса: vect; //вектор правой части: textfile; //файл выводаPRINT_MATR(var A: matr; n: integer); //печать матрицы, j: integer;i := 1 to n doj := 1 to n do(fl, a[i, j]:10:5);(fl);; end;:= Form2.SpinEdit1.Value; //размерность матрицыi := 1 to N do //ввод значенийj := 1 to N do[i, j]:=StrToFloat(Form2.sg1.Cells[j, i]);[i]:=StrToFloat(Form2.sg1.Cells[N + 1, i]);;(fl, resgauss); Rewrite(fl);(fl, Исходная матрица:); //вывод матрицы_MATR(A, n);(fl, Правые части:); //вывод правой части матрицыj := 1 to n do(fl, B[j]:10:5);(A, n, L, U, norm); //вывод LU-разложенияnorm = 0 then(Нет LU-разложения для A);;;;(fl, Результаты разложения A=LU);(fl, L-матрица:); //вывод L-матрицы_MATR(L, n);(fl, U-матрица:); //вывод U-матрицы_MATR(U, n);(fl, Контроль по LU=A:); //вывод конрроля по LUi := 1 to n doj := 1 to n do:= 0;k := 1 to n do:= s + l[i, k] * u[k, j];[i, j] := s;;_MATR(A, n);(L, U, n, B, x);(fl, Решение системы); //вывод решения системыi := 1 to n do(fl, X, i, =, x[i]:7:5);(L, U, n, s);(fl, Определитель матрицы det(A)=, s:7:5); //вывод определителя(U, L, n, O);(fl, Обратная матрица:); //вывод обратной матрицы_MATR(O, n);(fl);.Lines.LoadFromFile(resgauss);;TForm1.aOprgExecute(Sender: TObject); //информация о программе.ShowModal;; end.

) Вычислительный модуль gauss_lu

{В модуле gauss_lu производятся все вычисления}gauss_lu;= array [1..10,1..10] of real; //двумерный массив действительных чисел= array [1..10] of real; //одномерный массив действительных чиселObr(L, U: matr; n: i