- •Математичні моделі в сапр: методичні вказівки до лабораторних робіт
- •Передмова до методичних вказівок
- •1.Лабораторна робота EvalExpr на тему "Знаходження похибок обчислень"
- •Теоретичні питання.
- •Приклад виконання роботи EvalExpr
- •Варіанти індивідуальних завдань до роботи EvalExpr
- •2.Лабораторна робота DetKram на тему “Розв’язання слр за формулами Крамера”
- •Теоретичні питання
- •Приклад виконання роботи DetKram
- •Варіанти індивідуальних завдань до роботи DetKram
- •Допоміжні матеріали до роботи DetKram Інструкція користувачу до додатку InteractiveDet
- •Приклад змісту вхідного файла Det.Inp:
- •Вихідні файли програми.
- •Натискання клавіші “Введення з файлу”.
- •Натискання клавіші “Зменшити у рядку”.
- •Натискання клавіші “Зменшити у стовпці”.
- •Натискання клавіші “Зменшити розміри”.
- •Завершення роботи додатку.
- •3.Лабораторна робота InvMatr на тему “Розв’язання слр за методом оберненої матриці”
- •Теоретичні питання
- •Приклад виконання роботи InvMatr
- •Варіанти індивідуальних завдань до роботи InvMatr
- •Допоміжні матеріали до роботи InvMatr Програма AdjMatr
- •Інструкція користувачу до додатку InteractiveAdjMatr
- •4.Лабораторна робота Gauss на тему „Наближене розв`язання слр методами виключення невідомих”
- •Теоретичні питання
- •Приклад виконання роботи Gauss
- •2В. Обчислення компонент вектора нев’язки.
- •3A. Знаходження наближеної оберненої матриці за методом Гауса.
- •3B. Знаходження компонент наближеного розв’язку .
- •3C. Знаходження компонент вектору нев’язки
- •5. Знаходження міри обумовленості головної матриці системи.
- •Варіанти індивідуальних завдань до роботи Gauss
- •Додаткові матеріали до роботи Gauss Програма NormVect знаходження різних норм вектора
- •Програма NormMatr знаходження різних норм матриці
- •Процедура g3v33l4
- •Модуль GaussRow
- •Iнструкцiя користувачу до програми InteractiveGauss
- •5.Лабораторна робота LinSysIt на тему “Ітераційні методи розв’язання слр”
- •Теоретичні питання
- •Приклад виконання роботи LinSysIt
- •Варіанти індивідуальних завдань до роботи LinSysIt
- •Допоміжні матеріали до роботи LinSysIt Програма NormForm
- •Програма SysIter
- •Програма Zeidel
- •6.Лабораторна робота TransEq на тему "Розв'язання трансцендентних рівнянь з одним невідомим"
- •Теоретичні питання
- •Приклад виконання роботи TransEq
- •Розрахункова таблиця знаходження кореня
- •Розрахункова таблиця знаходження кореня
- •Розрахункова таблиця знаходження кореня
- •Уточнення відокремленого кореня за методом простих ітерацій.
- •Розрахункова таблиця знаходження кореня рівняння за методом простих ітерацій
- •Розрахункова таблиця знаходження кореня рівняння за методом простих ітерацій
- •Варіанти індивідуальних завдань до роботи TransEq
- •Додаткові матеріали до роботи TransEq Інструкція користувачу для роботи з додатком TranscEq
- •Робота з додатком TranscEq
- •7.Лабораторна робота NonLinSys на тему „Розв’язання систем нелінійних рівнянь”
- •Теоретичні питання
- •Приклад виконання роботи NonLinSys
- •Розрахункова таблиця знаходження роз'вязку
- •Варіанти індивідуальних завдань до роботи NonLinSys
- •Допоміжні матеріали до роботи NonLinSys Інструкція користувачу для роботи з програмою Newton2
- •Текст програми Newton2
- •Текст модуля Funct
- •Текст модуля NewtonS
- •8.Лабораторна робота SelfEq на тему ”Знаходження характеристичного рівняння”
- •Теоретичні питання
- •Приклад виконання роботи SelfEq
- •Варіанти індивідуальних завдань до роботи SelfEq
- •9.Лабораторна робота SelfVect на тему “Знаходження власних векторів”
- •Теоретичні питання.
- •Приклад виконання роботи SelfVect
- •Варіанти індивідуальних завдань до роботи SelfVect
- •Література
Процедура 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}