![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Для решения обыкновенных дифференциальных уравнений и систем используется функция вида
dsolve( deqns, vars ) или dsolve( deqns, vars, eqns ).
Здесь deqns – обыкновенное дифференциальное уравнение или система уравнений и начальных условий;
vars – переменная или набор переменных, относительно которых необходимо решить уравнения;
eqns – этот параметр может принимать значения: type=exact, type=series, type=numeric, explicit=true, explicit=false, method=laplace, type=series, output=basis, type=numeric.
Функция dsolve способна найти решения в замкнутом виде для многих дифференциальных уравнений. Если задан параметр type=exact (по умолчанию), то система пытается найти точное аналитическое решение. Решение возвращается в виде уравнения y(x) или в параметрической форме вида x=f(_T), y(x)=g(_T), где _T – параметр. Константы, входящие в общее решение, представляются в виде _C1, _ C2,..., _ Cn.
Если задан параметр explicit=true, то решение, по возможности, будет возвращено в явном виде. По умолчанию считается explicit=false.
Значение method=laplace задаёт способ решения с использования преобразования Лапласа. Одно из преимуществ этого метода – то, что в этом случае уравнения могут содержать функции с особенностями, например Дирака или Хевисайда.
Значение type=series задаёт метод решения в рядах. Порядок решения определяется значением переменной среды Order. Напомним, что формальные производные можно задавать с помощью оператора D. Например, вторая производная функции y в точке 0 может быть записана как D(D( y ))( 0 ) или (D@@2)( y )( 0 ).
По значению output=basis система возвращает список, содержащий множество функций, входящих в общее решение однородного уравнения. Для неоднородных уравнений этот список содержит ещё и частные решения.
Значение type=numeric определяет, что решение будет находиться численно. Если используется это значение, то после него может быть указан метод решения – одно из значений:
method=rkf45 – метод Рунге-Кутта 4,5-го порядка, используется по умолчанию;
method=dverk78 – метод Рунге-Кутта 7,8-го порядка;
method=classical – некоторые классические методы типа метода Эйлера второго порядка. Используется фиксированный шаг, что не подходит для высоких точностей вычислений;
method=gear, method=mgear – одношаговый и многошаговый методы Геарса;
method=lsode – метод Левермора решения жестких задач для ОДУ.
Для каждого из методов решения имеется набор дополнительных режимов. Более подробную информацию по каждому из методов можно посмотреть командами ?dsolve[numeric], ?dsolve[rkf45], ?dsolve[dverk78], ?dsolve[classical], ?dsolve[gear], ?dsolve[mgear], ?dsolve[lsode].
Кроме этой команды в системе имеется дополнительная библиотека Detools, предназначенная для решения и визуализации обыкновенных дифференциальных уравнений и уравнений в частных производных.
Примеры:
> eqn:= diff( y(x),x$2 ) -y(x)=0;
> dsolve( eqn,y(x) );
y(x) = _C1 exp(x) + _C2 exp(-x)
Сделаем проверку:
> simplify(subs( %,eqn ));
0 = 0
> dsolve({diff( v(t),t ) +2*t=0, v(1)=5 }, v(t) );
v(t) = -t + 6
> dsolve(diff( y(x),x ) - a*y(x) = 0, y(x), explicit=true);
y(x) = exp(a x) _C1
> dsolve({diff( y(t),t$2 ) +5* diff( y(t),t ) +6*y(t)=0,y(0)=0, D( y )( 0 ) =1 }, y(t) );
y(t) = exp(-2 t) - exp(-3 t)
>eqn1:= diff( y(t),t ) =z(t), diff( z(t),t ) =y(t);
> eqn2:=y(0)=0, z(0)=1;
eqn2:= y(0) = 0, z(0) = 1
> dsolve( {eqn1,eqn2},{y(t),z(t)} );
{z(t) = 1/2 exp(-t) + 1/2 exp(t), y(t) = 1/2 exp(t) - 1/2 exp(-t)}
Дата публикования: 2014-11-29; Прочитано: 309 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!