Способ решения системы линейных уравнений на ЭВМ методом Гаусса
Метод Гаусса как прямой метод нахождения решений для систем системы линейных уравнений маленькой и средней размерности с помощью компьютерной техники. Редактор кода и исходный код основной программы в Delphi, блок-схема и графическое решение задачи.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 15.06.2015 |
Размер файла | 460,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
13
Содержание
Введение
1. Решение СЛАУ методом Гаусса
Вывод
Список использованной литературы
Введение
На практике часто возникает необходимость решить систему линейных уравнений. Если система имеет высокий порядок или просто их много, то приходится прибегать к помощи компьютерной техники. Существуют несколько способов решения систему линейных уравнений на ЭВМ. В этой работе мы рассмотрим метод Гаусса.
гаусс линейный уравнение программа компьютерный
1. Решение СЛАУ методом Гаусса
Прямой ход состоит из n ( 1 шагов исключения.
1-й шаг. Целью этого шага является исключение неизвестного x1 из уравнений
с номерами i = 2, 3, …, n. Предположим, что коэффициент a11 ( 0. Будем называть его главным элементом 1-го шага.
Найдем величины
qi1 = ai1/a11 (i = 2, 3, …, n),
называемые множителями 1-го шага. Вычтем последовательно из второго, третьего, …, n-го уравнений системы первое уравнение, умноженное соответственно на q21, q31, …, qn1. Это позволит обратить в нуль коэффициенты при x1 во всех уравнениях, кроме первого. В результате получим эквивалентную систему
a11x1 + a12x2 + a13x3 + … + a1nxn = b1,
a22(1)x2 + a23(1)x3 + … + a2n(1)xn = b2(1),
a32(1)x2 + a33(1)x3 + … + a3n(1)xn = b3(1),
an2(1)x2 + an3(1)x3 + … + ann(1)xn = bn(1).
в которой aij(1) и bij(1) вычисляются по формулам
aij(1) = aij - qi1a1j, bi(1) = bi - qi1b1.
2-й шаг. Целью этого шага является ислючение неизвестного x2 из уравнений с номерами i = 3, 4, …, n. Пусть a22(1) ? 0, где a22(1) - коэффициент, называемый главным (или ведущим) элементом 2-го шага. Вычислим множители 2-го шага
qi2 = ai2(1) / a22(1) (i = 3, 4, …, n)
и вычтем последовательно из третьего, четвертого, …, n-го уравнения системы второе уравнение, умноженное соответственно на q32, q42, …, qm2. В результате получим систему
a11x1 + a12x2 + a13x3 + … + a1nxn = b1,
a22(1)x2 + a23(1)x3 + … + a2n(1) = b2(1),
a33(2)x3 + … + a3n(2)xn = b3(2),
an3(2)x3 + … + ann(2)xn = bn(2).
Аналогично проводятся остальные шаги. Опишем очередной k-й шаг.
k-й шаг. В предположении, что главный (ведущий) элемент k-го шага
akk(k-1) отличен от нуля, вычислим множители k-го шага
qik = aik(k-1) / akk(k-1) (i = k + 1, …, n)
и вычтем последовательно из (k + 1)-го, …, n-го уравнений полученной на предыдущем шаге системы k-e уравнение, умноженное соответственно на qk+1,k, qk+2,k, …, qnk. После (n - 1)-го шага исключения получим систему уравнений матрица A(n-1) которой является верхней треугольной. На этом вычисления прямого хода заканчиваются.
a11x1 + a12x2 + a13x3 + … + a1nxn = b1,
a22(1)x2 + a23(1)x3 + … + a2n(1)xn = b2(1),
a33(2)x3 + … + a3n(2)xn = b3(2),
ann(n-1)xn = bn(n-1).
Обратный ход. Из последнего уравнения системы находим xn. Подставляя найденное значение xn в предпоследнее уравнение, получим xn-1. Осуществляя обратную подстановку, далее последовательно находим xn-1, xn-2, …, x1. Вычисления неизвестных здесь проводятся по формулам
xn = bn(n-1) / ann(n-1),
xk = (bn(k-1) - ak,k+1(k-1)xk+1 - … - akn(k-1)xn) / akk(k-1), (k = n -
1, …, 1).
Необходимость выбора главных элементов. Заметим, что вычисление множителей, а также обратная подстановка требуют деления на главные элементы akk(k-1). Поэтому если один из главных элементов оказывается равным нулю, то схема единственного деления не может быть реализована.
Здравый смысл подсказывает, что и в ситуации, когда все главные элементы отличны от нуля, но среди них есть близкие к нулю, возможен неконтролируемый рост погрешности.
Рис. 1 - Алгоритм метода Гаусса
Создание приложения
Запускаем Delphi, выполняем команду File/New/Form
Рис. 2 - Создание нового окна
На появившемся окне помещаем:
Image1 - изображение - заставка
Timer1 - таймер
Рис. 3 - Стартовое окно программы
Далее добавляем еще одну форму (form3) и прописываем в таймере формы 2 время, по истечении которого будет показываться основное окно программы.
Рис. 4. Основное окно программы
На появившейся форме помещаем:
Button1 - решение системы
Button2 - графическое решение системы при N=2
Edit1 - размерность системы
Image1 - вывод результата
Label1, Label2 - подписи
MainMenu1 - создание меню
SavePictureDialog1 - диалог для сохранения изображения в файл
StringGrid1, StringGrid2 - ввод исходных данных
Двойным щелчком по форме открываем редактор кода и пишем исходный код программы.
Код unit3
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Menus, ExtCtrls, unit1, ExtDlgs, unit4, unit5;
const MaxDimension = 10;
type
Vector = array[1..MaxDimension] of Double;
Matrix = array[1..MaxDimension] of Vector;
TForm3 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Button1: TButton;
Label2: TLabel;
Label3: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
Image1: TImage;
SavePictureDialog1: TSavePictureDialog;
N2: TMenuItem;
Button2: TButton;
procedure Edit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
var a: Matrix;
b,x: Vector;
h: Double;
i,j,k,n:integer;
begin
//Ввод данных
//Размерность системы
n:= StrToIntDef(Text, StringGrid1.ColCount);
//Коэффициенты
for i:=0 to 249 do begin
for j:=0 to 161 do begin
image1.Canvas.Pixels [i,j]:=image1.Canvas.Pixels[1,1];
end;
for j:= 0 to n - 1 do
for i:= 0 to n - 1 do
a[i + 1, j + 1]:= StrToFloatDef(StringGrid1.Cells[j, i], 0);
//Правая часть уравнения
for I:= 0 to n - 1 do b[i + 1]:= StrToFloatDef(StringGrid2.Cells[0, i], 0);
//Прямой ход - исключение переменных
for i:=1 to n-1 do
for j:=i+1 to n do
begin
a[j,i]:=-a[j,i]/a[i,i];
for k:=i+1 to n do
a[j,k]:=a[j,k]+a[j,i]*a[i,k];
b[j]:=b[j]+a[j,i]*b[i]
end;
x[n]:=b[n]/a[n,n];
//Обратный ход - нахождение корней
for i:=n-1 downto 1 do
begin
h:=b[i];
for j:=i+1 to n do h:=h-x[j]*a[i,j];
x[i]:=h/a[i,i]
end;
//Вывод результата
for i:=1 to n do image1.Canvas.TextOut(1, 1+15*i, ('x'+ floattostr (i)+'= '+floattostr(x[i])));
for i:=0 to 249 do begin
for j:=0 to 161 do begin
if image1.Canvas.Pixels [i,j]<>clblack then image1.Canvas.Pixels [i,j]:=image1.Canvas.Pixels[1,1];
end;
procedure TForm3.Edit1Change(Sender: TObject);
begin
with StringGrid1, Edit1 do
begin
ColCount:= StrToIntDef(Text, 3);
RowCount:= StrToIntDef(Text, 3);
end;
with StringGrid2, Edit1 do
RowCount:= StrToIntDef(Text, 3);
if edit1.Text='2' then button2.Enabled:=true else button2.Enabled:=false;
end; //Button2 работает только при N=2
procedure TForm3.FormCreate(Sender: TObject);
var i, j: integer;
begin
//Заполнить коэф уравнения
Randomize;
for I:= 0 to StrToIntDef(Text, StringGrid1.ColCount) - 1 do
for J:= 0 to StrToIntDef(Text, StringGrid1.RowCount) - 1 do
StringGrid1.Cells[I, J]:= IntToStr(Random(100));
for I:= 0 to StrToIntDef(Text, StringGrid2.RowCount) - 1 do
StringGrid2.Cells[0, I]:= IntToStr(Random(100))
procedure TForm3.N6Click(Sender: TObject);
begin
form1.Visible:=true;
end;
procedure TForm3.N4Click(Sender: TObject);
begin
close;
end;
procedure TForm3.N3Click(Sender: TObject);
var
filename: string;
begin
if savepicturedialog1.Execute then
begin
FileName:= savepicturedialog1.FileName;
image1.Picture.SaveToFile(filename);// сохранение Image1 в файл
end;
procedure TForm3.N2Click(Sender: TObject);
begin
form4.Visible:=true;
end;
procedure TForm3.Button2Click(Sender: TObject);
var
i,j: integer;
begin
form5.Image1.Canvas.Rectangle(0,0,400,400);
for i:=1 to 398 do begin
for j:=1 to 398 do begin
form5.Image1.Canvas.Pixels[i,j]:=form3.Image1.Canvas.Pixels[1,1];
end;
end; //рисуем рамку и красим ее в цвет окна
form5.Visible:=true;
form5.Image1.Canvas.pen.Color:=clred;
form5.Image1.Canvas.MoveTo(0,200-50*round((strtofloat(stringGrid2.Cells[0,0])+4*strtofloat(stringGrid1.Cells[0,0]))/strtofloat(stringGrid1.Cells[1,0])));
form5.Image1.Canvas.LineTo(400,200-50*round((strtofloat(stringGrid2.Cells[0,0])-4*strtofloat(stringGrid1.Cells[0,0]))/strtofloat(stringGrid1.Cells[1,0])));
form5.Image1.Canvas.Pen.Color:=clblue;
form5.Image1.Canvas.MoveTo(0,200-50*round((strtofloat(stringGrid2.Cells[0,1])+4*strtofloat(stringGrid1.Cells[0,1]))/strtofloat(stringGrid1.Cells[1,1])));
form5.Image1.Canvas.LineTo(400,200-50*round((strtofloat(stringGrid2.Cells[0,1])-4*strtofloat(stringGrid1.Cells[0,1]))/strtofloat(stringGrid1.Cells[1,1])));
form5.Image1.Canvas.Pen.Color:=clblack;
i:=0;
form5.Image1.Canvas.MoveTo(200,0);
form5.Image1.Canvas.LineTo(200,400);
form5.Image1.Canvas.MoveTo(0,200);
form5.Image1.Canvas.LineTo(400,200);
repeat
i:=i+50;
form5.Image1.Canvas.MoveTo(i,195);
form5.Image1.Canvas.LineTo(i,205);
form5.Image1.Canvas.MoveTo(195,i);
form5.Image1.Canvas.LineTo(205,i);
until i>300;
form5.Image1.Canvas.TextOut(185,145,'1');// процедура, описывающая построение графика
end;
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls;
type
TForm4 = class(TForm)
Image1: TImage;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
end.
На этой форме разместим Image1, на которой и будем реализовать график. Его алгоритм прописан в Unit3
Код unit5
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm5 = class(TForm)
Image1: TImage;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
{$R *.dfm}
end.
Код unit1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
label1.Caption:='Данная программа реализует решение'+#10#13+'систем линейных алгебраических уравнений'+#10#13+ 'методом Гаусса';
end;
Вывод
Метод Гаусса относится к прямым методам нахождения решений для систем СЛАУ. Метод Гаусса удобно применять для систем маленькой и средней размерности. Для больших же размерностей или разреженных матриц более эффективными представляются итерационные методы. Метод Гаусса с выбором главного элемента по столбцу более устойчивый к ошибкам и при этом не требующий больших дополнительных затрат ресурсов ЭВМ.
Список использованной литературы
1. http:/www.wikipedia.org/wiki/Метод Гаусса
2. Карчевская М.П., Рамбургер О.Л., Тархов С.В., Хамзина Е.А. "Разработка приложений в среде Borland Delphi", УГАТУ-2005
3. Мастер - Самоучитель по Delphi 7 AlexSoft 1997-2001 г.
Размещено на Allbest.ru
Подобные документы
Системы линейных алгебраических уравнений. Код программы для решения систем линейных алгебраических уравнений. Математические и алгоритмические основы решения задачи методом Гаусса. Программная реализация решения. Алгоритмы запоминания коэффициентов.
лабораторная работа [23,5 K], добавлен 23.09.2014Применение итерационных методов численного решения системы линейных алгебраических уравнений при вычислении на ЭВМ. Математические и алгоритмические основы решения задачи, метод Гаусса. Функциональные модели и блок-схемы, программная реализация решения.
курсовая работа [527,5 K], добавлен 25.01.2010Системы линейных алгебраических уравнений. Решение систем уравнений графическим способом. Разработка программного кода модуля, реализующего приближенное решение систем линейных уравнений графическим способом. Отладка программного модуля "Метод Гаусса".
курсовая работа [858,5 K], добавлен 01.12.2013Разработка программного продукта для решения систем линейных алгебраических уравнений методом Гаусса с помощью ЭВМ. Математическое описание объекта моделирования, начальные и граничные условия. Алгоритм реализации задачи. Использование модуля CRT.
курсовая работа [269,6 K], добавлен 07.01.2016Сущность метода Гаусса при решении систем линейных уравнений. Элементарные преобразования этого метода. Краткое описание среды визуальной разработки Delphi. Описание основных применяемых процедур и алгоритм роботы программы по решению уравнений.
курсовая работа [1,1 M], добавлен 29.08.2010Системы линейных алгебраических уравнений. Матричный метод решения систем линейных уравнений. Решение задачи математическим методом. Блок-схема алгоритма и листинг программы. Расчет трудоемкости разработки программы. Расчет себестоимости и цены программы.
дипломная работа [144,8 K], добавлен 25.04.2012Матричная форма записи системы линейных уравнений, последовательность ее решения методом исключений Гаусса. Алгоритмы прямого хода и запоминания коэффициентов. Решение задачи о сглаживании экспериментальных данных с помощью метода наименьших квадратов.
курсовая работа [610,7 K], добавлен 25.06.2012Решение системы линейных уравнений с матричными элементами и свободными членами с использованием метода Гаусса с выбором главного элемента, основанного на приведении матрицы системы к треугольному виду с помощью нахождения элементов главной диагонали.
лабораторная работа [71,1 K], добавлен 10.12.2014Постановка задачи, математические и алгоритмические основы решения системы линейных алгебраических уравнений. Решение системы данных уравнений методом Гаусса с выбором главного элемента по столбцу. Функциональные модели и блок-схемы решения задачи.
курсовая работа [428,9 K], добавлен 25.01.2010Объектно-ориентированное программирование: основная идея, сопровождение, модификация, термины и положения. Понятие объекта как логической единицы, правила (методы) обработки данных. Метод Гаусса для решения систем линейных алгебраических уравнений.
курсовая работа [125,1 K], добавлен 22.04.2009