Вычислит.мат_лаб.р
..pdfprocedure runge_ku(a,b:real;n,kolfun :integer;x:real;var y_1:TFunZnach;)
h=(b-a)/n
I
I>N
K
K>kolfun
kf[k,1]=h*f(x,y_1[k]) kf[k,2]=h*f(x+0,5*h,y_1[k]+ 0,5*kf[k,1]) kf[k,3]=h*f(x+0,5*h,y_1[k]+ 0,5*kf[k,2]) kf[k,4]=h*f(x+h,y_1[k]+ kf[k,3])
K=K+1
K
x=x+h
K
K>kolfun
y_1[k]=y_1[k]+h/6*(kf[k,1] +2*kf[k,2]+2*kf[k,3]+ kf[k,4])
K=K+1
K
I=I+1
I
Возврат
Рисунок 31 - Схема алгоритма метода Рунге-Кутта
Вычисления по программе привели к следующим результатам:
x=0 y1=0 |
y2=0 |
x=0,1 y1=0 |
y2=0,09 |
x=0,2 y1=0,01 y2=0,19 x=0,3 y1=0,03 y2=0,29 x=0,4 y1=0,06 y2=0,38 x=0,5 y1=0,10 y2=0,46 x=0,6 y1=0,15 y2=0,53 x=0,7 y1=0,20 y2=0,60 x=0,8 y1=0,27 y2=0,66 x=0,9 y1=0,34 y2=0,72 x=1 y1=0,41 y2=0,77
71
x=1,1 y1=0,49 y2=0,81 x=1,2 y1=0,58 y2=0,85 x=1,3 y1=0,67 y2=0,88 x=1,4 y1=0,76 y2=0,91 x=1,5 y1=0,86 y2=0,94 x=1,6 y1=0,96 y2=0,96 x=1,7 y1=1,06 y2=0,98 x=1,8 y1=1,17 y2=1,00 x=1,9 y1=1,27 y2=1,02 x=2 y1=1,38 y2=1,03 x=2,1 y1=1,49 y2=1,04 x=2,2 y1=1,60 y2=1,05 x=2,3 y1=1,71 y2=1,06 x=2,4 y1=1,82 y2=1,07 x=2,5 y1=1,93 y2=1,08 x=2,6 y1=2,05 y2=1,08 x=2,7 y1=2,16 y2=1,09 x=2,8 y1=2,28 y2=1,09 x=2,9 y1=2,39 y2=1,10
Варианты заданий для решения задачи Коши методом Эйлера приведены в таблице 7.
72
Лабораторная работа №9 Решение задачи Коши Многошаговые методы
Метод Адамса (явный)
Входные параметры: a,b – интервал приближения; n – количество точек приближения; Kolfun – порядок системы; x – начальное значение x0 ; y_1 –
массив из kolfun чисел, содержащий начальное значение y.
Выходные параметры: y_1 – массив из kolfun чисел, содержащий приближенное решение системы.
Схема алгоритма показана на рисунке 32.
Пример. Решить задачу Коши на отрезке [0,3] с шагом 0,1
y1 |
x |
y2 |
|
y (0) |
0 |
|
|
|
|
|
1 |
|
|
y2 |
x |
е |
xy1 |
y2 |
(0) |
0 |
|
Текст программы:
procedure adams (a,b:real;n,kolfun:integer;x:real;var y_1:TFunZnach); var Fun:array[1..NumFun,1..4] of real;
h:real; begin h:=(b-a)/n;
for i:=1 to 4 do
begin for k:=1 to kolfun do fun[k,i]:=f(y_1[k],x); runge_ku(a,b,1,1,x,y_1); x:=x+h; end;
for i:=5 to n do begin
for k:=1 to kolfun do begin
y_1[k]:=y_1[k]+h/24*(55*fun[k,4]-59*fun[k,3]+37*fun[k,2]-9*fun[k,1]); fun[k,1]:=fun[k,2];
fun[k,2]:=fun[k,3];
fun[k,3]:=fun[k,4]; fun[k,4]:=f(y_1[k],x); end; x:=x+h;
end;{ y_1:=y_0;} end
Вычисления по программе привели к следующим результатам:
x=0 y1=0 |
y2=0 |
x=0,1 y1=0 |
y2=0,09 |
73
x=0,2 y1=0,01 y2=0,19 x=0,3 y1=0,03 y2=0,29 x=0,4 y1=0,06 y2=0,38 x=0,5 y1=0,10 y2=0,46 x=0,6 y1=0,15 y2=0,53 x=0,7 y1=0,20 y2=0,60 x=0,8 y1=0,27 y2=0,66 x=0,9 y1=0,34 y2=0,72 x=1 y1=0,41 y2=0,77 x=1,1 y1=0,49 y2=0,81 x=1,2 y1=0,58 y2=0,85 x=1,3 y1=0,67 y2=0,88 x=1,4 y1=0,76 y2=0,91 x=1,5 y1=0,86 y2=0,94 x=1,6 y1=0,96 y2=0,96 x=1,7 y1=1,06 y2=0,98 x=1,8 y1=1,17 y2=1,00 x=1,9 y1=1,27 y2=1,02 x=2 y1=1,38 y2=1,03 x=2,1 y1=1,49 y2=1,04 x=2,2 y1=1,60 y2=1,05 x=2,3 y1=1,71 y2=1,06 x=2,4 y1=1,82 y2=1,07 x=2,5 y1=1,93 y2=1,08 x=2,6 y1=2,05 y2=1,08 x=2,7 y1=2,16 y2=1,09 x=2,8 y1=2,28 y2=1,09 x=2,9 y1=2,39 y2=1,10
74
procedure adams(a,b:real;n,kolfun:int eger;x:real;var y_1:TFunZnach)
h=(b-a) / n
I
I>4
K
K>kolfun
fun[k,i]=f(y_1[k],x)
K=K+1
K
runge_ku(a,b,1,1,x,y_1)
x=x+h
I=I+1
I
I
I>5
K
K>kolfun
y_1[k]=y_1[k]+h/24*(55*fu n[k,4]-59*fun[k,3]+37*fun[ k,2]-9*fun[k,1])
fun[k,1]=fun(k,2)
fun[k,2]=fun(k,3)
fun[k,3]=fun(k,4) fun[k,4]=f(y_1[k],x)
K=K+1
K
x=x+h
I=I+1
I
Возврат
Рисунок 32 - Схема алгоритма явного метода Адамса
75
Варианты заданий
Таблица 7
№ |
F1(x,y1,y2) |
|
|
|
|
|
F2(x,y1,y2) |
|
|
y1(a) |
y2(a) |
a |
b |
||||||||||||
варианта |
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
2 |
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
4 |
5 |
6 |
7 |
||||
1 |
arctg( |
1 |
|
|
|
2 |
|
|
|
|
2 ) |
|
sin( y1 y2 ) |
|
|
1 |
0 |
-1 |
1 |
||||||
|
1 |
|
|
y1 |
|
|
|
y |
2 |
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
2 |
arctg( x 2 |
|
|
y22 ) |
|
|
sin( x |
|
|
y1 ) |
|
|
0,5 |
1,5 |
0 |
2 |
|||||||||
3 |
y1 |
|
x |
|
2 |
|
|
|
|
2 |
|
|
|
cos( y1 |
|
|
xy2 ) |
-1 |
1 |
0 |
4 |
||||
|
|
|
y |
|
|
y |
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
4 |
|
|
e y1 y2 |
|
|
|
|
|
|
|
|
|
xy1y2 |
|
|
1 |
0 |
0 |
5 |
||||||
5 |
x |
|
|
|
|
|
|
|
|
|
|
|
|
|
y2 |
|
|
|
|
|
|
0,2 |
0 |
-1 |
1 |
|
|
x 2 |
|
|
y22 |
|
|
|
|
|
|
|
|||||||||||||
|
1 |
|
|
|
|
1 |
x 2 |
y |
2 |
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
6 |
sin( x 2 |
|
|
y22 ) |
|
|
|
|
cos( xy1 ) |
|
|
0 |
0 |
0 |
4 |
||||||||||
7 |
|
|
sin y2 |
|
|
|
|
|
|
|
|
cos y1 |
|
|
0,5 |
-0,5 |
1 |
3 |
|||||||
8 |
x cos( y1 |
|
|
|
y2 ) |
|
|
sin( y1 |
|
|
y2 ) |
|
|
-0,6 |
2 |
2 |
5 |
||||||||
9 |
sin y1 cos3 |
y2 |
|
|
|
|
cos y1 cos y2 ) |
0 |
0 |
-1 |
3 |
||||||||||||||
10 |
sin(y1y2) |
|
|
|
|
|
|
cos(xy1y2) |
|
|
0,5 |
1,2 |
0 |
2 |
|||||||||||
11 |
arctg( |
1 |
|
|
|
|
2 |
|
|
|
|
y 2 |
) |
sin(y1y2) |
|
|
1 |
1 |
1 |
4 |
|||||
|
1 |
|
|
|
|
|
|
|
|
2 |
|
|
|
||||||||||||
|
|
|
|
|
y1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
12 |
y2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
y2 cos x |
|
|
sin2x |
0,8 |
3,5 |
2 |
3 |
|||
|
1 |
x |
2 |
|
|
y |
2 |
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
13 |
y1 |
|
x |
|
2 |
|
|
|
|
2 |
|
|
|
cos( y1 |
|
|
xy2 ) |
1 |
-1 |
2 |
4 |
||||
|
|
|
y |
|
|
y |
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
14 |
|
sin( xy2 ) |
|
|
|
|
|
|
cos( xy1 y2 ) |
|
|
0 |
-3 |
2 |
5 |
||||||||||
15 |
cos( y1 y2 ) |
|
|
|
|
|
sin( y1 |
|
|
y2 ) |
0 |
0 |
0 |
2 |
|||||||||||
16 |
|
|
y2ln x |
|
|
|
|
|
|
|
sin( x |
|
|
y2 ) |
|
|
-2 |
-1 |
1 |
4 |
|||||
17 |
cos y1 cos y2 ) |
|
|
y2 |
|
|
|
|
|
|
0 |
1 |
-1 |
1 |
|||||||||||
|
|
1 |
x |
2 |
y |
2 |
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
18 |
arctg( |
1 |
|
|
|
2 |
|
|
|
|
2 ) |
|
|
sin y1 |
|
|
0 |
0 |
-2 |
1 |
|||||
|
1 |
|
|
y1 |
|
|
|
y |
2 |
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
19 |
|
y1+y2 |
|
|
|
|
|
|
|
cos( xy1 ) |
|
|
0 |
0 |
0 |
4 |
|||||||||
20 |
x cos( y1 |
|
|
|
y2 ) |
|
|
|
Y1y2 |
|
|
-1 |
1 |
0 |
4 |
||||||||||
21 |
cos( y1 y2 ) |
|
|
|
|
|
y2 cos x |
|
|
sin2x |
-1 |
5 |
2 |
4 |
|||||||||||
22 |
y2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
sin( y1 |
|
|
y2 ) |
|
|
1 |
1 |
0 |
3 |
|
|
1 |
x |
2 |
|
|
y |
2 |
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
23 |
cos( x |
|
|
y2 ) |
|
|
|
|
|
sin( x |
|
|
y2 ) |
|
|
0,7 |
-0,5 |
0 |
4 |
||||||
24 |
x cos( y1 |
|
|
|
y2 ) |
|
|
y2 |
|
|
|
|
|
|
0 |
0 |
0 |
2 |
|||||||
|
|
|
|
|
1 |
x |
2 |
y |
2 |
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
25 |
x |
|
|
|
|
|
|
|
|
|
|
|
|
|
y2 |
|
|
|
|
|
|
0,2 |
0 |
0 |
3 |
|
|
x 2 |
|
|
y22 |
|
|
|
|
|
|
|
|||||||||||||
|
1 |
|
|
|
|
1 |
x 2 |
y |
2 |
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
76
Продолжение таблицы 7
1 |
|
2 |
|
|
|
|
3 |
4 |
5 |
6 |
7 |
|
26 |
|
|
sin y2 |
|
|
|
cos( y1 y2 ) |
1 |
-1 |
0 |
1 |
|
27 |
y |
2 |
|
|
|
|
|
sin( y1 y2 ) |
-2 |
3 |
-1 |
1 |
|
1 x |
2 |
y |
2 |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
1 |
|
|
|
|
|
|
|
28 |
|
sin( xy2 ) |
|
|
|
x cos( xy1 ) |
0 |
0 |
0 |
2 |
||
29 |
|
|
y2ln x |
|
|
|
y1y2 |
0 |
0 |
-5 |
0 |
|
30 |
|
sin( y1 y2 ) |
|
|
cos( xy1 y2 ) |
-1 |
2 |
0 |
2 |
77
Лабораторная работа №10 Численное интегрирование и дифференцирование
Метод Симпсона
Входные параметры: a,b – интервал интегрирования; h – шаг интегрирования; fun – вид функции.
Выходные параметры: d – погрешность интегрирования; res – значение интеграла функции.
Схема алгоритма показана на рисунке 33.
Пример. Вычислить приближенное значение определенного интеграла с точностью 0,01
1 cos x 1 |
dx |
|||
0 |
x2 |
|
||
|
||||
|
|
|
Текст программы:
procedure Simpson(fun:string;a,b,h:real;var res,d:real); var f0,f1,s,s1,s2,h,x1,x2:real;
n:integer; begin
form3.Memo1.Lines.Add('');
f0:=Execute(fun,a);
f1:=Execute(fun,b); s:=f0-f1;
s1:=(b-a)*(f0+f1+4*Execute(fun,(a+b)/2))/6; n:=2;
repeat
h:=(b-a)/n; x1:=a+h/2; x2:=a+h; s2:=s; for i:=1 to n do
begin s2:=s2+4*Execute(fun,x1)+2*Execute(fun,x2); x1:=x1+h; x2:=x2+h;
end;
s2:=s2*h/6; d:=abs(s1-s2)/15; s1:=s2; n:=n*2; until d<h;
res:=s1;
end;
Вычисления по программе привели к следующим результатам:
Результат: - 0.4864297
Погрешность вычисления:0,005
78
procedure simpson(fun:string;a,b,eps
:real;var s,d::real;)
f0=execute(fun,a)
f1=execute(fun,b)
s=f0-f1 s1=(b-a)*(f0+f1+4*execute (fun,(a+b)/2))/6
n=2
N
N=N*2
h=(b-a)/ n x1=a+h/2 x2=a+h s2=s
I
I>N
s2=s2+4*execute(fun,x1)+
2*execute(fun,x2)
x1=x1+h
x2=x2+h
I=I+1
I
s2=s2*h/ 6 d=abs(s1-s2)/ 15 s1=s2
n=n*2
d<eps N
res=s1
Возврат
Рисунок 33 - Схема алгоритма метода Симпсона
Варианты заданий для решения задач численного интегрирования и дифференцирования приведены в таблице 7.
Квадратурная формула Гаусса
Входные параметры: a,b – интервал интегрирования; fun – вид функции.
79
Выходные параметры: d – погрешность интегрирования; res – значение интеграла функции.
Схема алгоритма показана на рисунке 34.
Пример. Вычислить приближенное значение определенного интеграла с точностью 0,01
1 cos x 1 |
dx |
|||
0 |
x2 |
|
||
|
||||
|
|
|
Текст программы:
Procedure Kvadratur(fun:string;a,b:real;var res,d:real); var c,h,h1,c1,x1,x2,x3,f1,f3,s1,s2:real;
n:integer; begin c:=sqrt(3/5); h1:=(b-a)/2; c1:=c*h1; x2:=(b+a)/2;
f1:=Execute(fun,x2-c1); f3:=Execute(fun,x2+c1); s1:=h1*(5*f1+8*Execute(fun,x2)+5*f3)/9; n:=2;
repeat
h:=(b-a)/n; h1:=h/2; c1:=c*h1; x2:=a+h1; x1:=x2-c1; x3:=x2+c1; s2:=0; for i:=1 to n do
begin s2:=s2+5*Execute(fun,x1)+8*Execute(fun,x2)+5*Execute(fun,x3); x1:=x1+h; x2:=x2+h; x3:=x3+h;
end;
s2:=s2*h1/9; d:=abs(s1-s2)/63; s1:=s2; n:=2*n; until d<h;
res:=s2;
end;
Вычисления по программе привели к следующим результатам:
Результат: - 0.4863854
Погрешность вычисления:0,007
80