Графическое представление решений дифференциальных уравнений
Функция DEplot из пакета DEtools
Специально для решения и визуализации решений дифференциальных уравнений и систем с дифференциальными уравнениями служит инструментальный пакет DEtools. В него входит ряд функций для построения наиболее сложных и изысканных графиков решения дифференциальных уравнений.
Основной из этих функций является функция DEplot. Функция DEplot может записываться в нескольких формах:
DEplot(deqns, vars .trange .eqns) DEplot(deqns, vans, trange .inits .eqns) DEplot(deqns .vars .trange, уrange, xrgnge, eqns). DEplot(deqns .vars, trange. Inits, xrange .yrange, eqns)
Здесь deqns – список или множество, содержащее систему дифференциальных уравнений первого порядка или одиночное уравнение любого порядка; vars – зависимая переменная или список либо множество зависимых переменных; trange – область изменения независимой переменной t; Inits – начальные условия для решения; yrange – область изменения для первой зависимой переменной, xrange – область изменения для второй зависимой переменной; eqns – опция, записываемая в виде keyword-value. Замена имен переменных другими в данном случае недопустима.
Эта функция обеспечивает численное решение дифференциальных уравнений или их систем при одной независимой переменной t и строит графики решения. Для автономных систем эти графики строятся в виде векторного поля направлений, а для неавтономных систем – только в виде кривых решения.
По умолчанию реализуется метод Рунге-Кутта 4-го порядка, что соответствует опции methodiclassical[rk4]. С функцией DEplot могут использоваться следующие параметры:
- arrows = type – тип стрелки векторного поля ('SMALL', 'MEDIUM', 'LARGE', 'LINE' или 'NONE');
- colour, color = arrowcolour – цвет стрелок (задается 7 способами);
- dirgrid = [integer,integer] – число линий сетки (по умолчанию [20, 20]);
- iterations = integer – количество итераций, представленное целым числом;
- linесоlor, linecolor = lineinfo – цвет линии (задается 5 способами);
- method='rk4' – задает метод решения ('euler', 'backeuler', 'impeuler' или 'rk4');
- obsrange = TRUE.FALSE – задает (при TRUE) прерывание вычислений, если кривая решения выходит из области обзора;
- scene = [name.name] – задает имена зависимых переменных, для которых строится график;
- stepsize = h – шаг решения, по умолчанию равный abs((b-a))/20 и представленный вещественным значением.
На рис. 13.8 показано решение системы дифференциальных уравнений описывающих модель Лотки-Вольтерра при заданных в документе изменениях t, x(t) и y(t):
x'(t)=x(t)(1-y(t) y'(t)= 0.3y(t)(x(t)-1),
Решение представлено в виде векторного поля стрелки которого являются касательными к кривым решения (сами эти кривые не строятся). Обратите внимание на функциональную закраску стрелок векторного поля, делающую решение особенно наглядным (правда, лишь на экране цветного дисплея, а не на страницах книги).
Рис. 13.8. Решение системы дифференциальных уравнений Лотки-Вольтерра, с выводом в виде графика векторного поля