- •1.Теоретическая часть
- •1.1 Точные методы
- •1.1.1 Метод Гаусса
- •1.1.2 Связь метода Гаусса с разложением матрицы на множители. Теорема об lu разложении.
- •1.1.3 Метод Гаусса с выбором главного элемента
- •2.2 Варианты заданий
- •1.1.4 Метод Холецкого (метод квадратных корней)
- •2. Практическая часть
- •2.1 Задание на контрольную работу
- •Метод Гаусса.
- •Пример решения задачи
- •2.4 Требования к оформлению контрольной работы
- •Список использованной литературы
Пример решения задачи
Решение системы линейных алгебраических уравнений методом Гаусса.
Решить
СЛАУ
методом Гаусса.
1. Прямой ход
Разделим все члены первого уравнения на 8, получим:
.
Вычтем из второго и третьего уравнения первое:
.
Разделим
все члены второго уравнения на
,
а третьего на
,
получим :
.
Вычтем из третьего уравнения второе :
.
Прямой ход завершен.
2.Обратный ход.
Выразим
из последнего уравнения системы
:
.
Из
второго уравнения выразим
:
.
Из
первого уравнения выразим
:
.
Получаем следующее решение системы:
.
Решение системы линейных алгебраических уравнений методом Гаусса с помощью программы PROCEDURE SIMQ
Procedure SIMQ(Nn:Integer;Var Aa:TMatr;
Var Bb:TVector;Var Ks:Integer);
Входные параметры:
Nn − размерность системы;
Aa − матрица коэффициентов системы N *N типа TMatr = array[1..n, 1..n] of real;
Bb− вектор размерности N типа TVector= array[1..n] of real, содержит правые части системы.
Выходные параметры:
Bb − решение системы;
ks – признак правильности решения (код ошибки): если ks=0 то в массиве Bb содержится решение системы.
Пример. Решить систему уравнений
Схема алгоритма приведена на рисунке 1.
Примерный текст процедуры:
PROCEDURE SIMQ(Nn:Integer;Var Aa:TMatr;Var Bb:TVector;Var Ks:Integer);
Label M1;
Const Eps=1e-21;
Var Max,U,V : Real; I,J,K1,L : Integer;
Begin
For I:=1 To Nn Do Aa[i,Nn+1]:=Bb[i];
For I:=1 To Nn Do
Begin
Max:=Abs(Aa[i,i]); K1:=I;
For L:=I+1 To Nn Do If (Abs(Aa[l,i])>Max) Then
Begin
Max:=Abs(Aa[l,i]); K1:=L;End;
If(Max<Eps) Then Begin Ks:=1; Goto M1;
End Else Ks:=0;
If K1<>I Then
For J:=I To Nn+1 Do
Begin U:=Aa[i,j]; Aa[i,j]:=Aa[k1,j]; Aa[k1,j]:=U; End;
V:=Aa[i,i];
For J:=I To Nn+1 Do Aa[i,j]:=Aa[i,j]/V;
For L:=i+1 To Nn Do Begin
V:=Aa[l,i]; For J:=I+1 To Nn+1 Do Aa[l,j]:=Aa[l,j]-Aa[i,j]*V;
End; End;
Bb[nn]:=Aa[Nn,Nn+1];
For I:=Nn-1 Downto 1 Do Begin Bb[i]:=Aa[i,nn+1];
For J:=I+1 To Nn Do Bb[i]:=Bb[i]-Aa[i,j]*Bb[j];
End;
M1:End;
Вычисления по программе привели к следующим результатам:
x1=0.100000E+0001 x2=0.200000Е+0001
x3=0.З00000Е+0001
признак выхода 0
Рисунок 1 – Схема алгоритма метода Гаусса
Варианты заданий для решения систем линейных алгебраических уравнений методом Гаусса приведены в таблице 1.
Решение системы линейных алгебраических уравнений метод квадратных корней (Холецкого)
Решить
СЛАУ
методом квадратных корней.
1. Пусть
,
Находим элементы матрицы L:
,
,
,
,
.
Таким образом разложение матрицы А имеет вид:
2. Последовательно решаем две системы Ly=b и LTx=y.
Решением
первой системы является вектор
,
а
решением второй системы вектор
.
Решение системы линейных алгебраических уравнений метод квадратных корней (Холецкого) с помощью программы Procedure holet
Procedure holet (A1: Tmatr; var B1: Tvector;
N: integer);
Входные параметры:
N − размерность системы;
A1− матрица коэффициентов системы N *N +1, типа Tmatr = array[1..n, 1..n+1] of real, N +1 столбец используется для копирования левой части для упрощения вычислений;
B1− вектор свободных членов системы типа Tvector= array[1..n] of real.
Выходные параметры:
B1− решение системы.
Пример. Решить систему уравнений:
Схема алгоритма приведена на рисунке 2.
Здесь произвольная матрица коэффициентов при неизвестных в системе уравнений умножением на транспонированную к ней матрицу приводится к симметричной.
Примерный текст программы:
uses crt;
type
Tmatr=array[1..3,1..4]of real;
Tvector=array[1..3]of real;
const
{матрица размерности N*N , N+1 столбец используется для копирования
левой части СЛАУ для упрощения вычислений}
A:tmatr= ((1,1,1,0),
(1,0,-1,0),
(1,2,1,0));
B:Tvector= (6,-2,8);
var
k,N:integer;
{процедура для вывода матрицы}
Procedure vivod_matr(A1:Tmatr;N :integer);
var
i,j:integer;
begin
For i:=1 to N do begin
For j:=1 to N do write(A1[i,j]:15,' ');
writeln;
End;
writeln;
End;
{процедура для вывода вектора}
Procedure vivod_vectr(B1:Tvector; N :integer);
var
j:integer;
begin
For j:=1 to N do writeln('x',j,'=',B1[j]:0,' ');
writeln;
End;
{метод Холецкого}
{
Входные параметры:
N − размерность системы;
A1− матрица коэффициентов системы N *N +1, N +1 столбец используется для копирования левой части СЛАУ для упрощения вычислений;
B1− вектор свободных членов системы.
Выходные параметры:
B1− решение системы.
B1-при вызове процедуры содержит вектор свободных членов СЛАУ,
Выходные параметры:
B1- содержит решение СЛАУ
}
Procedure holet(A1:Tmatr;var B1:Tvector;N :integer);
var i,j,t:integer;
c,L:Tmatr;
y:Tvector;
buf,summ:real;
Begin
For i:=1 to N do
For j:=1 to N +1 do
begin
c[i,j]:=0;
L[i,j]:=0;
y[i]:=0;
End;
{Умножение матрицы на транспонированную}
For i:=1 to N do
For j:=1 to N do
begin
summ:=0.0;
For t:=1 to N do
summ:=A1[t,j]*A1[t,i]+summ;
c[i,j]:=summ;
End;
{умножение правой части на транспонированную м-цу}
For i:=1 to N do
For j:=1 to N do
y[i]:=A1[j,i]*B1[j]+y[i];
For i:=1 to N do For j:=1 to N do
begin
A1[i,j]:=c[i,j];
B1[i]:=y[i];
End;
For i:=1 to N do
begin
For j:=1 to i do
begin
summ:=0;
For t:=1 to j-1 do
summ:=summ+L[i,t]*L[j,t];
if i<>j then
L[i,j]:=(A1[i,j]-summ)/L[j,j]
else
L[i,i]:=sqrt(A1[i,i]-summ);
End;
End;
For i:=1 to N do L[i,N +1]:=B1[i];
B1[1]:=L[1,N +1]/L[1,1];
For i:=2 to N do
begin
For j:=1 to i-1 do
L[i,N +1]:=L[i,N +1]-L[i,j]*B1[j];
B1[i]:=L[i,N +1]/L[i,i];
End;
For i:=1 to N do
begin
For j:=i+1 to N do
begin
L[i,j]:=L[j,i];
L[j,i]:=0;
End;
L[i,N +1]:=B1[i];
End;
B1[N ]:=L[N ,N +1]/L[N ,N ];
For i:=N -1 downto 1 do
begin
For j:=i+1 to N do
L[i,N +1]:=L[i,N +1]-L[i,j]*B1[j];
B1[i]:=L[i,N +1]/L[i,i];
End;
End;
begin
N:=3;
writeln('dannaya SLAU');
{матрица задается типизированной константой}
vivod_matr(A,N);
writeln('metod Holetckogo');
holet(A,B,N);
vivod_vectr (B, N);
End.
Вычисления по программе привели к следующим результатам:
x1= 0.1000000E+0001
x2= 0.2000000E+0001
x3= 0.3000000E+0001
Рисунок 2 – Схема алгоритма метода Холецкого
