ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Програма NormMatr знаходження різних норм матриці

program NormMatr;

{ВХІД: NormMatr.inp -- текстовий файл, наприклад:

----------------- початок -------------------

5

--------------------- кінець -------------------

де 5 – розміри матриці, далі за рядками – елементи матриці через прогалину.

ВИХІД: NormMatr.out -- текстовий файл, наприклад:

----------------------- початок ----------------------------

матриця:

Норма максимума (m-норма) = 3.50000000000000Е+0001 (35.00000)

Квадратична норма (k-норма) = 2.71661554144122Е+0001 (27.16616)

Інтегральна норма (l-норма) = 3.10000000000000Е+0001 (31.00000)

------------------------ кінець -------------------------------}

const _N=10;

type Matr= array [1.._N,1.._N] of real;

var i, j,n: integer;a: matr;norm,sum: real; finp,fout:text;

BEGIN {NormMatr} writeln(‘Start NormMatr’);

assign(fout,’NormMatr.out’); rewrite(fout);

assign(finp,’NormMatr.inp’);reset(finp);

for i:=1 to n do begin

for j:=1 to n do read(finp,a[i,j]);readln(finp);

end;

close(finp); writeln(fout,’матриця:’);

for i:=1 to n do begin

for j:=1 to n do write(fout,’ ‘, a[i,j]); writeln(fout);

end;

norm:=0; {П і д р а х у в а н н я m – н о р м и }

for i:=1 to n do

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

if norm<sum then norm:=sum;

end;

writeln (fout,’Норма максимума (m – норма) = ‘,norm,

‘ (‘,norm:8:5,’)’);

norm:=0; { П і д р а х у в а н н я k – н о р м и }

for i:=1 to n do for j:=1 to n do

norm:=norm+sqr(a[i,j]); norm:=sqrt(norm);

writeln(fout,’квадратична норма (k – норма) = ‘,norm,

‘ (‘,norm:8:5,’)’);

norm:=0; {П і д р а х у в а н н я l – н о р м и }

for j:=1 to n do begin

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

if norm<sum then norm:=sum;

end;

writeln(fout,’інтегральна норма (l – норма) =’,norm,

‘ (‘,norm:8:5,’)’);

close(fout);

write(‘Finish NormMatr. Press any key.’); readln;

END. {NormMatr}

Процедура G3V33L4

Program G3V33L4;{$M 65520,0,645500}{$N+}{$E+}

{ВХIД: G3V33L4.inp - текстовий вихідний файл

з розширеною матрицею СЛР:

n m All Dec

a11 a12 ... a1n b11 b12 ... b1m

... ... ... ... ... ... ... ...

an1 an2 ... ann bn1 bn2 ... bnm

де n - число рiвнянь (= невiдомих) СЛР

m - число компонент векторiв у правих частинах СЛР

All - загальне число позицій для виведення числа,

Dec - кількість знаків після коми. Наприклад,

________ початок __________

5 1 3 0

0 8 1 2 -3 -1

-8 -9 9 0 9 -1

-5 -2 3 -1 0 -3

-9 5 -8 7 -6 33

1 -7 2 2 0 -1

_________ кінець ___________

ВИХIД: G3V33L4.out --- текстовий результуючий файл. Наприклад,

Start G3V33L4

Groop БIТ-3-09 Yablonska Olena

Variant 33 02.10.2009

n=5 m=1 All=3 Dec=0

0 8 1 2 -3 | -1

-8 -9 9 0 9 | -1

-5 -2 3 -1 0 | -3

-9 5 -8 7 -6 | 33

1 -7 2 2 0 | -1

det=28557

Answer:

x1=[ -1]

x2=[ 0]

x3=[ -2]

x4=[ 2]

x5=[ 1]

Finish G3V33L4}

uses GausRows;

var i,j,k,

n, {число рiвнянь (= невiдомих) СЛР}

m, {число компонент векторiв у правих частинах СЛР}

d {промiжнi заокруглення -- до d знакiв пiсля коми}

: integer;

A, {головна матриця СЛР}

B, {матриця з компонентами векторiв правих частин}

X {(векторна) вiдповiдь СЛР (при det<>0)}

: TMatr;

det {визначник головноi матрицi СЛР}

: extended;

S

: string;

finp, {вихiдний файл}

fout {результуючий файл}

: Text;

begin {G3V33L4}

Assign(fout,'G3V33L4.out'); rewrite(fout);

write(fout,'Start G3V33L4');

writeln(fout);write(fout,'Groop БIТ-3-09', ' Yablonska Olena');

writeln(fout);write(fout,'Variant 33 02.10.2009 ');

Assign(finp,'G3V33L4.inp'); reset(finp);

read(finp,n,m,All,Dec);

for j:=1 to n do

begin {введення коефiцiентiв j-го рIвняння СЛР}

readln(finp);

for k:=1 to n do read(finp,a[j,k]);

for k:=1 to m do read(finp,b[j,k]);

end; {введення коефiцiентiв j-го рIвняння СЛР}

Close(finp);

GaussRow(n,m,d,A,B,X,det); S:='';

printSLY(fout,n,m,A,B,X,det,All,Dec,S);

writeln(fout);write(fout,'Finish G3V33L4'); Close(fout);

end.{G3V33L4}

Модуль GaussRow

unit GausRows;{$M 65520,0,645500}{$N+}{$E+}

{Розв'язання СЛР (метод Гауса з використанням головного елемента у стовпцi}

INTERFACE {GausRows}

const

_n = 10; {Максiмальне число рiвнянь (невiдомих)}

type

TMatr = array[1.._n,1.._n] of Extended; {квадратна матрiця}

var d, {заокруглення до d знакiв пiсля коми}

All,Dec{формат виведення элементiв матрицi}

: integer;

{виведення СЛР у результуючий файл}

procedure printSLY(

var f:text; {результуючий файл}

n:integer; {число рiвнянь (=число невiдомих)}

m:integer; {розмiрнiсть векторiв правiй частинi системи}

A:TMatr; {головна матриця системи лiнiйних рiвнянь}

B:TMatr; {матриця з компонентами векторiв правих частей}

X:TMatr; {матриця з компонентами векторiв правих частей}

var det:extended; {визначник головноi матрицi СЛР}

All,Dec:integer;{формат виведення элементiв матрицi}

S:string {рядок з назвою для виведення}

);

{метод Гауса розв'язання СЛР з виделенням головного елемента у стовпцi}

procedure GaussRow(

n:integer; {число рiвнянь (= невiдомих) СЛР}

m:integer; {число компонент векторiв у правих частинах СЛР}

d:integer; {промiжнi заокруглення -- до d знакiв пiсля коми}

A:TMatr; {головна матриця СЛР}

B:TMatr; {матриця з компонентами векторiв правих частин}

var X:TMatr; {(векторна) вiдповiдь СЛР (при det<>0)}

var det:extended {визначник головноi матрицi СЛР}

);

IMPLEMENTATION {GausRows}

{заокруглення чисел до d десяткових знакiв пiсля коми}

function RoundDec(X:extended;d:integer):extended;

var i:integer; y:extended;

begin {RoundDec}

Y:=X;

if d>0

then begin

for i:=1 to d do Y:=Y*10; Y:=Round(Y); for i:=1 to d do Y:=Y/10;

end;

RoundDec:=Y;

end; {RoundDec}

{виведення СЛР у результуючий файл}

procedure printSLY(

var f:text; {результуючий файл}

n:integer; {число рiвнянь (=число невiдомих)}

m:integer; {розмiрнiсть векторiв правiй частинi системи}

A:TMatr; {головна матриця системи лiнiйних рiвнянь}

B:TMatr; {матриця з компонентами векторiв правих частей}

X:TMatr; {матриця з компонентами векторiв правих частей}

var det:extended; {визначник головноi матрицi СЛР}

All,Dec:integer;{формат виведення элементiв матрицi}

S:string {рядок з назвою для виведення}

);

var j,k:integer;

begin {printSLY}

if S<>'' then begin writeln(f);write(f,S); end;

writeln(f);write(f,' n=',n:1,' m=',m:1,' All=',All:1,' Dec=',Dec:1);

for k:=1 to n do

begin {виведення коефiцiентiв k-го рiвняння СЛР}

writeln(f);

{вывод k-го рядка матрицы A}

for j:=1 to n do write(f,' ',a[k,j]:All:Dec); write(f,' | ');

{вывод k-го рядка матрицы B}

for j:=1 to m do write(f,' ',b[k,j]:All:Dec);

end; {виведення коефiцiентiв k-го рiвняння СЛР}

writeln(f);write(f,'det=',det:All:Dec);

if det<>0

then begin {det<>0}

writeln(f);write(f,' Answer:');

for k:=1 to n do

begin {виведення k-го компонента розвязку СЛР}

writeln(f);;write(f,' x',k:1,'=[');

for j:=1 to m do write(f,' ',x[k,j]:All:Dec);write(f,']');

end; {виведення k-го компонента розвязку СЛР}

end; {det<>0}

end; {printSLY}

{метод Гауса розв'язання СЛР з виделенням головного елемента у стовпцi}

procedure GaussRow(

n:integer; {число рiвнянь (= невiдомих) СЛЗР}

m:integer; {число компонент векторiв у правих частинах СЛР}

d:integer; {промiжнi заокруглення -- до d знакiв пiсля коми}

A:TMatr; {головна матриця СЛР}

B:TMatr; {матриця з компонентами векторiв правих частин}

var X:TMatr; {(векторна) вiдповiдь СЛР (при det<>0)}

var det:extended {визначник головноi матрицi СЛР});

var

OK:boolean; {ознака знаходження ро'звязку СЛР}

j,k,j1,j2:integer;

b1:extended;

begin {GaussRow} det:=1;

if (n<1)or(n>_n)or(m>_n) then OK:=false else OK:=true;

if not OK then begin

writeln;write('GaussRow>ОШ: n=',n:1,' m=',m:1,' Max_n=',_n);

end;

{ п р я м и й х i д }

j:=0;

while ((j<n)and OK) do

begin {обробка j-го рядка, який е замороженим}

j:=j+1;

{пошук головного елемента з iндексами j1,j}

j1:=0; b1:=0;

for j2:=j to n do

if abs(a[j2,j])>abs(b1) then begin j1:=j2;b1:=a[j1,j]; end;

if j1=0 then begin OK:=false;end;

if OK then begin {if OK}

{переставлення рядків j1 та j}

for k:=1 to n do begin b1:=a[j,k];a[j,k]:=a[j1,k];a[j1,k]:=b1; end;

for k:=1 to m do begin b1:=b[j,k];b[j,k]:=b[j1,k];b[j1,k]:=b1; end;

if (j1<>j) then det:=-det;

{ділення на a[j,j]}

b1:=a[j,j]; det:=det*b1;

for k:=1 to n do a[j,k]:=RoundDec(a[j,k]/b1,d);

for k:=1 to m do b[j,k]:=RoundDec(b[j,k]/b1,d);

{ занесення нулів до елементів "під" в j стовпці}

for j1:=j+1 to n do

begin { занесення нулів в рядку j1}

b1:=a[j1,j];

for k:=1 to n do a[j1,k]:=RoundDec(a[j1,k]-b1*a[j,k],d);

for k:=1 to m do b[j1,k]:=RoundDec(b[j1,k]-b1*b[j,k],d);

end; { занесення нулів в рядку j1}

end; {if OK}

end; {обробка j-го рядка, який е замороженим}

if OK then begin {if OK}

{ о б е р н е н и й х і д }

for j:=n downto 1 do begin

{ занесення нулів до елементів "над" в j рядку}

for j1:=j-1 downto 1 do

begin { занесення нулів в рядку j1}

b1:=a[j1,j];

for k:=1 to n do a[j1,k]:=RoundDec(a[j1,k]-b1*a[j,k],d);

for k:=1 to m do b[j1,k]:=RoundDec(b[j1,k]-b1*b[j,k],d);

end; {занесення нулів в рядку j1}

end;

{формування розв'язку}

for j:=1 to n do for k:=1 to m do x[j,k]:=b[j,k];

end; {if OK}

if not OK then det:=0;

end; {GaussRow}

END. {GaussRows}

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти