Способ решения системы линейных уравнений на ЭВМ методом Гаусса

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    5,93 Кб
  • Опубликовано:
    2015-06-15
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Способ решения системы линейных уравнений на ЭВМ методом Гаусса

Содержание

Введение

. Решение СЛАУ методом Гаусса

Вывод

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

Введение

На практике часто возникает необходимость решить систему линейных уравнений. Если система имеет высокий порядок или просто их много, то приходится прибегать к помощи компьютерной техники. Существуют несколько способов решения систему линейных уравнений на ЭВМ. В этой работе мы рассмотрим метод Гаусса.

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

1. Решение СЛАУ методом Гаусса

Прямой ход состоит из n ( 1 шагов исключения.

-й шаг. Целью этого шага является исключение неизвестного x1 из уравнений

с номерами i = 2, 3, …, n. Предположим, что коэффициент a11 ( 0. Будем называть его главным элементом 1-го шага.

Найдем величины

= ai1/a11 (i = 2, 3, …, n),

называемые множителями 1-го шага. Вычтем последовательно из второго, третьего, …, n-го уравнений системы первое уравнение, умноженное соответственно на q21, q31, …, qn1. Это позволит обратить в нуль коэффициенты при x1 во всех уравнениях, кроме первого. В результате получим эквивалентную систему

x1 + a12x2 + a13x3 + … + a1nxn = b1,

a22(1)x2 + a23(1)x3 + … + a2n(1)xn = b2(1),(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,(1)x2 + a23(1)x3 + … + a2n(1) = b2(1),(2)x3 + … + a3n(2)xn = b3(2),

an3(2)x3 + … + ann(2)xn = bn(2).

Аналогично проводятся остальные шаги. Опишем очередной k-й шаг.й шаг. В предположении, что главный (ведущий) элемент k-го шага(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,(1)x2 + a23(1)x3 + … + a2n(1)xn = b2(1),(2)x3 + … + a3n(2)xn = b3(2),

ann(n-1)xn = bn(n-1).

Обратный ход. Из последнего уравнения системы находим xn. Подставляя найденное значение xn в предпоследнее уравнение, получим xn-1. Осуществляя обратную подстановку, далее последовательно находим xn-1, xn-2, …, x1. Вычисления неизвестных здесь проводятся по формулам

= bn(n-1) / ann(n-1),= (bn(k-1) - ak,k+1(k-1)xk+1 - … - akn(k-1)xn) / akk(k-1), (k = n -

, …, 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 - ввод исходных данных

Двойным щелчком по форме открываем редактор кода и пишем исходный код программы.

Код unit3Unit3;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, StdCtrls, Menus, ExtCtrls, unit1, ExtDlgs, unit4, unit5;MaxDimension = 10;= array[1..MaxDimension] of Double;= array[1..MaxDimension] of Vector;= class(TForm): TLabel;: TEdit;: TStringGrid;: TStringGrid;

Button1: TButton;: TLabel;: TLabel;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TImage;: TSavePictureDialog;: TMenuItem;: TButton;Edit1Change(Sender: TObject);Button1Click(Sender: TObject);FormCreate(Sender: TObject);N6Click(Sender: TObject);N4Click(Sender: TObject);N3Click(Sender: TObject);N2Click(Sender: TObject);Button2Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm3;

{$R *.dfm}TForm3.Button1Click(Sender: TObject);a: Matrix;,x: Vector;: Double;,j,k,n:integer;

//Ввод данных

//Размерность системы:= StrToIntDef(Text, StringGrid1.ColCount);

//Коэффициентыi:=0 to 249 do beginj:=0 to 161 do begin.Canvas.Pixels [i,j]:=image1.Canvas.Pixels[1,1];;j:= 0 to n - 1 doi:= 0 to n - 1 do[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];

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;

//Вывод результатаi:=1 to n do image1.Canvas.TextOut(1, 1+15*i, ('x'+ floattostr (i)+'= '+floattostr(x[i])));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];;TForm3.Edit1Change(Sender: TObject);

with StringGrid1, Edit1 do

begin

ColCount:= StrToIntDef(Text, 3);

RowCount:= StrToIntDef(Text, 3);

end;

with StringGrid2, Edit1 do

RowCount:= StrToIntDef(Text, 3);edit1.Text='2' then button2.Enabled:=true else button2.Enabled:=false;; //Button2 работает только при N=2

procedure TForm3.FormCreate(Sender: TObject);

var i, j: integer;

//Заполнить коэф уравнения

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))TForm3.N6Click(Sender: TObject);.Visible:=true;;TForm3.N4Click(Sender: TObject);;;TForm3.N3Click(Sender: TObject);: string;savepicturedialog1.Execute then

begin

FileName:= savepicturedialog1.FileName;

image1.Picture.SaveToFile(filename);// сохранение Image1 в файл;TForm3.N2Click(Sender: TObject);.Visible:=true;;TForm3.Button2Click(Sender: TObject);,j: integer;.Image1.Canvas.Rectangle(0,0,400,400);i:=1 to 398 do beginj:=1 to 398 do begin.Image1.Canvas.Pixels[i,j]:=form3.Image1.Canvas.Pixels[1,1];;

end; //рисуем рамку и красим ее в цвет окна

form5.Visible:=true;.Image1.Canvas.pen.Color:=clred;.Image1.Canvas.MoveTo(0,200-50*round((strtofloat(stringGrid2.Cells[0,0])+4*strtofloat(stringGrid1.Cells[0,0]))/strtofloat(stringGrid1.Cells[1,0])));.Image1.Canvas.LineTo(400,200-50*round((strtofloat(stringGrid2.Cells[0,0])-4*strtofloat(stringGrid1.Cells[0,0]))/strtofloat(stringGrid1.Cells[1,0])));.Image1.Canvas.Pen.Color:=clblue;.Image1.Canvas.MoveTo(0,200-50*round((strtofloat(stringGrid2.Cells[0,1])+4*strtofloat(stringGrid1.Cells[0,1]))/strtofloat(stringGrid1.Cells[1,1])));.Image1.Canvas.LineTo(400,200-50*round((strtofloat(stringGrid2.Cells[0,1])-4*strtofloat(stringGrid1.Cells[0,1]))/strtofloat(stringGrid1.Cells[1,1])));.Image1.Canvas.Pen.Color:=clblack;:=0;.Image1.Canvas.MoveTo(200,0);.Image1.Canvas.LineTo(200,400);.Image1.Canvas.MoveTo(0,200);.Image1.Canvas.LineTo(400,200);:=i+50;.Image1.Canvas.MoveTo(i,195);.Image1.Canvas.LineTo(i,205);.Image1.Canvas.MoveTo(195,i);.Image1.Canvas.LineTo(205,i); i>300;

form5.Image1.Canvas.TextOut(185,145,'1');// процедура, описывающая построение графика;

unit Unit4;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, jpeg, ExtCtrls;

TForm4 = class(TForm)

Image1: TImage;

{ Private declarations }

public

{ Public declarations }

end;

Form4: TForm4;

{$R *.dfm}

end.

На этой форме разместим Image1, на которой и будем реализовать график. Его алгоритм прописан в Unit3

Код unit5Unit5;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls;

TForm5 = class(TForm)

Image1: TImage;

private

{ Private declarations }

public

{ Public declarations }

end;

Form5: TForm5;

{$R *.dfm}.

Код unit1

Unit1;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

TForm1 = class(TForm)

Label1: TLabel;

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

end;

Form1: TForm1;

{$R *.dfm}TForm1.FormCreate(Sender: TObject);

begin.Caption:='Данная программа реализует решение'+#10#13+'систем линейных алгебраических уравнений'+#10#13+ 'методом Гаусса';;

Вывод

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

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

1. http:/www.wikipedia.org/wiki/Метод Гаусса

. Карчевская М.П., Рамбургер О.Л., Тархов С.В., Хамзина Е.А. "Разработка приложений в среде Borland Delphi", УГАТУ-2005

. Мастер - Самоучитель по Delphi 7 AlexSoft 1997-2001 г.

Похожие работы на - Способ решения системы линейных уравнений на ЭВМ методом Гаусса

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!