我有一些微分方程,我想为各种起始值绘制解决方案N_0
以下是方程式:
dN\dt= bN^2 - aN
dN\dt = bN^2 (1 - N\K) - aN
我该怎么办?
我真的不关心使用的语言。在专用数学方面,我的计算机上有数学和 matlab。我可以使用枫树。我必须做更多这样的事情,而且我想有任何语言的例子,因为它会帮助我找出我想使用和学习哪一种语言。
我有一些微分方程,我想为各种起始值绘制解决方案N_0
以下是方程式:
dN\dt= bN^2 - aN
dN\dt = bN^2 (1 - N\K) - aN
我该怎么办?
我真的不关心使用的语言。在专用数学方面,我的计算机上有数学和 matlab。我可以使用枫树。我必须做更多这样的事情,而且我想有任何语言的例子,因为它会帮助我找出我想使用和学习哪一种语言。
我将假装第一个无法解析解决,以展示如何在数学中使用一般 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.]
然后 ega[.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}}]
它绘制了一些具有不同初始值的解决方案:
或者,为了深入了解解决方案,可以交互地操纵 和的值a
:b
n0
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}]
这给出了类似的东西
控件处于活动状态(即您移动它们并且情节发生变化;尝试实时了解我的意思;请注意,您可以设置初始条件给出不同解决方案的参数)。
当然,这可以任意变得更复杂。同样在这种特殊情况下,这个 ODE 很容易进行分析积分,但是这种数值方法可以应用于通用 ODE(以及许多 PDE)。
除了几个好的答案之外,如果您只是想要一个 ODE 解决方案的许多起始值的快速草图,作为指导,您总是可以做一个单行StreamPlot
. 假设a==1
和b==1
,并且dy/dx == x^2 - x
。
StreamPlot[{1, x^2 - x}, {x, -3, 3}, {y, -3, 3}]
StreamStyle -> "Line"
只会给你线条,没有箭头。
如果您乐于以数值方式求解方程,请MATLAB
使用一组可能有用的 ODE 求解器。在此处查看该ode45
函数的文档。
一般的方法是定义一个描述微分方程右侧的“ode 函数”。然后将此函数连同初始条件和积分范围一起传递给ode
求解器。
这种方法的一个吸引人的特点是它以直接的方式扩展到耦合 ODE 的复杂系统。
希望这可以帮助。
在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 使用什么,但我得到了这个结果: