Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SLAU.doc
Скачиваний:
4
Добавлен:
12.11.2018
Размер:
712.7 Кб
Скачать

Система (1) может быть записана в следующей форме:

Ax = b . (2)

Матрица A называется матрицей коэффициентов, векторы x и b - векторами неизвестных и правых частей системы (2) соответственно.

Единственное решение системы для любого вектора правых частей b определяется аналитически как

x = A-1b .

Формулы (A = LU, Ly = b, Ux = y) определяют метод LU- разложения. Отличительная особенность метода состоит в том, что при выполнении прямого хода, в отличие от алгоритма Гаусса, преобразуется только матрица А (вектор b не преобразуется), причём при выполнении прямого хода последовательно вы­числяются и запоминаются элементы двух матриц - L и U. Следует отметить, что так как эти мат­рицы треугольные (нижняя и верхняя соответственно) и, кроме того, равные единице диагональ­ные элементы матрицы L запоминать не нужно, то для запоминания элементов этих матриц доста­точно двумерного массива размера nхn. Чаще всего элементы этих матриц хранятся в массиве А, постепенно, в процессе преобразований на этапе прямого хода, вытесняя элементы матрицы А. При обратном ходе в методе LU- разложения вначале по формуле Ly = b. вычисляется вспомогательный вектор у, а уже затем решается уравнение Uх=у, Эта модификация алгоритма Гаус­са решения СЛАУ оказывается наиболее удобной и эффективной в том случае, когда необходимо решить несколько СЛАУ вида Ах = b с одной и той же матрицей коэффициентов, но разными правы­ми частями. Последнее свойство делает метод LU- разложения удобным, в частности, при вычис­лении обратной матрицы (обращении матрицы).

3.1. Выбор ведущего элемента в алгоритме прямого хода

При выполнении очередного k-ого этапа алгоритма прямого хода знаменатель в формуле может оказаться равным нулю. Такая ситуация требует перед выполнением очередного этапа осуществления дополнительных эквивалентных преобразований системы (1), например - переста­новки местами k-ого с одним из следующих за ним уравнений системы, так чтобы новый элемент оказался не равным нулю.

В настоящее время наиболее часто применяются следующие две стратегии выбора ведуще­го элемента: частичный и полный выбор.

3.2. Полный выбор ведущего элемента

На каждом k-ом этапе прямого хода алгоритма Гаусса находится наибольший по модулю элемент , i,j{k,k+l,...,n}. Затем, если i≠k, производится перестановка k-ой и i-ой строк в матрице Ak-i и в векторе bk-i, а, если j≠k, перестановка k-ого и j-ого столбцов в матрице Ak-i.

3.3. Метод lu- разложения с реализацией стратегии полного выбора

Реализация алгоритма полного выбора при выполнении прямого хода метода LU- разложе­ния означает выполнение LU- разложения не матрицы А системы (2), а матрицы

PrAPc = LU

Матрицы перестановок Рг и Рс характеризуют выполненные при реализации алгоритма полного выбора перестановки строк (row) и столбцов (column) матрицы А соответственно. В этом случае описание метода LU- разложения принимает вид:

PrAPc = LU,

Ly = Prb, Uz = y, x = Pcz

3.4. Вычисление определителя матрицы

Метод LU- разложения, равно как и метод Гаусса, по­зволяют вычислить и определитель матрицы. Действительно, так как определитель произведения матриц равен произведению их определителей, а определитель любой треугольной матрицы равен произведению ее диагональных элементов, то

Если при выполнении прямого хода метода LU-разложения, равно как и метода Гаусса, дополнительно реализуется алгоритм частичного выбора ведущего элемента, то так как определи­тель матрицы перестановок Рг первой формулы в (17) равен единице (|Рг|=1) при чётном числе пе­рестановок nг и минус единице (|РГ|=-1) - в противном случае, после простых преобразований из первой формулы в (17) следует, что

.

Если при выполнении прямого хода метода LU- разложения, равно как и метода Гаусса, дополнительно реализуется алгоритм полного выбора ведущего элемента, то так как определители матриц перестановок Рг и Рс первой формулы в (18) равны единице при чётном числе перестано­вок nг и nс соответственно и минус единице - в противном случае, после простых преобразований из первой формулы в (18) следует, что

.

4 СХЕМА ПРОГАММЫ

4.1.Схема основной программы

4.2.Схема процедуры SOLVE

4.3.Схема процедуры DECOMP

4.4.Схема блоков 1 и 2

4 ТЕКСТ ПРОГРАММЫ

program sl;

uses crt;

const n=4;

type rmatr=array[1..n,1..n] of real;

rvect=array[1..n] of real;

ivect=array[1..n] of integer;

var f:text;

name:string[20];

eps:real; a:rmatr; b,y:rvect; ip,jp:ivect;

i,o,j,k:integer;

det:real;

ifsolve:boolean;

Procedure decomp(n:integer;var a:rmatr; var ip,jp:ivect; var eps,det: real; var ifsolve:boolean);

label 10;

var

k,im,jm,i,j,p,g: integer;

s,norm,am,ap,app: real;

begin

ifsolve:=true; det:=1.0;

for i:=1 to n do

begin

ip[i]:=i;

jp[i]:=i;

end;

norm:=0.0;

for i:=1 to n do begin

s:=0.0;

for j:=1 to n do

s:=s+abs(a[i,j]);

if norm<s then norm:=s;

end;

eps:=eps*norm;

for k:=1 to n-1 do begin

am:=abs(a[k,k]);

im:=k;

jm:=k;

for i:=k-1 to n do

for j:=k-1 to n do

begin

if (abs(a[i,k])>am) then

begin

am:=abs(a[i,j]);

im:=i;

jm:=j;

end;

end;

if (im<>k) then begin

for j:=1 to n do

begin

ap:=a[im,j];

a[im,j]:=a[k,j];

a[k,j]:=ap;

end;

p:=ip[im];

ip[im]:=ip[k];

ip[k]:=p;

det:=-det;

end;

if(jm<>k) then begin

for j:=1 to n do

begin

ap:=a[i,jm];

a[i,jm]:=a[i,k];

a[i,k]:=ap;

end;

g:=jp[jm];

jp[jm]:=jp[k];

jp[k]:=g;

det:=-det;

end;

if abs(a[k,k])>=eps then

for i:=k+1 to n do begin

am:=a[i,k]/a[k,k];

a[i,k]:=am;

for j:=k+1 to n do

a[i,j]:=a[i,j]-am*a[k,j];

end

else

begin

ifsolve:=false;

goto 10;

end;

end;

10:if ifsolve and (abs(a[n,n])>=eps) then

for k:=1 to n do det:=det*a[k,k]

else begin det:=0; ifsolve:=false;end;

end;

Procedure solve(n:integer; var a:rmatr; var ip,jp:ivect;var b:rvect);

var y:rvect;

i,j:integer;

s:real;

begin

for i:=1 to n do

y[i]:=b[ip[i]];

for i:=2 to n do

begin

s:=y[i];

for j:=1 to i-1 do

s:=s-a[i,j]*y[j];

y[i]:=s;

end;

b[n]:=y[n]/a[n,n];

for i:=n-1 downto 1 do

begin

s:=y[i];

for j:=i+1 to n do

s:=s-a[i,j]*b[j];

b[i]:=s/a[i,i];

end;

for i:=1 to n do

y[jp[i]]:=b[i];

b:=y;

end;

begin

clrscr;

write('Enter name of file with necessary information: ');

readln(name);

assign(F,name);

reset(F); clrscr;

write('Enter eps: ');

readln(eps); clrscr;

for i:=1 to n do

begin

for j:=1 to n do

read(F,a[i,j]);

read(F,b[i])

end;

close(F);

Writeln(' Information recived ');readln;clrscr;

writeln('Recived information:');

for i:=1 to n do begin

for j:=1 to n do

write(' a[',i,j,']=',a[i,j]:7:4);

write(' b[',i,']=',b[i]:7:4);

writeln; end;readln;

decomp(n,a,ip,jp,eps,det,ifsolve);

writeln('Processed information:');

writeln(' det = ',det:7:5);

if ifsolve=true then begin

solve(n,a,ip,jp,b);

Writeln('LU:');

for i:=1 to n do

begin

for j:=1 to n do

write(' d[',i,j,']=',a[i,j]:7:4); writeln; end; writeln;writeln;writeln('Solve:');

for i:=1 to n do write(' B[',i,'] = ',b[i]:7:5);

end

else writeln('Error: LU result imposible ');

writeln;

readln;

end.

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