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

ЧМ-2

.pdf
Скачиваний:
12
Добавлен:
12.05.2015
Размер:
275.3 Кб
Скачать

 

 

11

y=f(x ,y),

y(x0)= y0

(6.5)

на отрезке [а,b].

На данном отрезке выбираем некоторую совокупность узловых точек a=x0< x1<x2< ...<x n=b и разложим искомую функцию y(x) в ряд Тейлора в их окрестностях.

6.1. Метод Эйлера.

Если отбросить все члены, содержащие производные второго и более высоких порядков, и считать узлы равностоящими, т.е. xi=xi+1-xi=h, то это разложение можно записать в виде:

y(xi+1) = yi+1 = yi + h f(xi,yi), i =0,1,...,n-1.

(6.6)

Соотношения (6.6) имеют вид рекурентных формул, с помощью которых значение сеточной функции yi+1 в любом узле xi+1 вычисляется по ее значению yi в предыдущем узле xi. На каждом шаге погрешность имеет порядок O(h2). На рис. 6.1 дана геометрическая интерпретация метода Эйлера. В силу невысокой точности формулой Эйлера редко пользуются в практических расчетах и используют более точные методы. Например, модифицированный метод Эйлера.

y

 

 

 

 

 

 

 

 

y2

 

 

y0

 

 

 

 

y1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

x0

x1

 

x2

x

 

 

 

Рис. 6.1. Метод Эйлера.

 

 

 

 

 

Пример:

Решить

задачу

Коши

методом

Эйлера

для

дифференциального уравнения

 

 

 

 

 

 

y=x2+y, y(0)= 1

на отрезке [0;0,3] с шагом 0,1.

 

 

12

Решение: По формуле (6.6) вычислим значение y1

y1 = y0 + h f(x0,y0) = 1 +0,1 (02 +1) = 1,1

Аналогично вычисляются последующие значения функции в узловых точках

y2 = y1 + h f(x1,y1)=1,1+0,1·(0,12+1,1) = 1,211

y3 = y2 + h f(x2,y2)=1,211+0,1·(0,22+1,211) = 1,3361

Сеточную функцию записываем в виде таблицы

x

 

0

 

0,1

 

0,2

 

0,3

 

 

 

 

y

 

1

 

1,1

 

1,211

 

1,3361

 

 

 

 

Программа решения задачи Коши методом Эйлера дана на рис. 6.2.

CLS

REM LR-6-1, m=13, n=5

DEF FNY(X,Y)=X^2+Y

DATA 0, 0.3, 1, 0.1

READ A, B, Y0, H

PRINT A;Y0

X=A: Y=Y0

1Y=Y+ FNY(X,Y)*H X=X+H

PRINT X;Y

IF X<B THEN 1 END

Рис. 6.2. Программа решения задачи Коши методом Эйлера.

6.2. Модифицированный метод Эйлера.

Модифицированный метод Эйлера позволяет уменьшить погрешность на каждом шагу до величины O(h3) вместо O(h2) в обычном методе (6.6). Запишем разложение функции в ряд Тейлора в виде:

yi+1 = yi + h yi + h2/2 y′′i + O(h3).

(6.7)

Аппроксимируем вторую производную с помощью отношения

конечных разностей: y′′i = (yi+1 - yi) / h.

Подставляя это соотношение в (6.7) и пренебрегая членами порядка O(h3), получаем:

yi+1 = yi + h/2 [f(xi,yi) + f(xi+1,yi+1)].

(6.8)

13

Полученная схема является неявной, поскольку искомое значение yi+1 входит в обе части соотношения (6.8) и его нельзя выразить явно. Если имеется хорошее начальное приближение yi, то можно построить решение с использованием двух итераций следующим образом. Сначала по формуле (6.6) вычисляют первое приближение y i+1

y i+1= yi + h f(yi,xi).

(6.9)

Найденное значение подставляется вместо yi+1 в правую часть

соотношения (6.8) и находится окончательное значение

 

yi+1 = yi + h[f(xi,yi) + f(xi+1, y i+1)]/2,

i=0,1,...,n-1.

(6.10)

 

На рис. 6.3 дана геометрическая интерпретация первого шага вычислений при решении задачи Коши модифицированным методом Эйлера.

y

y1

y 1

y0

0

x0

h/2

h/2

x1 x

Рис. 6.3. Модифицированный метод Эйлера.

Пример: Решить задачу Коши модифицированным методом Эйлера для дифференциального уравнения

y=x2+y, y(0)= 1 на отрезке [0;0,3] с шагом 0.1.

Решение: По формуле (6.9) вычислим первое приближение y 1

y 1 = y0 + h f(x0,y0) = 1 +0,1 (02 +1) = 1,1

Используя формулу (6.10), находим окончательное значение в точке x1=0.1

y1=y0+h [f(x0,y0)+f(x1, y 1)]/2=1+0,1· (02+1+0,12+1,1)/2=1,1055

14

Аналогично вычисляются последующие значения функции в узловых точках

y 2 = y1 + h f(x1,y1)=1,1055+0,1· (0,12+1,1055) = 1,21705

y2=y1+h[f(x1,y1)+f(x2,y 2)]/2=

=1,1055+0,1· (0,12+1,1055+0,22+1,21705)/2=1,224128

y 3 = y2 + h f(x2,y2)=1,224128+0,1· (0,22+1,224128) = 1,350541

y3=y2+h[f(x2,y2)+f(x3,y 3)]/2=

=1,224128+0,1· (0,12+1,224128+0,22+1,350541)/2=1,355361

Сеточную функцию записываем в виде таблицы

x

 

0

 

0.1

 

0.2

 

0.3

 

 

 

 

y

 

1

 

1.1055

 

1,224128

 

1,355361

 

 

 

 

Программа решения задачи Коши модифицированным методом Эйлера дана на рис. 6.4.

CLS

REM LR-6-2, m=13, n=5

DEF FNY(X,Y)=X^2+Y

DATA 0, 0.3, 1, 0.1

READ A, B, Y0, H

PRINT A;Y0

X=A: Y=Y0

1Y1=Y+ FNY(X,Y)*H Y=Y+H*(FNY(X,Y)+FNY(X+H,Y1))/2 X=X+H

PRINT X;Y

IF X<B THEN 1 END

Рис. 6.4. Программа решения задачи Коши модифицированным методом Эйлера.

Существуют и другие одношаговые методы. Наиболее распространенным из них является метод Рунге-Кутта.

6.3. Метод Рунге-Кутта.

15

На основе метода Рунге-Кутта могут быть построены разностные схемы разного порядка точности. Наиболее употребительной является следующая схема четвертого порядка:

yi+1 = yi + (k0 + 2k1 + 2k2 + k3) /6.

(6.11)

где

 

 

k0

= h f(xi, yi),

 

k1

= h f(xi+h/2, yi+ k0 /2),

 

k2

= h f(xi+h/2, yi+ k1 /2),

(6.12)

k3= h f(xi+h, yi+ k2).

Таким образом, метод Рунге-Кутта требует на каждом шаге четырехкратного вычисления правой части уравнения. Однако это окупается повышенной точностью, что дает возможность проводить счет с относительно большим шагом.

Пример: Решить задачу Коши методом Рунге-Кутта для дифференциального уравнения

y=x2+y, y(0)= 1 на отрезке [0,0.3] с шагом 0.1.

Решение: По формулам (6.12) вычислим значения k0 , k1, k2, k3

k0=h f(x0,y0)=0,1·(02+1)=0,1

k1=h f(x0+h/2, y0+k0 /2)=0,1· ((0+0,1/2)2+1+0,1/2)=0,10525

k2=h f(x0+h/2,y0+k1 /2)=0,1· ((0+0,1/2)2+1+0,10525/2)=0,105513

k3= h f(x0+h, y0+ k2)=0,1· ((0+0,1)2+1+0,105513)= 0,111551

Используя формулу (6.11), находим значение y1 в точке x1=0.1

y1=y0+(k0+2k1+2k2+k3)/6=

=1+(0,1+2·0,10525+2·0,105513+0,111551)/6=1,105513

Аналогично вычисляются последующие значения функции в узловых точках

k0=h f(x1,y1)=0,1· (0,12+1,105513)=0,111551

k1=h f(x1+h/2,y1+k0/2)=0,1· ((0,1+0,1/2)2+1,105513+0,111551/2)=0,118379

k2=h f(x1+h/2,y1+k1/2)=0,1· ((0,1+0,1/2)2+1,105513+0,118379/2)=0,11872

k3= h f(x1+h,y1k2)=0,1· ((0,1+0,1)2+1,105513+0,11872)=0,126423

y2=y1+(k0+2k1+2k2+k3)/6=

16

=1,105513+(0,111551+2·0,118379+2·0,11872+0,126423)/6=1,224208

k0=h f(x2,y2)=0,1· (0,22+1,224208)=0,126421

k1=h f(x2+h/2, y2+k0 /2)=0,1· ((0,2+0,1/2)2+1,224208+0,126421/2)=0,134992

k2=h f(x2+h/2,y2+k1 /2)=0,1· ((0,2+0,1/2)2+1,224208+0,134992/2)=0,13542

k3=h f(x2+h,y2+k2)=0,1· ((0,2+0,1)2+1,224208+0,13542)=0,144963

y3=y2+(k0+2k1+2k2+k3)/6=

=1,224208+(0,126421+2·0,134992+2·0,13542+0,144963)/6=1,359576

Сеточную функцию записываем в виде таблицы

x

 

0

 

0.1

 

0.2

 

0.3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

1

 

1,105513

 

1,224208

 

1,359576

 

 

 

 

Программа решения задачи Коши методом Рунге-Кутта дана на рис.

6.5.

CLS

REM LR-6-3, m=13, n=5

DEF FNY(X,Y)=X^2+Y

DATA 0, 0.3, 1, 0.1

READ A, B, Y0, H

PRINT A;Y0

X=A: Y=Y0

1K0 = H*FNY(X,Y)

K1 = H*FNY(X+H/2,Y+K0/2)

K2 = H*FNY(X+H/2,Y+K1/2)

K3 = H*FNY(X+H,Y+K2) Y=Y+(K0+2*K1+2*K2+K3)/6 X=X+H

PRINT X;Y

IF X<B THEN 1 END

Рис. 6.5. Программа решения задачи Коши методом Рунге-Кутта.

6.4.Разностные методы решения краевой задачи для обыкновенного дифференциального уравнения.

Линейная краевая задача имеет

вид:

y′′+ p(x) y+ q(x) y = f(x)

(6.12)

 

 

 

17

 

 

 

a1y(a) + a2 y¢(a) = a3

,

 

 

(6.13)

 

 

 

 

 

 

b1 y(b)+ b2 y¢(b) = b3

,

 

 

 

при |a1|+|a2| ¹ 0

|b1|+|b2| ¹ 0 xÎ[a,b].

 

 

Решение

задачи

(6.12)-(6.13)

проводится

в

следующей

последовательности:

1. Определение сетки:

Отрезок [a,b] делится на конечное число частей:

y1

y2

. . . yk

. . . . . yn-1

yn

yn+1

 

 

|

|

|

|

|

|

 

 

 

x1=a

x2

. . . xk

. . . . . xn-1

xn

xn+1=b

x

 

 

 

____

 

 

 

 

 

xk=x1 + (k - 1)h;

k=1,n+1; h=(b-a)/n.

 

 

 

 

x1, xn+1 - краевые точки, x2, x3, . .

. , xn-1, xn - внутренние точки.

2. Определение сеточной функции yi = y(xi):

 

 

 

 

 

 

 

 

 

 

 

 

x1

 

x2

 

x3

...

 

 

xn+1

 

у1

 

у2

 

у3

...

 

 

уn+1

 

3. Аппроксимация уравнения:

Aппроксимация производных y¢(x) и y¢¢(x) центральными

конечноразностными аналогами имеет вид:

 

y¢(xk)=(y(xk+h)-y(xk-h))/2h+O(h2),

(6.14)

y¢¢(xk)=(y(xk+h)-2y(xk)+y(xk-h))/h2+O(h2).

(6.15)

Подстановка полученных соотношений (6.14)¾(6.15) в уравнение

(6.12) дает

(yk+1-2yk+yk-1)/h2+pk(yk+1-yk-1)/2h+qkyk=fk,

(6.16)

где yk=y(xk), pk=p(xk), qk=q(xk), fk=f(xk).

 

 

 

 

 

 

 

 

 

 

 

18

 

 

 

yk+1-2yk+yk-1+

pk h

yk+1-

 

pk h

yk-1+qkh2yk=fkh2,

 

 

2

 

 

2

 

 

 

 

 

 

 

 

 

(1-

pk h

) yk-1+(qkh2-2)yk+(1+

pk h

) yk+1=fkh2.

 

 

2

 

2

 

 

 

 

 

 

 

 

 

 

 

 

После этих преобразований уравнение (6.16) можно представить в

виде:

___

 

 

 

 

 

 

 

 

 

 

 

 

 

 

akyk-1+ckyk+bkyk+1=dk,

k=2,n

(6.17)

 

 

где ak= 1-

pk h

,

bk= 1+

pk h

, ck=gkh2-2,

dk= fkh2.

 

 

 

 

 

 

 

 

 

 

2

 

 

2

 

 

Для краевых условий применяем следующие разностные формулы:

y(xk)=(y(xk+1)y(xk))/h,

или

y(а)=(y(x1)=(y(x2)y(x1))/h=(y2y1)/h , y(b)=y(x n+1)=(y(x n+1)y(x n))/h=(y n+1y n)/h .

Подставляя в краевые условия (8.2)-(8.3) получим:

α1y1 + α2 (y2y1)/h = α3 ,

 

β1 y(b)+ β2 (y n+1y n)/h

= β3 .

 

После преобразований краевые условия (6.13) запишем в виде:

c1y1 + b1y2 = d1 ,

 

(6.18)

an+1yn + c n+1yn+1 = d n+1 ,

 

(6.19)

где

c1 = α1 h − α2;

b1 = α2;

d1 = α3 h;

 

an+1 = - β2; cn+1 = β1 h + β2;

d n+1 = β3 h.

Таким образом, для определения (n+1) неизвестных величин yk

составляется (n+1) уравнений вида:

 

c1y1 + b1y2 = d1 ,

k=1

 

 

 

___

 

akyk-1+ckyk+bkyk+1=dk,

k=2,n

(6.20)

an+1yn + c n+1yn+1 = d n+1 ,

k=n+1.

 

19

Система (n+1) уравнений (8.10) решается методом прогонки.

Пример: Решить краевую задачу методом конечных разностей с шагом h = 0,1:

y′′ - xy+ 2xy = 0,8 y(1,2) - 0,5y(1,2) = 1 y(1,5) = 2.

Решение. Решение проводим в следующей последовательности: 1. Определение сетки:

|

|

|

|

 

x1=1,2

x2=1,3

x3=1,4

x4=1,5

x

x1, x4 - краевые точки, x2, x3 - внутренние точки.

 

 

2. Определение сеточной функции yi = y(xi):

 

 

 

 

 

 

 

 

 

 

x1

 

x2

x3

x4

 

 

 

у1

 

у2

у3

у4

 

 

 

 

3. Аппроксимация уравнения:

 

при x1=1,2:

 

у1-0,5(y2y1)/0,1 = 1

(6.21)

при x2=1,3:

 

3-2у21)/0,01-1,3(y3y1)/0,2+2*1,3y2=0,8

(6.22)

при x3=1,4:

 

4-2у32)/0,01-1,4(y4y2)/0,2+2*1,4y3=0,8

(6.23)

при x4=1,5:

 

(y4y3)/0,1 = 2.

(6.24)

Полученная система четырех линейных уравнений с четырьмя неизвестными у1, у2, у3 и у4 решается методом прогонки.

у1-5(y2y1) = 1

100(у3-2у21) -6,5(y3y1)+2*1,3y2=0,8 100(у4-2у32) -7(y4y2)+2*1,4y3=0,8 10(y4y3) = 2

1

- 5y2

= 1

106,5у1

- 197,4у2 + 93,5у3

= 0,8

 

107у2 -197,2у3+93у4 = 0,8

20

10y3+10y4 = 2

Значения ai; bi; ci; di; i=1, 2, 3, 4 записываем в виде таблицы 6.1.

Таблица 6.1

i

ai

bi

ci

di

 

 

 

 

 

1

0

6

- 5

1

2

106,5

- 197,4

93,5

0,8

3

107

-197,2

93

0,8

4

-10

10

0

2

Прямой ход прогонки. Определяем прогоночные коэффициенты Ui и

Vi (i=1,2,3,4)

U1=-c1/b1=5/6=0,833333

V1=d1/b1=1/6=0,166667

U2=-c2 /(b2 + a2U1)=- 93,5/(-197,4+106,5*0,833333)= 0,860561 V2=(d2-a2V1)/(b2+a2U1)= =(0,8-106,5·0,166667)/(-197,4+106,5·0,833333)=0,156006 U3=-c3 /(b3+a3U2)=-93/(-197,2+107·0,860561)=0,884703

V3=(d3-a3V2)/(b3+a3U2)=(0,8-107·0,156006)/(-197,2+107·0,860561)=0,151186

U4=-c4 /(b4+a4U3)=0

V4=(d4-a4V3)/(b4+a4U3)=(2+10·0,151186)/(10-10·0,884703)=3,045925

Обратный ход прогонки. По формулам (2.7) вычисляем все xi;

i=4,3,2,1).

Поскольку cn = 0, то y4 = V4 = 3,045925.

Далее вычисляем y3, y2, y1

y3 = U3 y4 + V3 = 0,884703·3,045925+0,151186=2,845925

y2 = U2 y3 + V2 =0,860561·2,845925+0,156006=2,605098

y1 = U1 y2 + V1 =0,833333·2,605098+0,166667=2,337581

Сеточную функцию yi = y(xi) записываем в виде таблицы