Поля направлений, дифференциальные уравнения и решение на одном графике

Предположим, что у меня есть следующее дифференциальное уравнение:

\dot{y} = a*(y-0.5) + b*(y-0.5)^3

Мне любопытно посмотреть, можно ли изобразить на одной диаграмме фактическое дифференциальное уравнение (как указано выше) с точками для y, которые становятся нулем, поля направлений и решение дифференциального уравнения. Я хочу иметь возможность видеть, стабильны ли y, что дифференциальное уравнение становится равным нулю, или нет.

Я использовал plotdf в wxmaxima, но я также согласен с решениями для Mathematica и Matlab.

Заранее спасибо.


person Echetlaeus    schedule 11.01.2015    source источник
comment
Вы хотите что-то вроде plotdf(a*(y-0.5)+b*(y-0.5)^3, [trajectory_at, t0, y0], [xfun, "any equation you want in string form"]);   -  person Fred Senese    schedule 12.01.2015
comment
Без начальных условий или значений для a или b попробуйте следующее: sols = Map[y[t] /. # &, Flatten[FullSimplify[ DSolve[y'[t]==a*(y[t]-1/2)+b*(y[t]-1/2)^3, y[t], t ]]]]/.{a-›1,b-›2,C[1]-›4}, а затем это: Plot[sols, {t, -40, -32}]. С дополнительной информацией это может быть улучшено   -  person Bill    schedule 12.01.2015
comment
@Bill Я понимаю, что вы дали код Mathematica. Я бы сказал, что t должно быть от 0 до 1. Если мы попытаемся решить a*(y-0.5) + b*(y-0.5)^3 = 0, мы получим три решения. Я спросил вот что. Сделайте графики, которые показывают вышеупомянутые решения вместе с полями направлений и фактическим решением дифференциального уравнения. Сделав это, я надеюсь, что смогу проверить стабильность трех точек по графику. Надеюсь, я ясно выразился. Для a и b попробую разные случаи.   -  person Echetlaeus    schedule 13.01.2015
comment
@Fred Я попробую этот код в Maxima. Я смог сделать что-то подобное, например: lotdf(a*(y-0.5)+b*(y-0.5)^3, [trajectory_at, t0, y0], [x, 0, 1]). Попробую поставить как xfun решение дифференциального уравнения и посмотрю.   -  person Echetlaeus    schedule 13.01.2015


Ответы (2)


Попробуй это. Мне пришлось выбирать числовые значения для a и b и начальные условия...

expr: a*(y-0.5) + b*(y-0.5)^3, a=2, b=-2;
solve(expr, y);
map(rhs, %), numer;
simplode(%, ";");
plotdf(expr, [y, -2, 2], [trajectory_at, 0, 0], [xfun, %]);

Результат

введите здесь описание изображения

Сначала выражение решается относительно y. Затем составьте список правых частей решений. Превратите список в строку с точкой с запятой в качестве разделителя. Решения в строке отображаются с опцией xfun; опция trajectory_at отображает решение дифференциального уравнения, которое проходит через выбранную точку (в данном случае [0,0]). Вы можете нажать на дополнительные точки, чтобы построить дополнительные решения:

введите здесь описание изображения

person Fred Senese    schedule 13.01.2015
comment
Пожалуйста! Кстати, при работе над этим я думаю, что, возможно, нашел ошибку в том, как xfunанализирует свои аргументы --- я собираюсь сообщить об этом команде Maxima. Заметили, что я добавил numer при редактировании? Это работает вокруг ошибки. - person Fred Senese; 14.01.2015

Что-то интересное, что вы можете попробовать в Mathematica: -

введите здесь описание изображения

person Chris Degnen    schedule 13.01.2015
comment
Я использую студенческую версию для Mathematica. Хоть и ставлю код, но получаю окно без результата. - person Echetlaeus; 14.01.2015
comment
См. документацию EquationTrekker: Чтобы выбрать начальное условие, все, что вам нужно сделать это установить курсор и щелкнуть правой кнопкой мыши. ... Если удерживать правую кнопку и перетаскивать курсор, решение будет обновляться в режиме реального времени по мере перетаскивания. - person Chris Degnen; 14.01.2015
comment
Весьма признателен. Молодец! - person Echetlaeus; 14.01.2015