绘制微分方程的解曲线

时间:2011-07-23 05:56:44

标签: math matlab wolfram-mathematica maple

我有一些微分方程,我想为各种起始值绘制解决方案N_0

以下是公式:

dN\dt= bN^2 - aN

dN\dt = bN^2 (1 - N\K) - aN

我该怎么做呢?

我并不真正关心使用的语言。在专用数学方面,我的计算机上有mathematica和matlab。我有机会接触到枫树。我必须做更多这方面的事情,我想要有任何语言的例子,因为它会帮助我弄清楚我想要使用哪一个并学习它。

4 个答案:

答案 0 :(得分:7)

我会假装第一个不能通过分析解决,以便展示如何在mathematica中使用一般的ODE。

定义

p1[n0_, a_, b_, uplim_: 10] :=(n /. First@NDSolve[
      {n'[t] == b*n[t]^2 - a*n[t], n[0] == n0},n, {t, 0, uplim}]

返回ODE的解,即a = p1[.1, 2., 3.]然后,例如a[.3]告诉您n(.3)。然后可以做一些像

这样的事情
Show[Table[ans = p1[n0, 1, 1];
 Plot[ans[t], {t, 0, 10}, PlotRange \[Rule] Full],
 {n0, 0, 1, .05}], PlotRange \[Rule] {{0, 5}, {0, 1}}]

绘制了一些具有不同初始值的解决方案:

enter image description here

或者,为了深入了解解决方案,可以交互式操纵abn0的值:

Manipulate[
 ans = p1[n0, a, b];
 Plot[ans[t], {t, 0, 10},PlotRange -> {0, 1}],
 {{n0, .1}, 0, 1},
 {{a, 1}, 0, 2},
 {{b, 1}, 0, 2}]

给出类似

的内容

enter image description here

控件处于活动状态(即你移动控件并更改图表;试试看看我的意思;注意你可以设置初始条件给出不同解决方案的参数)。

当然,这可以任意复杂化。同样在这种特殊情况下,这种ODE很容易进行分析整合,但这种数值方法可以应用于通用的ODE(以及许多PDE)。

答案 1 :(得分:2)

除了几个好的答案之外,如果您只想快速勾画ODE针对许多起始值的解决方案,作为指导,您可以随时进行单行StreamPlot。假设a==1b==1以及dy/dx == x^2 - x

StreamPlot[{1, x^2 - x}, {x, -3, 3}, {y, -3, 3}]

enter image description here

StreamStyle -> "Line"会给你一条线,没有箭头。

答案 2 :(得分:0)

Mathematica 中你使用NDSolve(除非它可以通过分析解决,在这种情况下你使用DSolve。所以对于你尝试的第一个等式:

b = 1.1; a = 2;
s = NDSolve[{n'[t] == b n[t]^2 - a n[t], n[0] == 1}, n, {t, 0, 10}];
Plot[Evaluate[n[t] /. s], {t, 1, 10}, PlotRange -> All]

我不知道如何使用a,b或N0,但我得到了这个结果:

Plot of n[t]

答案 3 :(得分:0)

如果您愿意以数字方式求解方程,MATLAB有一组可能有用的ODE求解器。查看ode45函数here的文档。

一般方法是定义描述微分方程右侧的“ode函数”。然后,您将此函数以及初始条件和积分范围传递给ode求解器。

这种方法的一个有吸引力的特点是它可以直接扩展到耦合ODE的复杂系统。

希望这有帮助。