Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Вычислит.мат_лаб.р

..pdf
Скачиваний:
23
Добавлен:
17.05.2015
Размер:
1.32 Mб
Скачать

procedure 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