.

Лабораторные работы по вычислительной математике

Язык: русский
Формат: реферат
Тип документа: Word Doc
73 500
Скачать документ

ЛАБОРАТОРНАЯ РАБОТА №9 «Методы решения систем линейных уравнений ».

Студента группы ПВ-22 Малютина Максима.

Задание. Методом Зейделя решить систему линейных уравнений с точностью
до 0,001.

Система :

Для решения системы уравнений методом Зейделя необходимо выполнения
условия диагонального преобладания, после приведения к данному виду
система имеет вид:

Воспользуемся разложением матрицы А на В и С вида:

Далее найдем решение приближенное решение уравнения следующим способом:
Правило остановки:

Из норм матрицы В выбирается меньшая, нормы вектора и матрицы
согласованны между собой. При вычислении приближения следующей
координаты используются более точные значения предыдущих координат
текущего приближения.

const size=10;

type vector=array[1..size] of real;

matrix=array[1..size] of vector;

norma=function(a:matrix;n:byte):real;

norma_v=function(a:vector;n:byte):real;

Procedure InputVector(var a:vector;n:byte);

var i:byte;

begin

for i:=1 to n do

begin

writeln(‘Введите ‘,i,’-ый элемент ‘);

readln(a[i]);

end;

end;

Procedure InputMatrix(var a:matrix;n:byte);

var i:byte;

begin

for i:=1 to n do

begin

writeln(‘Введите ‘,i,’-ую строку матрицы ‘);

InputVector(a[i],n)

end;

end;

Procedure OutputVector(var a:vector;n:byte);

var i:byte;

begin

for i:=1 to n do write(a[i]:10:5);

writeln

end;

Procedure OutputMatrix(var a:matrix;n:byte);

var i:byte;

begin

for i:=1 to n do outputvector(a[i],n)

end;

Procedure GetB(var b:matrix;a:matrix;n:byte);

var i,j:byte;

s:real;

begin

for i:=1 to n do

for j:=1 to n do

if ij then b[i,j]:=-a[i,j]/a[i,i]

else b[i,j]:=0;

end;

Procedure GetC(var c:vector;h:vector;n:byte;a:matrix);

var i:byte;

begin

for i:=1 to n do c[i]:=h[i]/a[i,i]

end;

Function Norma_1v(a:vector;n:byte):real;

var i:byte;

s:real;

begin

s:=a[1];

for i:=2 to n do if abs(a[i])>s then s:=abs(a[i]);

norma_1v:=s

end;

Function Norma_8v(a:vector;n:byte):real;

var i:byte;

s:real;

begin

s:=0;

for i:=1 to n do s:=s+abs(a[i]);

norma_8v:=s

end;

Function Norma_1(a:matrix;n:byte):real;

var s,norma:real;

i,j:byte;

begin

norma:=0;

for j:=1 to n do

begin

s:=0;

for i:=1 to n do s:=s+abs(a[i,j]);

if s>norma then norma:=s

end;

norma_1:=norma

end;

Function Norma_8(a:matrix;n:byte):real;

var s,norma:real;

i,j:byte;

begin

norma:=0;

for i:=1 to n do

begin

s:=0;

for j:=1 to n do

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

if s>norma then norma:=s

end;

norma_8:=norma

end;

procedure MulMatrix(a:matrix;ma,na:byte;b:matrix;mb,nb:byte;var
c:matrix;var mc,nc:byte);

var i,j,k:byte;

s:real;

begin

if na=nb then

begin

mc:=ma;

nc:=nb;

for k:=1 to mc do

for j:=1 to nc do

begin

s:=0;

for i:=1 to nc do

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

c[k,j]:=s

end;

end

else

begin

writeln(‘Неверные размеры матриц !!! ‘);

halt

end;

end;

Procedure SubMatr(a:matrix;var b:matrix;n:byte);

var i,j:byte;

begin

for i:=1 to n do

for j:=1 to n do b[i,j]:=a[i,j]-b[i,j]

end;

procedure MulVector(a:matrix;ma,na:byte;b:vector;nb:byte;var
c:vector;var nc:byte);

var i,j:byte;

s:real;

begin

if na=nb then

begin?††?????††??????????†††????††††????††††???????????????????††††?????
†††???††??†††???†††???

writeln(‘Неверные размеры !!! ‘);

halt

end;

end;

procedure MulVectorZ(a:matrix;n:byte;var b:vector);

var i,j:byte;

s:real;

begin

for i:=1 to n do

begin

s:=0;

for j:=1 to n do

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

b[i]:=s;

end;

end;

Procedure SubVect(a,b:vector;var c:vector;n:byte);

var i:byte;

begin

for i:=1 to n do c[i]:=b[i]-a[i]

end;

Procedure AddVect(a:vector;var b:vector;n:byte);

var i:byte;

begin

for i:=1 to n do b[i]:=b[i]+a[i]

end;

var a,b,bn?????†???????????†??????†??????†??????††??????????

writeln(‘Введите размерность матрицы коэффициентов ‘);readln(n);

writeln(‘Введите элементы матрицы коэффициентов ‘);

InputMatrix(a,n);

writeln(‘Введите вектор свободных членов H ‘);

InputVector(h,n);

writeln(‘Введите заданныю точность ‘);

readln(eps);

GetB(b,a,n);

GetC(c,h,n,a);

writeln(‘Матрица B: ‘);

OutputMatrix(b,n);

writeln(‘Вектор C: ‘);

OutputVector(c,n);

readln;

if (norma_1(b,n)0) then

begin

nor:=norma_1;

norv:=norma_1v

end

else

begin

nor:=norma_8;

norv:=norma_8v

end;

eps:=eps*(1-nor(b,n))/nor(b,n);

for i:=1 to n do x[i]:=1;

MulVectorZ(b,n,x);

AddVect(c,x,n);

xn:=x;

MulVectorZ(b,n,xn);

AddVect(c,xn,n);

subvect(x,xn,xr,n);

while norv(xr,n)>eps do

begin

x:=xn;

MulVectorZ(b,n,xn);

AddVect(c,xn,n);

subvect(x,xn,xr,n)

end;

writeln(‘Значения X ‘);

OutputVector(x,n);

MulVector(a,n,n,x,n,c,n);

writeln(‘Проверка ‘);

OutputVector(c,n);

end.

Результат работы программы:

Матрица B:

0.00000 0.06250 -0.11458

-0.34375 0.00000 -0.26563

-0.45946 -0.32432 0.00000

Вектор C:

-0.08333 1.26563 0.25676

Значения X

0.01836 1.30590 -0.17513

Проверка

-0.79990 8.10045 1.90065

Нашли опечатку? Выделите и нажмите CTRL+Enter

Похожие документы
Обсуждение

Ответить

Курсовые, Дипломы, Рефераты на заказ в кратчайшие сроки
Заказать реферат!
UkrReferat.com. Всі права захищені. 2000-2020