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


Висновки до лабораторної роботи.

1. Ітераційні методи можна застосовувати не до всіх СЛР, а тільки до лінійних систем, яки можна звести до виду , де матриця В має хоча б одну підлеглу норму меншу одиниці .

2. При зупинці за числом ітерацій потрібна точність звичайно досягається раніше вказаного числа ітерацій.

3. Умови збіжності ітераційного процесу за методом Зейделя інші ніж у метода простих ітерацій, тобто області збіжності методів простої ітерації і Зейделя лише перетинаються. Але, як це доведено у книзі [9, стор.320-328] при виконанні умови для деякої підлеглої норми матриці B процес ітерацій за методом Зейделя є завжди збіжним. Наприклад, для m-норм (норми ) метод Зейделя є збіжним зі швидкістю геометричної прогресії з коефіцієнтом .

Варіанти індивідуальних завдань до роботи LinSysIt

2.
3. 4.
5. 6.
7. 8.
9. 10.
11. 12.
13. 14.
15. 16.
17. 18.
19. 20.
21. 22.
23. 24.
25. 26.
27. 28.
29. 30.
31. 32.
33. 34.
35. 36.
37. 38.
39. 40.
41. 42.
43. 44.
46.
47. 48.
49. 50.
51. 52.
53. 54.
55. 56.
57. 58.
59. 60.
61. 62.
63. 64.
65. 66.
67. 68.
69. 70.
71. 72.
73. 74.
75. 76.
77. 78.
79. 80.
81. 82.
83. 84.
85. 86.
87. 88.
89. 90.
91. 92.
93. 94.
95. 96.
97. 98.
99. 100.

Допоміжні матеріали до роботи LinSysIt

Програма NormForm

program NormForm; {$N+}{$E+} {Зведення СЛР до нормального виду за методом діагонального ділення

ВХІД: NormForm.inp -- текстовийвихідний файл з СЛР. Наприклад,

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

4 число невідомих (рівнянь)

20 3 -4 7 8 рядок 1 матриці A + b[1]

-3 25 -9 -1 -3 рядок 2 матриці A + b[2]

-9 6 25 -5 -3 рядок 3 матриці A + b[3]

8 -3 5 20 17 рядок 4 матриці A + b[4]

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

ВИХІД: NormForm.out -- текстовий результуючий файл}

const _N=10;

type vect= array [1…N] of extended;

matr= array [1…_N,1…_N] of extended;

var i, j, k, n: integer; save : extended;

NameInp, NameOut, answer : string;

a : matr; b, c : vect; finp, fout : text;

BEGIN {NormForm} writelen(‘Start NormForm’);

NameInp:=’NormForm:inp’ ; NameOut:=’NormForm:out’;

assign (fout, NameOut); rewrite (fout);

assign (flip, NameInp); reset (finp); readln (finp,n);

if (n<1)or(n>_N)

then writeln (four,’Error: n=’,n:1)

else begin {(1<=n<=_N)}

for i:=1 to n do begin

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

read (finp,b[i]); readln (finp);

end;

writeln (fout,’Розширена матриця:’);

for i:=1 to n do begin

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

write (fout,’’,b[i]:10:5); writeln (fout);

end;

{п е р е т в о р е н н я с и с т е м и}

for j:=1 to n do

begin save:=a[j,i];

if save=0 then begin

write (‘a[‘,j:1,’.’j:1,’]=0’); readln; halt;

end;

for k:=1 to n do a[j,k]:=-a[j,k]/save;

b[j]:=b[j]/save: a[j,j]:=0;

end;

writeln(fout,’Матриця B: ’);

for i : =1 to n do begion

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

writeln (fout) ;

end ;

writeln ( fout , ‘ Вектор b = ‘ ) ; write ( fout , ‘ { ‘ ) ;

for i : = to n do write ( fout , ‘ ‘ , b[ i ] :8 : 5) ;

writeln (fout , ‘ } ‘ ) ;

end ; { (1 < = n<=_N ) }

close ( finp) ; close (fout) ;write (‘ Finish NormForm ‘) ; readln ;

END. {NormForm}

Програма 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}

Програма Zeidel

program Zeidel; {$N+} {$E+} {Розв’язання СЛР x=Bx+d за методом Зейделя

ВХІД: Zeidel.inp --- текстовий вихідний файл з СЛР. Наприклад,

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

4 1.0e-3 8 5

0.00 -0.15 0.20 -0.35 0.40 0.00

0.12 0.00 0.36 0.04 -0.12 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 – розмір матриці A, 1.0e-3 – точність підрахунків, 8 – число всіх цифр, 5 – число цифр після коми.

ВИХІД: Zeidel.out --- текстовий фай з результатами}

const _N=10; NamePrg=’Zeidel’;

type TVect = array [1.._N] of extended;

TMatr = array [1.._N,1.._N] of extended;

{індекс y TNorm: 1=m-норма,2=k-норма,3=1-норма}

TNorm = array [1..3] of extended;

var Stop, Step: boolean;

i,j,k,n,All,Dec: integer;

All_Iter, {Загальне число ітерацій}

NIter: longint; {Номер поточної ітерації}

eps, {Точність підрахунків}

qq, {коефіцієнт стиску}

delta: extended; {граничний крок для зупинки}

NameInp,NameOut,{Імена вхідного,вихідного файлів}

answer: string;

a: TMatr; {матриця B ітераційної схеми}

b, {вектор d ітераційної схеми}

XtempOld, {старий поточний вектор}

Xtemp: TVect; {новий поточний вектор}

finm,fout:text; {вхідний та вихідний файли}

procedure VectNorms(n:integer;v:TVect;var norm:TNorm);

var j,k:integer; sum:extended;

BEGIN {VectNorms}

norm[1]:=abs(v[1]);

for i:=1 to n do

if norm[1]<abs(v[1]) then norm[1]:=abs(v[1]);

norm[2]:=0;

for i:=1 to n do norm[2]:=norm[2]+sqr(v[i]);

norm[2]:=sqrt(norm[2]);

norm[3]:=0;

for i:=1 to n do norm[3]:=norm[3]+abs(v[i]);

END; {VectNorms}

procedure MatrNorms(n,m:integer;A:TMatr;var norm:TNorm);

var j,k:integer; sum:extended;

BEGIN {MatrNorms}

norm[1]:=0; 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;

for i:=1 to n do for j:=1 to m do norm[2]:=norm[2]+sqr(a[i,j]);

norm[2]:=sqrt(norm[2]); norm[3]:=0;

for j:=1 to m do begin

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

if norm[3]<sum then norm[3]:=sum;

end;

END; {MatrNorms}

function q(n,m:integer;A:TMatr):extended;

var j,k:integer; sum:extended; norm:TNorm;

BEGIN MatrNorms(n,m,A,norm); Q:=norm[1];END;

procedure PrintIter(Niter:integer; n:integer;

X:TVect; All,Dec:integer; var f:text);

var j,k:integer;

BEGIN writeln(f); write(f,’x]’,Niter:2,’ ] = {‘);

for k:=1 to n-1 do write(f,x[k]:All:Dec,’,’);

write(f,x[k]:All:Dec,’}’);

END;

procedure NextZeidelIter(n:integer;A:TMatr;

b:TVect;var X:TVect);

var j , k: integer

BEGIN {NextZeideliter}

for j:=1 to n do begin x[j] :=b[j];

for k:=1 to n do x[j]:=x[j]+a{j,k]*x[k];

end;

END; {NextZeideliter}

BEGIN {Zeidel}

ALL_Iter:=0; writeln (‘Start’ + NamePrg);

repeat write (‘зупинка за кроком (y/n)? =’);

readln (answer); if answer=’’ then answer:=’y’;

if answer=’y’ then Step:=true else Step:=false’

until (answer=’y’) or (answer=’n’);

write ‘ім’я вхідного файла =’); readln (answer);

if Length (answer) >0

then NameInp:=answer else NameInp:=NamePrg+’.inp’;

write (‘ім’я вихідного файла =’); readln (answer);

if Length (answer) >0

then NameOut :=answer else NameOut:=NamePrg+’.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<_N) or (n>_N) or (eps<=0)}

writeln (fout,’Error: n=’,n:1);

end {(n<_N) 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 (finp); writeln; writeln(‘Матриця В:’);

for i:=1 to n do begin

for i:=1 to n do write (‘ ‘,a[i,j]:ALL: Dec);

writeln;

end;

writeln; write (‘Вектор d:’);

for i:=1 to n do write (‘ ‘,b[i]:ALL: Dec);

writeln; write (‘Старт x[0]:’);

for i:=1 to n do write (‘ ‘,XTerm[i]:ALL: Dec);

writeln (fout); writeln (fout,‘Матриця В:’);

for i:=1 to n do begin

for i:=1 to n do

write (fout,’ ‘,a[i,j]:ALL: Dec);

writeln (fout);

end;

writeln (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 (fout,‘ ‘,XTerm[i]:ALL: Dec);

qq:=Q(n,n,A);

if qq>=1 then begin

writeln (fout); write (fout,‘ ,qq:ALL:Dec,’>=1’);

writeln; write (‘ ,qq:ALL:Dec,’>=1’);

repeat writeln; write (‘ Число ітерацій =’);

readln (ALL_Iter);

until (ALL_Iter>0);

writeln (fout);

write (fout,’ Число ітерацій =’, ALL_Iter:1);

if ALL_Iter<=0 then ALL_Iter:=0;

end;

if Step then begin {Step}

delta:=eps*(1/qq-1);

writeln; write (

‘Зупинка обчислень за кроком=’,delta:ALL:Dec);

writeln (fout); write (fout,

‘ Зупинка обчислень за кроком=’,delta:ALL:Dec);

end {Step}

else begin {not Step}

if ALL_Iter<=0 then begin

{‘Знаходження m–норми вектора b’}

VectNorms (n,b,norm);

ALL_Iter:=

Round (ln((eps*(1-qq))/(norm[1]))/ln(qq))+1;

end;

writeln;write (

‘Зупинка обчислень за числом ітерацій =‘,ALL_Iter:1);

writeln (fout);write (fout,

‘Зупинка обчислень за числом ітерацій =‘,ALL_Iter:1);

end; {not Step}

if Step

then begin {YesStep} Niter:=0; Stop:=false;

while not Stop do

begin {while not Stop}

Niter:= Niter+1; XTempOld:=XTemp;

NextZeidelIter (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 [i]<Delta then Stop:=true

end; {while not Stop}

end {Step}

else begin {not Step}

for Niter:=l to All_Iter do

begin NextZeidelIter(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:l, ']={');

for i:=l to n do

write( ',Xtemp[i] :All:Dec) ;write('}') ;

close (fout);

writeln; write ('Finish '+NamePrg) ; readln;

END. {Zeidel}

 

6. Лабораторна робота TransEq на тему "Розв'язання трансцендентних рівнянь з одним невідомим"

Завдання.По-перше, відокремити корінь рівняння , який має найменшу абсолютну величину серед всіх коренів цього рівняння, і знайти цей корінь з точністю за допомогою методів дихотомії, хорд і дотичних.

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

Хід виконання.Для заданих рівнянь і :

1. Графічно відокремити корені рівняння і провести аналітичну перевірку відокремлення цих коренів. Вибрати інтервал з відокремленим коренем, який є найменший за абсолютною величиною.

2. Провести уточнення цього відокремленого кореня на інтервалі рівняння із заданою точністю за допомогою трьох методів: методу дихотомії, методу хорд і методу дотичних (метод Ньютона). Особливу увагу звернути на одержання заданої точності підрахунків. Для кожного кореня скласти та заповнити розрахункову таблицю і навести обчислення, які підтверджують проведені підрахунки.

3. Графічно відокремити корені рівняння і провести аналітичну перевірку відокремлення коренів. Вибрати один з інтервалів з відокремленим коренем.

4. В околі кореня, який відокремлюється, представити рівняння у нормальному ви­гляді для використання у методі простих ітерацій.

5. Знайти функцію таким чином, щоб коефіцієнт стиску . Якщо , то переробити пункти 3-5, таким чином, щоб .

6. Підрахувати число ітерацій для зупинки обчислень за кількістю ітераційних кроків і величину кроку для зупинки за величиною поточного кроку. Обрати момент зупинки метода простих ітерацій.

7. Побудувати ітераційну схему метода простих ітерацій (стартове значення, ітераційний крок, момент зупинки).

8. Скласти та заповнити розрахункову таблицю метода простих ітерацій для уточнення відокремленого кореня.

9. Оформити звіт і захистити лабораторну роботу.

Теоретичні питання

1. Умови існування і єдиності кореня нелінійного рівняння від однієї змінної на заданому інтервалі.

2. Оцінка похибки обчислень для будь-якого ітераційного метода, яка використовує модулі функції ті її похідну.

3. Метод дихотомії (ділення навпіл). Умови використання методу дихотомії. Знаходже­ння похибки підрахунків кореня за методом дихотомії.

4. Метод хорд. Умови використання методу хорд. Знаходження похибки підрахунків кореня. Ітераційна схема метода хорд (вибір стартового значення, ітераційний крок, момент зупинки підрахунків).

5. Метод дотичних (метод Ньютона). Умови використання методу дотичних. Знаходже­ння похибки підрахунків кореня. Ітераційна схема метода дотичних.

6. Нерівність Ліпшиця. Стискуюче відображення і коефіцієнт стиску.

7. Фікспункти (нерухомі точки). Загальна теорема про існування фікспунктів у стискуючих відображеннях.

8. Оцінка похибки підрахунків на деякому кроці ітераційної схеми.

9. Число ітерацій , що дають бажану точність є підрахунків.

10. Оцінка величини поточного кроку , для якого буде досягнута бажана точність підрахунків.

11. Метод простих ітерацій. Ітераційна схема методу простих ітерацій.

Приклад виконання роботи TransEq

Лабораторна робота TransEq на тему "Розв'язання трансцендентних рівнянь з одним невідомим".

Варіант З1. Виконав студент групи БІТІ-04, Павлік Олексій Васильович. Дата виконання: 05.11.2003.

Завдання. По-перше, відокремити корінь рівняння , який має найменшу абсолютну величину серед всіх коренів цього рівняння, і знайти цей корінь з точністю за допомогою методів дихотомії, хорд і дотичних.

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

Виконання роботи.

1. Відокремлення коренів рівняння .Легко перевірити, що не є коренем рівняння . Тому можна поділити обидві частини цього рівняння на і отримати еквівалентне рівняння . Легко накреслити спільний малюнок графіків функцій і (креслення відповідного малюнку з графіками залишаємо студентові). З цього малюнку бачимо, що існує нескінченна кількість точок перетину цих графіків. Проекції на вісь цих точок дає корені рівняння .З того ж малюнку бачимо, що найменший за абсолютною величиною корінь належить інтервалу і він єдиний на цьому інтервалі.

Дійсно, легко перевірити, що , . Скористаємось додатком TranscEq, виконання якого показує, що на інтервалі функція змінює знак. У той же час бачимо, що функції і власного знаку не змінюють.

Проведемо аналітичну перевірку відокремлення кореня (на малюнку – найбільш близького до початку координат). Для цього підрахуємо значення функції у точках і :

,

.

Значення функції на кінцях інтервалу мають різні знаки. Тому на інтервалі є єдиний корінь рівняння .

2. Уточнення відокремленого кореня на інтервалі за методом дихотомії.Зведемо підрахунки у таблицю.

Таблиця 1.

Розрахункова таблиця знаходження кореня

рівняння за методом дихотомії.

-1.3 -0.126 -1.2 0.154 -1.25 0.085 0.1
-1.3 -0.126 -1.25 0.085 -1.275 -0.0525 0.05
-1.275 -0.0525 -1.25 0.085 -1.2625 -0.0167 0.025
-1.2625 -0.0167 -1.25 0.085 -1.25625 0.00098 0.0125
-1.2625 -0.0167 -1.25625 0.00098 -1.25938 -0.00782 0.00625
-1.25938 -0.00782 -1.25625 0.00098 -1.2578 -0.00338 0.003125
-1.2578 -0.00338 -1.25625 0.00098 -1.2570 -0.001126 0.00155
-1.2570 -0.00113 -1.25625 0.00098 -1.2566 -6.8707 0.00075

Момент зупинки підрахунків –за величиною 8-ої графи цієї таблиці (у рядку маємо ). Як наближене значення кореня беремо число у графі 6 з рядка 7, тобто, .

3. Уточнення відокремленого кореня на інтервалі за методом пропорційних частин (методом хорд).Так як при перевірці можливості уточнення кореня за методом дихотомії було знайдено, що на інтервалі перша та друга похідні функції не змінюють знак,то до цього інтервалу можна застосувати метод хорд.

Старт. Спочатку знайдемо, який кінець хорд буде нерухомим. Згідно з теорією, буде нерухомим той кінець, для якого знак функції співпадає зі знаком другої похідної у цій точці. Так як , , то і точка є нерухомою (точніше, є нерухомою точка на хордах , які послідовно будуються у методі хорд). Тому ітераційна схема методу хорд у нашому випадку має вигляд

, (1.5.24)

Момент зупинки. Для вибору моменту зупинки в методі хорд можна скористатися загальною формулою оцінки похибки n-ого наближення (див.[9,стор.114, формула (5)]):

, (1.5.25)

де -корінь, який ми шукаємо (тобто ) і - додатна оцінка знизу абсолютної величини першої похідної функціїна всьому інтервалі .Відмітимо, що ця оцінка є вірною для будь-якого ітераційного метода.

Значення одержуємо з використанням додатку TranscEq: . Якщо виконана оцінка або , то буде досягнута задана точність підрахунків. Обчислення зведемо в таблицю.

Таблиця 2.

Розрахункова таблиця знаходження кореня

рівняння за методом хорд.

-1.2 0.154 -0.1 -0.2786 0.3590 -1.2548 0.0052
-1.2548 -0.0072 -0.0452 -0.1312 0.3449 -1.2565 0.0002

Зупинка обчислень – за графою 8 (у рядку 1 маємо ). Як наближене значення кореня беремо число графи 7 з рядка 1, тобто, .

4. Уточнення відокремленого кореня на інтервалі за методом дотичних (методом Ньютона).Так як при перевірці можливості уточнення кореня за методом дихотомії було знайдено, що на інтервалі перша та друга похідна функції не змінюють знак, то до цього інтервалу можна застосувати метод дотичних (умови збіжності для метода хорд і метода дотичних співпадають).

Старт. Знайдемо стартове значення метода дотичних. Згідно з теорією, як треба брати той кінець інтервалу, для якого знак функції співпадає зі знаком другої похідної у цій точці. Так як , , то і вибираємо .

Ітераційна схема методу дотичних у нашому випадку має вигляд

, . (1.5.26)

Момент зупинки. Для вибору моменту зупинки в методі дотичних можна скористатися загальною формулою оцінки похибки -го наближення (2). Але є ще формула для оцінки похибки -го наближення методу дотичних (див.[9,стор.127,Формула (8)]):

, (1.5.27)

де

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