Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Chislennye_metody_-_KR_-IVT-1u-Konyaeva.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
688 Кб
Скачать
☆
    1. Пример решения задачи

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

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

1. Прямой ход

Разделим все члены первого уравнения на 8, получим:

.

Вычтем из второго и третьего уравнения первое:

.

Разделим все члены второго уравнения на , а третьего на , получим :

.

Вычтем из третьего уравнения второе :

.

Прямой ход завершен.

2.Обратный ход.

Выразим из последнего уравнения системы :

.

Из второго уравнения выразим :

.

Из первого уравнения выразим :

.

Получаем следующее решение системы:

.

      1. Решение системы линейных алгебраических уравнений методом Гаусса с помощью программы 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. Решение системы линейных алгебраических уравнений метод квадратных корней (Холецкого)

Решить СЛАУ  методом квадратных корней.

1. Пусть

,

Находим элементы матрицы L:

, ,

, , .

Таким образом разложение матрицы А имеет вид:

2. Последовательно решаем две системы Ly=b и LTx=y.

Решением первой системы является вектор ,

а решением второй системы вектор .

      1. Решение системы линейных алгебраических уравнений метод квадратных корней (Холецкого) с помощью программы 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 – Схема алгоритма метода Холецкого

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]