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

скачать (1434.5 kb.)

Министерство образования и науки Российской Федерации

Государственное образовательное учреждение

Высшего профессионального образования

"ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ"

Факультет экономики и управления

Кафедра математических методов и моделей в экономике

ОТЧЕТ

По лабораторному практикуму

По курсу численные методы

по теме "Решение СЛАУ методом Гаусса с поиском главного элемента по строке"


Руководитель:

Яркова О.Н.

Исполнитель

Студент гр. 09ММЭ

Евдокимов Д. А.

Оренбург 2011
Содержание
1) Постановка задачи

) Краткие теоретические сведения

) Алгоритм

) Блок-схема

) Код программы

) Тестовый пример

) Проверка в MathCad


1) Постановка задачи
Найти корни системы линейных алгебраических уравнений, используя метод Гаусса с поиском главного элемента по строке.

2) Краткие теоретические сведения



Система линейных алгебраических уравнений (СЛАУ) имеет вид
Ax=b,

где , ,
СЛАУ имеет решение, если ранг матрицы А равен n (числу переменных) и если матрица А не является вырожденной.

Существуют следующие методы решения СЛАУ:

) Метод Крамера;

) Метод Гаусса;

) Матричный подход;

) LU-разложение;

) и другие.

Рассмотрим метод Гаусса с поиском главного элемента по строке.

Матрицей перестановок Р будет называть матрицу размерности n x n, у которой в каждом столбце/строке только один элемент равен единице, а остальные - 0. Элементарной матрицей перестановок Pkl будем называть матрицу, полученную из единичной перестановкой k-того и l-того столбцов.

Если матрица не является вырожденной, то существует такая матрица перестановок, что матрица P*A имеет отличные от нуля главные миноры.

Найдя максимальный по модулю элемент в текущей строке, ставим его на первое место, используя матрицу перестановок.

После перестановки используем метод LU-разложения, на каждом шаге которого переставляем максимальный и i-тый элементы в i-той строке, используя матрицу перестановок Pij, где j - номер столбца с максимальным элементом в i-той строке.

гаусс алгебраический уравнение алгоритм

3) Алгоритм



0) А, b, i:=1.

) Ищем в i-той строке наибольший по модулю элемент и меняем его местами с элементом aii, находя А*Рji , где j - номер столбца с максимальным элементом в i-той строке А.

) Находим элементы матрицы Li, Ai:=Li*А*Рji, Bi:=Li*b.

) Если i=n, то переходим к шагу 4. Иначе - i:=i+1, к шагу 1.
) ,
где - n-ный элемент вектора bn-1, а - стоящий в нижнем правом углу элемент матрицы an-1.


,
где . х - искомый вектор решений.


4) Блок-схема










5) Код программы


Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, XPMan, Grids, ComCtrls;= class(TForm): TEdit;: TLabel;: TUpDown;: TStringGrid;: TLabel;: TStringGrid;: TEdit;: TLabel;: TXPManifest;: TButton;Edit1Change(Sender: TObject);Button1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };l, la, a: array [0..100, 0..100] of Real; //Формат: номер матрицы L, строки, столбцы,b,xsolved: array [0..100] of real; //xsolved - вектор-решение СЛАУ:Real; //Промежуточная переменная

i,j,n,k: integer;

ch: array [0..100] of Integer;: TForm1;

{$R *.dfm}lmatrix (num: integer);

//(num+1) - номер очередной матрицы L

//Сама процедура находит L c индексом (num+1)

begini:=0 to (n-1) do beginj:=0 to (n-1) do L[i,j]:=0;[i, i]:=1;;[num, num]:=1/a[num, num];i:=(num+1) to (n-1) do begin[i, num]:=-a[i, num]*L[num, num];[i, i]:=1;;;lamatrix (num:integer);

//Получаем матрицу L(num+1)*...*L(1)*A

var x:real;num=0 theni:=0 to (n-1) doj:=0 to (n-1) do[i,j]:=a[i,j]i:=0 to (n-1) doj:=0 to (n-1) do begin:=0;k:=0 to (n-1) do:=x+l[i, k]*a[k, j];[i, j]:=x;;i:=0 to (n-1) doj:=0 to (n-1) do[i,j]:=La[i,j];;lbvector (num:integer);

//Получаем вектор L(num+1)*...*L(1)*b

var x:real;num=0 thenj:=0 to (n-1) do[j]:=b[j]i:=0 to (n-1) do begin:=0;j:=0 to (n-1) do:=x+l[i, j]*b[j];[i]:=x;;i:=0 to (n-1) do b[i]:=lb[i];;replace (num:integer);

//Поиск максимального элемента по текущей строке

zz:=la[num,num];i:=(num+1) to (n-1) doAbs(zz);

//Меняем местами самый левый ненулевой столбец и столбец, содержащий максимальный элемент в первой строке

for i:=0 to (n-1) do begin:=la[i,ch[num]];[i,ch[num]]:=la[i,num];[i,num]:=zz;;i:=0 to (n-1) doj:=0 to (n-1) do[i,j]:=La[i,j];;solving;[n-1]:=lb[n-1]/la[n-1, n-1];i:=(n-2) downto 0 do begin:=0;j:=i to (n-1) do:=zz+la[i, j]*xsolved[j];[i]:=lb[i]-zz;;i:=(n-2) downto 0 do begin:=xsolved[ch[i]];[ch[i]]:=xsolved[i];[i]:=zz;;;TForm1.Edit1Change(Sender: TObject);:=StrToInt(Edit1.Text);.ColCount:=n;.RowCount:=n;.RowCount:=n;;TForm1.Button1Click(Sender: TObject); i,j:integer;

begin

//Обнуляем все матрицы для независимости от результатов предыдущих вычислений

for j:=0 to n do begink:=0 to n do begin[j,k]:=0;[j,k]:=0;[j,k]:=0;;[j]:=0;[j]:=0;[j]:=0;;

Edit2.Text:='';

//Считывание элементов матрицы А и вектора b

for i:=0 to (n-1) do beginj:=0 to (n-1) do[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);[i]:=StrToFloat(StringGrid2.Cells[0,i]);;i:=0 to (n-2) do begin(i);(i);(i);(i);;(n-1);(n-1);;i:=0 to (n-1) do Edit2.Text:=Edit2.Text+'x'+IntTostr(i+1)+'='+FloatTostr(xsolved[i])+'; ';;.
6) Тестовый пример


Рисунок 1 - решение СЛАУ.
7) Проверка в MathCad


Рисунок 2 - решение СЛАУ с помощью программного пакета MathCad.


Рефераты Практические задания Лекции
Учебный контент

© ref.rushkolnik.ru
При копировании укажите ссылку.
обратиться к администрации