- •Математичні моделі в сапр: методичні вказівки до лабораторних робіт
- •Передмова до методичних вказівок
- •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
- •Література
Програма SysIter
program SysIter; {$N+} {$E+} { розв’язання СЛР за методом простих ітерацій
ВХІД : SysIter.inp --- текстовий вихідний файл з СЛР. Наприклад,
--------------------- початок ------------------------
4 1.0e-3 8 5
0.00 -1.15 0.20 -0.35 0.40 0.00
0.12 0.00 0.36 -0.15 0.40 0.00
0.36 -0.24 0.00 0.20 -0.12 0.00
-0.40 0.15 -0.25 0.00 0.85 0.00
---------------------------------------------------------
де 4 – розмір матриці В , 1.0е-3 - точність підрахунків , 8 – число всіх позіцій для виведення числа , 5 – число цифр після коми
ВИХІД: SysIter.out --- текстовий результуючий файлЇ
const _N=10 ; {1 = норма , 2=k- норма , 3 = 1 норма}
type TVect = array [ 1.._N] of extendet ;
TMatr = array [1.._N,1.._N] of extendet ;
{індекс у TNorm : 1=m- норма,2=k- норма ,3=k- норма }
TNorm = array [1..3] of extendet ;
Var Stop, Step : Boolean;
i,j,k,n,NN,All,Dec : integer;
All_Iter, { Загальне число ітерацій}
NIter: longint; {Номер поточної ітерації}
eps, {Точність підрахунків}
q, {Коефіцієнт стиску}
delta:extendet; {граничній крок для зупинки}
norm: TNorm;
NameInp,NameOut, {Імена вхідного, вихідного файлів}
answer: string;
a: TMatr; {матриця B ітераційної схеми}
b, {вектор d ітераційної схеми}
XtempOld, {старий поточний вектор}
Xtemp: TVect; {новий поточний вектор}
finp,fout:text; {вхідний та вихідний файли}
procedure VectNorms (n : integer ; v: TVect ; var norm:TNorm) ;
var j,k : integer ;sum :extendet ;
BEGIN {VectNorms}
norm[1] :=abs (v[1]) ; {m - норма}
for i :=1 to n do
if norm[1]<abs ( v [ i ] ) then norm [1] :=abs ( v [ i ] );
norm [2]=0; {k - норма}
for i :=1 to n do norm[2] :=norm[2] + sqr(v[i]);
norm[2] :=sqrt(norm [2] );
norm[3]:=0; {l - норма}
for i :=1 to n do norm [3] :=[3] + abs (v[i]) ;
END; {VectNorms}
procedure MatrNorms (n,m : integer ; A : TMatr ; var norm : TNorm) ;
var j , k : integer ; sum : extendet ;
BEGIN {MatrNorms}
norm[1] :=0; {m - норма}
for i :=1 to n do
begin sum:=0; for j:=1 to m do sum:=sum + abs( a [ i , j ] ) ;
if norm[1]<sum then norm[1] : =sum;
end ;
norm[2] :=0 ; {k - норма}
for i:=1 to n do for j:= to m do
norm[2] : =norm [2] + sqr( a[ i , j ]);
norm[2] : =sqrt (norm[2]) ;
norm[3] : =0 ; {l - норма}
for j : = to m do
begin sum : = 0 ; for i : = to n do sum := sum + abs ( a [ i , j ] ) ;
if norm[3]<sum then norm[3] : =sum ;
end;
END; {MatrNorms}
procedure PrintIter (Niter : integer ; : integer ;
X : TVect ; All , Dec : integer ; var f : text ) ;
var j , k : integer ;
BEGIN {PrinIter}
writeln ( f ) ; weite (f , ‘ x [‘ , Niter : 2 , ‘ ] = { ‘ ) ;
for k : =1 to n – 1 do write ( f , x [ k ] : All : Dec , ‘ , ‘ );
write ( f , x [ k] : All : Dec , ‘ } ‘ ) ;
END; { PrintIter}
procedure NextIter ( n : integer ; A : TMatr ; b :TVect ;
var X: TVect ) ;
var j , k : integer ; Xold : TVect ;
BEGIN { NextIter } Xold : = X ;
for j : = 1 to n do
begin x[ j ] : = b [ j ];
for k:=1 to n do x[j]:=x[j]+a[j,k]*xold[k];
end;
END;{NextIter}
BEGIN {Sysiter}
All_Iter:=0;writeln(‘Start Sysiter’);
Repeat write(‘Зупинка за кроком (у/n)?=’);
Readln(answer);if answer=‘’then answer:=‘y’;
If answer=‘y’ then Step:=true else Step:=false;
Until(answer=‘y’)or(answer=‘n’);
Write (‘Iм’я вхідного файла=‘);readln(answer);
If Length(answer)>0
Then NameInp:=answer else Nameinp:=‘Sysiter.inp’;
Write(‘Iм’я вхідного файла=‘);readln(answer);
If Length(answer)>0
Then NameOut:=answer else NameOut:=‘Sysiter.out’;
Assign(fout,NameOut);rewrite(fout);
Assign(finp,NameInp);reset(finp);
Readln(finp,n,eps,All,Dec);
Writeln;write(n,’ ‘,eps,’ ‘,All:1,’ ‘,Dec:1);
Writeln(fout);write(fout, n,’ ‘,eps,’ ‘,All:1,’ ‘,Dec:1);
If ((n<1)or(n>_N)or(eps<=0))
Then begin{(n<1)or(n>_N)or(eps<=0)}
Writeln(fout,’Eror: n=‘,n:1);
End {(n<1)or(n>_N)or(eps<=0)}
Else begin {(1<=n<=_N)and (eps>0)}
For I:=1 to n do
Begin
For J:=1 to n do begin read (finp,a[I,j]);
Write(fout,’ ‘,a [I,j]:All:Dec);
end;
readln(finp,b[i],xtemp[i]);
writeln(fout,' ',b[i]:All:Dec,' ',Xtemp[i]:All:Dec);
end;
close(fnip);writeln('Матриця В:');
for i:=1 to n do begin
for j:=1 to n do write (' ',[i,j]:All:Dec);
writeln;
end;
writeln;write('Вектор d':');
for i:=1 to n do write(' ',Xtemp[i]:All:dec);
writeln;writeln(fout,'Матриця В:')ж
For i:=1 to n do
begin for j:=1 to n do
write(fout,' ',a[i,j]:All:Dec);
writeln(fout);
end;
writeln(fout);write (fout);write(fout,'Вектор d':');
for i:=1 to n do
write(fout,' ',b[i]:All:Dec);
writeln(fout);write(fout,'x[0]:');
for i:=1 to n do
write(' ',Xtemp[i]:All:Dec);
writeln;writeln(fout,'Матриця B:');
for i:=1 to n do
begin for j:=1 to n do
write(fout,' ',a[i,j]:All:Dec);
write(fout);
end
writeln(fout);write(fout,' ',Вектор d:');
for i:=1 to n do
write(fout,' ',b[i]:All:Dec);
writeln(fout);write(fout,'[0]:');
for i:=1 to n do
write(fout,' ',Xtemp[i]:All:Dec);
MatrNorms(n,n,A,norm);q:=norm[1];NN:=1
For i:=1 to 3 do
if q>norm[i] then begin q:=norm[i];NN:=i;end;
if q>=1
then begin
writeln(fout);write(fout,'q=',q:All:Dec,'>=1')close(fout);
writeln;write('q=',q:All:Dec,'>=1');readln;halt;
end;
VectNorms(n,b,norm);
if Step then begin delta:=eps*(1-q);
writeln;
write('Зупинка обчислень за кроком=',delta:All:Dec);
writeln(fout);
write(fout,'Зупинка обчислень за кроком=',delta:All:Dec);
end
else begin
All_Iter:=Round(In((eps*(1-q))/(norm[NN]))/In(q))+1;
writeln;
write('Зупинка обчислень за числом iтерацiй=',All_Iter:1);
writeln(fout); write(fout,
'Зупинка обчислень за числом iтерацiй=',All_Iter:1);
end;
if Step then begin {YesStep}
Niter:=0;Stop:=false;
while not Stop do
Begin {while not Stop}
Niter:=Niter+1;XtempOld:=Xtemp;
Ne[tIter(n,A,b,Xtemp);
PrintIter(Niter,n,xtemp,All,Dec,fout);
for i:=1 to n do
XtempOld[i]:=Xtemp[i]-XtempOld[i];
VectNorms(n,XtempOld,norm);
if norm[NN]<Delta then Stop:=true
end;{while not Stop}
end {Step}
else begine {not Stop}
for Niter:=0 to All_Iter do begin
NextIter(n,A,b,Xtemp);
PrintIter( Niter,n,Xtemp,All,Dec,fout )
end;
end; {not Step}
end; {(1<=n<=_N)and(eps>0)}
writeln;
if Step then write(‘x[‘,NIter:1,’]={‘)
else write(‘x[‘,All_Iter:1,’]={‘);
for i:=1 to n do
write(‘ ‘,Xtemp[i]:All:Dec);write(‘}’);
close(fout);
writeln;write (‘Finish SysIter’); readln;
END. {SysIter}