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

[Trenogin_V.A.]_Obueknovennuee_differencialnuee_ur(BookZZ.org)

.pdf
Скачиваний:
52
Добавлен:
25.03.2016
Размер:
2.76 Mб
Скачать

§ 3. Решение ДУ на примере простейших задач

281

DSolve[eq, y[x], x] — решает дифференциальное уравнение eq относительно функции y с независимой переменной x;

[{eq1, eq2,...}, {y1[x1,..], y2[x1,.. ],...}, {x1,...}] — решает систему дифференциальных уравнений eq1, eq2, . . . .

Например:

sol = DSolve[y’[x] == y[x]/(1 + Exp[x]), y[x], x]

x C 1

y x

1 x

Функция DSolve выдает, в случае нахождения решения, общее решение, содержащее константы C[1], C[2], . . . . Чтобы найти решение задачи Коши, нужно уравнение дополнить начальными условиями:

sol = DSolve[y’[x] == y[x]/(1 + Exp[x]), y[0] == 1, y[x], x]

2 x

y x

1 x

3.2. Решение дифференциальных уравнений в численном виде

Когда не удается решить дифференциальное уравнение в аналитическом виде, можно искать решение численными методами, включающими интерполяцию сеточных решений Для этого используется функция

NDSolve[{eq,initdata}, y, {x,xmin,xmax}]. Здесь eq — дифференциальное уравнение относительно функции y, аргумент x изменяется в пределах [xmin,xmax], initdata — начальные условия.

В качестве примера найдем решение дифференциального уравнения y − 2y + 5xy = 0 с начальными условиями y(0) = 1, y (0) = 0 на от-

резке x [0, 3]:

eq = y”[x] - 2y’[x] + 5x y[x] == 0;

sol = NDSolve[eq, y[0] == 1, y’[0] == 0, y[x], x, 0, 3]]

{{y[x] InterpolatingFunction[{{0.,3.}},< > ][x]}}

Решение получается посредством подстановки искомой функции y(x) в правую часть. У применяемой интерполяционной функции имеются два аргумента, первый из которых указывает ее область определения, а второй представляет собой таблицу значений функции y(xi) в различных точках отрезка [xmin, xmax]. Эта таблица достаточно велика и потому обычно не выводится, а заменяется скобками < > . Приближенное решение может быть найдено в любой точке промежутка:

y[2.5] /. sol

{5.63038}

С интерполяционной функцией можно обращаться, как с обычной функцией, например, дифференцировать, интегрировать, строить ее график (рис. 86):

Plot[y[x] /. sol, x, 0, 3]

282 Доп. III. Решение задач с использованием системы Mathematica

1

 

 

 

 

0.75

 

 

 

 

0.5

 

 

 

 

0.25

 

 

 

 

2

4

6

8

10

-0.25

 

 

 

 

-0.5

 

 

 

 

Рис. 86

Дальнейшие примеры демонстрируют эффективность использования системы Mathematica при решении дифференциальных уравнений.

Пример 1. Дифференциальные уравнения первого порядка с раз-

деляющимися переменными.

Найти все решения уравнения (1 + x2)y = 2x 1 − y2.

Р е ш е н и е. Это уравнение с разделяющимися переменными

 

dy

=

2xdx

, y = ±1.

p

 

 

1 + x2

1 − y2

Запишем равество интегралов в Mathematica и получим результат:

 

1

 

dy =

2x

 

dx + C

 

 

 

2

q1 - y2

1 +2

 

x

ArcSin[y] == Log[1+x ]

+ C

Заметим, что Mathematica использует для обозначения фунций начальные прописные буквы, в данном примере ArcSin[y] = arcsin(y), а Log[y] = ln(y).

Теперь решим это уравнение с помощью встроенной функции

DSolve:

q

sol = DSolve[y’[x](1 + x2) y’[x] == 2x 1 - y[x]2, y[x], x]

y[x] /. sol

{{y Function[x, Sin[C[1] + Log[1+x2]]]}}

Sin[C[1] + Log[1 +x2]]

Пример 2. Решение дифференциального уравнения в полных дифференциалах.

Решить уравнение (3xy2 − x2)dx + (3xy2 6y2 1)dy = 0.

Р е ш е н и е. Убедимся, что уравнение является уравнением в полных дифференциалах:

P[x, y] := 3xy2 - x2; Q[x, y] := 3xy2 - 6y2 - 1;

D[P[x, y], y] == D[Q[x, y], x]

True

§ 3. Решение ДУ на примере простейших задач

283

Потенциальную функцию U(x, y) будем искать в виде:

U[x, y] = P[x,y] dx +C[y]

x3 + 3x2y2 + C[y] 3 2

Чтобы найти неизвестную функцию C[y], продифференцируем U(x, y) по y и результат приравняем к Q(x, y):

eq1 = D[U[x, y], y] == Q[x,y] // Simplify

1 + 6y2 + C’[y] == 0

Полученное относительно C[y] уравнение легко интегрируется:

sol = DSolve[eq1, C[y], y] // Flatten

{{C[y] -> - y - 2y2 + C[1]}}

Тогда можно получить первый интеграл рассматриваемого ДУ:

(U[x, y] /. sol1) == 0

-x3 - y + 3x2y2 - 2y3 + C[1] == 0 3 2

Пример 3. Найти общее решение линейного неоднородного ДУ первого порядка

y + 2xy = xe−x2 sin x.

Это решение y = a(x)y + b(x) ищется по формуле (см. главу I)

 

x

 

x

x

 

 

x0

x0

x0

y(x) = C exp

a(t) dt

+

b(z) exp

a(t) dt

dz.

Запишем эту формулу в системе Mathematica и получим результат:

x

x

x

res[x_] = C exp ( - 2t dt) +

zez2

sin(z) exp -2t dt) dz

x0

x0

x0

C ex2 + ex2 (-x cos[x] + sin[x])

Подставим решение в уравнение:

y’[x] + 2xy[x] - xex2 sin[x] /. y res // Simplify

0

Теперь решим это уравнение с помощью встроенной функции DSolve:

sol = DSolve[y’[x] + 2xy[x] == xex2 sin(x), y[x], x]

{{y Function[x, C[1] ex2 + ex2 (-x cos [x] + sin[x])]}}

284 Доп. III. Решение задач с использованием системы Mathematica

Получим решение в явном виде:

y[x] /. sol

{C[1] ex2 + ex2 (-x cos [x] + sin[x])}

Пример 4. Дифференциальные уравнения высших порядков.

Построить решение уравнения ангармонических колебаний x +

+2ax + bx = 0 для параметров a = 0,1, b = 1.

Ре ш е н и е. Найдем общее решение этого уравнения:

DSolve[x”[t] + 2a x’[t] + b x[t] == 0, x[t], t]

{{x[t] e(aa2b)t C[1] + e(a+ a2b)t C[2]}}

Обозначим функцией sol(a, b, x0, y0) решение уравнения с начальными условиями x(0) = x0, x (0) = y0:

sol[a_, b_, x0_, y0_] :=

x[t] /. DSolve[x”[t] + a x’[t] + b x[t] == 0, x[0] == x0, x’[0] == y0, x[t], t][[1]]

Изобразим на графике (рис. 87) решения этого уравнения при различных начальных условиях:

Plot[Evaluate[{sol[0.1, 2, 1, 0.3], sol[0.1, 1, 0, 1], sol[0.1, 1, 0.5, 0]}], {t, 0, 10},

PlotStyle {, Dashing[{0.01}], Dashing[{0.03}]}]

6

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.5

1

1.5

 

2

2.5

3

-2

 

 

 

 

 

 

 

 

 

 

 

Рис. 87

 

 

 

 

 

 

 

 

 

Пример 5. Найти решение задачи Коши

 

 

 

y = y tg(x) +

1

 

,

 

y(0) = 0.

 

 

 

cos2

 

 

 

 

 

 

 

(x)

 

 

 

Напишем уравнение и решим его с помощью функции DSolve:

eq = {y’[x] == y[x]Tan[x] + 1/Cos[x]2, y[0] == 0}

sol = DSolve[eq, y[x], x] // Flatten

{y[x] 2 ArcTanh[Tan[ 2xx ]] Sec[x]}

§ 3. Решение ДУ на примере простейших задач

285

Построим график (рис. 88):

Plot[y[x] /. sol, {x, - π/2, π/2}]

 

1

 

 

 

 

0.5

 

 

 

 

2

4

6

8

10

-0.5

 

 

 

 

 

Рис. 88

 

 

 

Пример 6. Найти решение ДУ y = x −1 y .

Уравнение не является линейным относительно переменной y, однако оно линейно относительно x. Напишем уравнение для x(y):

eq = x’[y] == (x[y] - y); Решим его с помощью функции DSolve:

sol = DSolve[eq, x[y], y] // Flatten

{x[y] 1 + y + eyC[1]}

Построим график решения (рис. 89) при различных значениях (1, 1, 2) параметра C[1]:

ParametricPlot[{{x[y] /. sol /. C[1] -> -1, y}, {x[y] /. sol /. C[1] -> 1, y}, {x[y] /. sol /. C[1] -> 2, y}}, {y, -5, 5},

PlotStyle {{Thickness[0.009]}, {Dashing[{0.02}], Thickness[0.009]}, {Dashing[{0.05}], Thickness[0.009]}}, AxesLabel -> {"X "Y"}]

200

 

 

 

100

 

 

 

-1.5 -1 -0.5

0.5

1

1.5

-100

 

 

 

-200

 

 

 

Рис. 89

286Доп. III. Решение задач с использованием системы Mathematica

Пример 7. Найти решение ДУ задачи Коши

y = y − y3, y(0) = y0.

Рассматриваемое уравнение является уравнением Бернулли. Сделаем

замену, учитывая, что y = 0 является решением, z = y2

Получим уравнение относительно z:

eq = y’[x] == y[x] - y[x]3; p

eq1 = eq/. y (1/ z[#] &);

1

, т. е. y → . z

Solve[eq1, z’[x]] // Flatten

{z’[x] -2 (-1+z[x]) }

Получаем линейное ДУ, pешение которого найдем с помощью функции

DSolve:

sol1 = DSolve[eq1, z[x], x] // Flatten

{z[x] 1 + e2x C[1]}

Общее решение исходного уравнения:

eq = 1/y2 == z[x] /. sol1 /. z[x] -> 1/y2

1 == 1 + e2xC[1] y2

Напишем команду, которая строит частное решение, удовлетворяющее начальному условию y(x0) = y0:

sol[x0_, y0_] := Select[y /. Solve[eq /. C[1] C[1] /.

Solve[eq /. x x0, y y0, C[1]],y] // Flatten, N[# /. x x0] == y0 &];

Например:

sol[0,-1]

{-1}

sol[0,1/2]

{ p ex } 3 + e2x

Построим график решения y[x] на отрезке [0, 1] для различных начальных условий (рис. 90):

Plot[Evaluate[{sol[0, -1], sol[0, 1], sol[0, 1/2], sol[0, 2]}], {x, 0, 1},

AxesLabel {"Y "X"}]

§ 3. Решение ДУ на примере простейших задач

287

 

 

 

Y

 

 

 

 

 

 

4

 

 

 

 

 

 

2

 

 

 

-15

-10

-5

5

10

X

 

15

 

 

 

 

-2

 

 

 

 

 

 

-4

 

 

 

 

 

 

Рис. 90

 

 

 

Пример 8. Решить ДУ

y = 4cosx −y1 y(0) = 0.

Проинтегрируем наше уравнение с разделяющимися переменными и получим первый интеграл:

Cos[y] dy - (4x - 1) dx == C

x - 2x2 + Sin[y] == C

Напишем уравнение и решим его с помощью функции DSolve:

eq = {y’[x] == (4x - 1)/Cos[y[x]], y[0] == 0};

sol = DSolve[eq, y[x], x] // Flatten

{y[x] - ArcSin[x - 2x2]}

Построим график решения на отрезке определения решения [1/2, 1] (рис. 91):

Plot[ y[x] /. sol , {x, -1/2,1}]

Y 2

1.5

1

0.5

0.2 0.4 0.6 0.8 1 X

-0.5

-1

Рис. 91

288Доп. III. Решение задач с использованием системы Mathematica

Пример 9. Построить интегральные кривые ДУ

y = p 1 .

1 − x2 − y2

Определим функцию sol[x0, y0] как численное решение нашего уравнения с начальными условиями x0, y0:

sol[x0_,y0_] := NDSolve[{

1

== 0, y[x0] == y0},

 

 

y[x], {x,x0,1}] // Flatten;

p1 x2 y2

В цикле, для различных начальных условий, численно решим уравнение, выберем решения с нулевой мнимой частью и построим графики в виде таблицы. Затем все графики отобразим на одном чертеже (рис. 92). Для наглядности нарисуем окружность радиуса 1, а жирными точками обозначим начальные условия:

gr = { };

Do[sol1 = sol[x0, y0];

l = Select[Table[{Evaluate[y[x] /. sol1], x}, {x, x0, 1, 0.01}], Abs[Im [#[[1]]]] == 0 &];

gr = Append[gr, ListPlot[l,PlotJoined True, DisplayFunction Identity]],

{x0, -0.7, 0.2, 0.2}, {y0, -0.7, 0.2, 0.2}];

gr1 = ParametricPlot[{Cos[t], Sin[t]}, {t, 0, 2 π, DisplayFunction Identity}]; ll = Table[Point[{x, y}], {x, -0.7, 0.2, 0.2}, {y, -0.7, 0.2, 0.2}];

grp = Graphics[{PointSize[0.015],ll}];

Show[gr,gr1,grp, DisplayFunction $DisplayFunction]

1.5

1.25

1

0.75

0.5

0.25

-0.4 -0.2 0.2 0.4 0.6 0.8 1

Рис. 92

§ 4. Метод изоклин

289

§4. Метод изоклин

Пр и м е р. Для ДУ y = x2 + y2 построить поле направлений и интегральные кривые, проходящие через точки (1, 1), (0, 0), (1, 1).

Р е ш е н и е. Предварительно загрузим внешний модуль Graphics‘Arrow‘, позволяющий рисовать стрелки, и определим правую часть уравнения

«Graphics‘Arrow‘ f[x_, y_] := x2 + y2;

Для построения изоклин f(x, y) = k, где k = 0,2, 0,4, 0,6, 0,8, 1, используем функцию построения контурного графика ContourPlot. Этот график соответствующих контурных линий назовем g1:

g1 = ContourPlot[f[x, y], {x, -1, 1}, {y, -1, 1},

Contours {0.2, 0.4, 0.6, 0.8, 1}, ContourShading False];

Далее построим поле направлений, помещая на каждую изоклину стрелки, тангенс наклона которых к оси Ox равен значению y :

arr = {};

Do[{xmax = k; dx = xmax/(4 + k);

Do[arr = Append[arr,

{Arrow[ { -xmax + (i - 1) dx,(k - (-xmax) + ((i - 1) dx)2)(1/2)},

{-xmax + (i - 1) dx + 0.1, (k - (-xmax + (i - 1)dx)2)(1/2)} +

0.1k}, HeadScaling Relative, HeadWidth 0.7], Arrow[{ -xmax + (i - 1)dx, - (k - (-xmax + (i - 1) dx))2)(1/2)},

{ -xmax + (i - 1) dx + 0.1, - (k - (-xmax + (i - 1) dx)2)(1/2) + 0.1k}, HeadScaling Relative, HeadWidth 0.6]}], {i,9 + 2k}]},

{k, 0.2, 1, 0.2}];

g2 = Graphics[arr];

С помощью функции NDSolve найдем интегральные кривые, проходящие через точки (1, 1), (0, 0), (1, 1), и наложим их на поле направлений (рис. 93):

eq = y’[x] - x2 - y[x]2 == 0;

r1 = NDSolve[{eq, y[0] == 0}, y[x], {x, -1, 1}]; r2 = NDSolve[{ eq, y[-1] == -1}, y[x], {x, -1, 1 }]; r3 = NDSolve[{eq, y[1] == 1}, y[x], {x, -1, 1}]; g3 = Plot[{ (y[x] /. r1), (y[x] /. r2), (y[x] /. r3)},

{x, -1, 1 }, PlotRange -1, 1, PlotStyle Thickness[0.009], DisplayFunction Identity];

Show[g1, g2, g3, PlotRange {-1, 1}, Axes True, DisplayFunction DisplayFunction];

19 В.А. Треногин

290 Доп. III. Решение задач с использованием системы Mathematica

 

 

1

 

 

 

0.5

 

-1

-0.5

0.5

1

 

 

-0.5

 

 

 

-1

 

 

 

Рис. 93

 

§5. Нахождение решения в виде степенного ряда

Пр и м е р. В задаче Коши y = y2 − x, y(0) = 1 найти решение в ви-

де степенного ряда.

Р е ш е н и е. Функция y2 − x является аналитической по переменным x, y в окрестности точки (0, 1), поэтому существует аналитическое решение в виде степенного ряда. Запишем это:

n=10;

n

y[x_] := aixi;

i=0

Подставим этот ряд в наше уравнение и приравняем коэффициенты при одинаковых степенях x. Получим систему уравнений относительно ai:

eq = Expand[y’[x] - y[x]2 + x];

eq1 = Table[Coefficient[eq, x, i] == 0, i, 0, n - 1] {-1+a1==0, 1-2a1+2a2==0, -a21-2a2+3a3==0,

-2a1a2-2a3+4a4==0, -a22-2a1a3-2a4+5a5==0,

-2a2a3-2a1a4-2a5+6a6==0, -a23-2a2a4-2a1a5-2a6+7a7==0, -2a3a4-2a2a5-2a1a6-2a7+8a8==0,

-a24-2a3a5-2a2a6-2a1a7-2a8+9a9==0,

-2a4a5-2a3a6-2a2a7- 2a1a8-2a9+10a10==0}

Так как y(0) = 1, то a0 = 1. Запишем это: a0=1;

Решаем систему уравнений относительно ai:

var = Table[ai,{i,1,n}]; sol = Solve[eq1, var]

{{a10

29549

,a9

1637

 

,a8

447

,a7

559

,

90720

4536

 

1120

1260

a6

22

,a5

11

,a4

7

 

,a3

 

2

,a2

 

1

,a1 1}}

 

 

 

 

 

 

 

 

45

20

12

3

2