2015-01-11 3 views
2

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

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

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

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

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

+0

Хотите ли вы что-то вроде 'plotdf (а * (y-0.5) + b * (y-0.5)^3, [trajectory_at, t0, y0], [xfun, "любое уравнение, которое вы хотите в строковой форме"]); ' –

+0

Без начальных условий или значений для 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}]. С дополнительной информацией это можно было бы улучшить – Bill

+0

@Bill Я понимаю, что вы дали код Mathematica. Я бы сказал, что 't' должно быть от 0 до 1. Если мы попытаемся решить' a * (y-0.5) + b * (y-0.5)^3 = 0', мы получим три решения. Я спросил об этом. Сделайте графики, которые показывают вышеупомянутые решения, а также поля направления и фактическое решение дифференциального уравнения. Делая это, я надеюсь, что смогу проверить стабильность трех точек по графику. Надеюсь, я поняла. Для 'a' и' b' я попробую разные случаи. – Echetlaeus

ответ

3

Попробуйте это. Я должен был выбрать числовые значения для а и Ь и начальных условий ...

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, %]); 

В результате

enter image description here

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

enter image description here

+0

Спасибо, Фред, этот код «Maxima» работает хорошо. – Echetlaeus

+0

Добро пожаловать! Кстати, в этом я думаю, возможно, нашел ошибку в том, как 'xfun' обрабатывает свои аргументы --- я собираюсь сообщить об этом команде Maxima. Обратите внимание, что я добавил «число» при редактировании? Это работает вокруг ошибки. –

0

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

enter image description here

+0

Я использую студенческое издание для Mathematica. Хотя я помещаю код, я получаю окно без каких-либо результатов. – Echetlaeus

+1

См. [Документация EquationTrekker] (http://reference.wolfram.com/language/EquationTrekker/tutorial/EquationTrekker.html): «Чтобы выбрать начальное условие, все, что вам нужно сделать, - поместить курсор и щелкнуть правой кнопкой мыши. ...Если вы удерживаете правую кнопку нажатой и перетаскиваете курсор, решение будет обновляться в режиме реального времени при перетаскивании. » –

+0

Очень важно. – Echetlaeus