Maple 9.5/10 в математике, физике и образовании - Владимир Дьяконов
Шрифт:
Интервал:
Закладка:
> dsolve(diff(y(х),х)-y(х)=ехр(-х), y(х));
> dsolve(diff(y(х),х)-y(х)=sin(х)*х, y(х));
> infolevel[dsolve] := 3:
> dsolve(diff(y(x),x)-y(x)=sin(x)*x, y(x));
Methods for first order ODEs:
Trying classification methods —
trying a quadrature
trying 1st order linear
<- 1st order linear successful
Обратив внимание на вывод в последнем примере. Он дан при уровне вывода n=3
Следующие примеры иллюстрируют возможность решения одного и того же дифференциального уравнения ode_L разными методами:
> restart: ode_L := sin(x)*diff(y(x),x)-cos(x)*y(x)=0;
> dsolve(ode_L, [linear], useInt);
> value(%);
y(x) = _C1 sin(x)> dsolve(od_L, [separable], useInt);
> value(%);
ln(sin(x)) - ln(у(x)) + _C1 = 0> mu := intfactor(ode_L);
> dsolve(mu*ode_L, [exact], useInt);
y(x) = -_C1 sin(x)Разумеется, приведенными примерами далеко не исчерпываются возможности аналитического решения дифференциальных уравнений.
7.2.2. Полет тела, брошенного вверх
Из приведенных выше примеров видно, что для задания производной используется ранее рассмотренная функция diff. С помощью символа $ в ней можно задать производную более высокого порядка.
В соответствии со вторым законом Ньютона многие физические явления, связанные с движением объектов, описываются дифференциальными уравнениями второго порядка. Ниже дан пример задания и решения такого уравнения (файл
dem), описывающего движение тела, брошенного вверх на высоте h0 со скоростью v0 при ускорении свободного падения g:
> restart; eq2:=diff(h(t),t$2) = -g;
> dsolve({eq2,h(0)=h[0], D(h)(0)=v[0]},h(t));assign(s2);
Итак, получено общее уравнение для временной зависимости высоты тела h(t). Разумеется, ее можно конкретизировать, например, для случая, когда g=9,8, h0=10 и v0=100:
> g:=9.8:
> s2:=dsolve({eq2,h(0)=10,D(h)(0)=100},h(t));assign(s2);
> plot(h(t),t=0..20,color=black);
Зависимость высоты тела от времени h(t) представлена на рис. 7.5. Нетрудно заметить, что высота полета тела вначале растет и достигнув максимума начинает снижаться. Оговоримся, что сопротивление воздуха в данном примере не учитывается, что позволяет считать задачу линейной. Полученное с помощью Maple 9.5 для этого случая решение совпадает с полученным вручную в примере, описанном в разделе 7.1.3.
Рис. 7.5. Зависимость высоты полета тела от времени h(t)
7.2.3. Поведение идеального гармонического осциллятора
Еще одним классическим применением дифференциальных уравнений второго порядка является решение уравнение идеального гармонического осциллятора (файл deio):
> restart:eq3:=diff(y(t),t$2)=-omega^2*y(t);
> dsolve(eq3,y(t));
у(t) = _C1 sin(ω) + _C2 cos(ω)> s:=dsolve({eq3,y(0)=-1,D(y)(0)=1}, y(t));
> assign(s);omega:=2;
ω := 2> plot(y(t),t=0..20,color=black);
График решения этого уравнения (рис. 7.6) представляет хорошо известную синусоидальную функцию. Интересно, что амплитуда колебаний в общем случае отлична от 1 и зависит от значения у(0) — при у(0)=0 она равна 1 (в нашем случае синусоида начинается со значение у(0)=-1). Подобным осциллятором может быть LC-контур или механический маятник без потерь.
Рис. 7.6. Решение дифференциального уравнения идеального осциллятора
7.2.4. Дополнительные примеры решения дифференциальных уравнений второго порядка
Ниже представлено решение еще двух дифференциальных уравнений второго порядка в аналитическом виде (de2a):
> restart: dsolve(diff(y(x),x$2)-diff(y(x),x)=sin(x),y(x));
у(x) = -½sin(x) + ½cos(x) + ex _C1 + _C2> de:=m*diff(y(x),x$2)-k*diff(y(x),x);
> yx0:=y(0)=0,y(1)=1;
ух0:= у(0) = 0, у(1) = 1> dsolve({de,yx0},y(x));
Ряд примеров на применение дифференциальных уравнений второго порядка при решении практических математических и физических задач вы найдете в главе 11.
7.2.5. Решение систем дифференциальных уравнений
Функция dsolve позволяет также решать системы дифференциальных уравнений. Для этого она записывается в виде
dsolve(ODE_sys, optional_1, optional_2,...)
Здесь ODE_sys — список дифференциальных уравнений, образующих систему, остальные параметры опциональные и задаются по мере необходимости. Они могут задавать начальные условия, явно представлять искомые зависимости, выбирать метод решения и т.д. Детали задания опциональных параметров можно найти в справке.
На рис. 7.7 представлено решение системы из двух дифференциальных уравнений различными методами — в явном виде, в виде разложения в ряд и с использованием преобразования Лапласа. Здесь следует отметить, что решение в виде ряда является приближенным. Поэтому полученные в данном случае аналитические выражения отличаются от явного решения и решения с применением преобразования Лапласа.
Рис. 7.7. Решение системы из двух дифференциальных уравнений различными методами
Следует отметить, что, несмотря на обширные возможности Maple в области аналитического решения дифференциальных уравнений, оно возможно далеко не всегда. Поэтому, если не удается получить такое решение, полезно попытаться найти решение в численном виде. Практически полезные примеры решения дифференциальных уравнений, в том числе с постоянными граничными условиями, вы найдете в Главе 11.
7.2.6. Модель Стритера-Фелпса для динамики кислорода в воде
В качестве еще одного примера решении системы из двух дифференциальных уравнений рассмотрим модель Стритера-Фелпса, предложенную для описания динамики содержания растворенного в воде кислорода. Описание этой модели можно найти в [41]. Ниже представлено задание этой модели в виде системы из двух дифференциальных уравнений и их аналитическое решение (файл demp):
> sys := diff(x1(t),t) = K1*(C-x1(t))-K2*x2(t), diff(x2(t),t) = -K2*x2(t);
> dsol := dsolve({sys,x1(0) =a, x2(0)=b),{x1(t),x2(t)});
Здесь: x1(t) — концентрация в воде растворенного кислорода в момент времени t; x2(t) — концентрация биохимического потребления кислорода (БПК), С — концентрация насыщения воды кислородом, K1 — постоянная скорости аэрации, K2 — постоянная скорости уменьшения (БПК), a — начальное значение x1(t) и b — начальное значение х2(t) при t=0.
В данном случае получены два варианта аналитического решения — основное и упрощенное с помощью функции simplify. Читатель может самостоятельно построить графики зависимостей x1(t) и x2(t).
7.3. Специальные средства решения дифференциальных уравнений
7.3.1. Численное решение дифференциальных уравнений
К сожалению, аналитического решения в общем случае нелинейные дифференциальные уравнения не имеют. Поэтому их приходится решать численными методами. Они удобны и в том случае, когда решение надо представить числами или, к примеру, построить график решения. Поясним принципы численного решения.
Для этого вернемся к дифференциальному уравнению (7.1). Заменим приращение dx на малое, но конечное приращение dx=h. Тогда приращение dy будет равно
Δy=h ∙ f(x, у).Если, к примеру, известно начальное значение у=у0, то новое значение у будет равно
y1 = y0 + Δy = y0 + h∙f(x, y)Распространяя этот подход на последующие шаги решения получим конечно-разностную формулу для решение приведенного уравнения в виде:
yi+1 = yi + h∙f(xi, yi).Эта формула известна как формула простого метода Эйлера первого порядка для решения дифференциального уравнения (7.1). Можно предположить (так оно и есть), что столь простой подход дает большую ошибку — отбрасываемый член порядка O(h2). Тем не менее, физическая и математическая прозрачность данного метода привела к тому, что он широко применяется на практике.
Существует множество более совершенных методов решения дифференциальных уравнений, например, усовершенствованный метод Эйлера, метод трапеций, метод Рунге-Кутта, метод Рунге-Кутта-Фельберга и др. Ряд таких методов реализован в системе Maple и может использоваться при численном решении дифференциальных уравнений и систем с ними.
Для решения дифференциальных уравнений в численном виде в Maple используется та же функция dsolve с параметром numeric или type=numeric. При этом решение возвращается в виде специальной процедуры, по умолчанию реализующей широко известный метод решения дифференциальных уравнений Рунге-Кутта-Фельберга порядков 4 и 5 (в зависимости от условий адаптации решения к скорости его изменения). Эта процедура называется rkf45 и символически выводится (без тела) при попытке решения заданной системы дифференциальных уравнений. Последнее достаточно наглядно иллюстрирует рис. 7.8.