Решение системы линейный алгебраических уравнений методом Гаусса с поиском главного элемента по строке
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение
Высшего профессионального образования
"ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ"
Факультет экономики и управления
Кафедра математических методов и моделей в экономике
ОТЧЕТ
По лабораторному практикуму
По курсу численные методы
по теме "Решение СЛАУ методом Гаусса с поиском главного элемента по строке"
Руководитель:
Яркова О.Н.
Исполнитель
Студент гр. 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)<Abs(la[num,i]) then begin:=la[num,i];[num]:=i;;
//Меняем местами самый левый ненулевой столбец и столбец, содержащий максимальный элемент в первой строке
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.
Больше работ по теме:
Предмет: Информационное обеспечение, программирование
Тип работы: Практическое задание
Новости образования
КОНТАКТНЫЙ EMAIL: [email protected]
Скачать реферат © 2017 | Пользовательское соглашение
ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ