Math 绘制微分方程的解曲线

Math 绘制微分方程的解曲线,math,matlab,wolfram-mathematica,maple,Math,Matlab,Wolfram Mathematica,Maple,我有一些微分方程,我想为各种起始值画出解N_0 以下是方程式: dN\dt= bN^2 - aN dN\dt = bN^2 (1 - N\K) - aN 我该怎么做呢 我真的不在乎所用的语言。在专用数学方面,我的计算机上有mathematica和matlab。我有权接触枫树。我必须做更多的这方面的工作,我想从任何语言中得到一些例子,因为这将帮助我找出我想要使用和学习的语言 在Mathematica中,您使用NDSolve(除非它可以解析求解,在这种情况下,您使用DSolve。因此,对于您的第

我有一些微分方程,我想为各种起始值画出解
N_0

以下是方程式:

dN\dt= bN^2 - aN

dN\dt = bN^2 (1 - N\K) - aN
我该怎么做呢

我真的不在乎所用的语言。在专用数学方面,我的计算机上有mathematica和matlab。我有权接触枫树。我必须做更多的这方面的工作,我想从任何语言中得到一些例子,因为这将帮助我找出我想要使用和学习的语言

在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使用什么,但我得到了以下结果:

在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使用什么,但我得到了以下结果:


如果您乐于用数值方法求解方程,
MATLAB
提供了一组可能有用的ODE解算器。请查看
ode45
函数的文档

一般方法是定义一个描述微分方程右侧的“ode函数”。然后将该函数连同初始条件和积分范围传递给
ode
解算器

这种方法的一个吸引人的特点是,它以一种直接的方式扩展到耦合ODE的复杂系统


希望这能有所帮助。

如果您乐于用数值方法求解方程,
MATLAB
提供了一组可能有用的ODE解算器。请查看
ode45
函数的文档

一般方法是定义一个描述微分方程右侧的“ode函数”。然后将该函数连同初始条件和积分范围传递给
ode
解算器

这种方法的一个吸引人的特点是,它以一种直接的方式扩展到耦合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}}]
其中绘制了几个具有不同初始值的解决方案:

或者,为了深入了解解决方案,可以交互操作
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}]
这就产生了

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}}]

当控件处于活动状态时(即,移动控件,绘图会发生变化;请尝试使用live来了解我的意思;请注意,您可以设置初始条件给出不同解决方案的参数)


当然,这可以任意变得更复杂。在这种特殊情况下,这种常微分方程很容易进行解析积分,但这种数值方法可以应用于一般常微分方程(以及许多偏微分方程).

我将假装第一个问题不能用解析法解决,以展示如何在数学中运用一般的颂歌

定义

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}}]
其中绘制了几个具有不同初始值的解决方案:

或者,为了深入了解解决方案,可以交互操作
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}]
这就产生了

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}}]

当控件处于活动状态时(即,移动控件,绘图会发生变化;请尝试使用live来了解我的意思;请注意,您可以设置初始条件给出不同解决方案的参数)


当然,这可以任意变得更复杂。在这种特殊情况下,这种常微分方程很容易进行解析积分,但这种数值方法可以应用于一般常微分方程(以及许多偏微分方程).

除了几个好的答案之外,如果你只是想快速绘制一个ODE的许多起始值的解决方案,作为指导,你总是可以做一行
流程图。假设
a==1
b==1
,以及
dy/dx==x^2-x

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


StreamStyle->“行”
只给你线条,没有箭头。

再加上几个好的答案,如果你只是想快速绘制一个ODE的许多起始值的解决方案,作为指导,你总是可以做一行流程图。假设
a==1
b==1
,以及
dy/dx==x^2-x

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


StreamStyle->“Line”
只提供直线,没有箭头。

{a,b,N(0)}和{a,b,K,N(0)}是两个大参数空间。您应该指定一个感兴趣的区域。(例如,第一个等式中的a==b){a,b,N(0)}和{a,b,K,N(0)}是两个大参数空间。您应该指定一个感兴趣的区域。(例如,第一个等式中的a==b)…由于
NDSolve
接受初始条件列表,您还可以执行类似于
Plot[(评估[p1[范围[0,1,05],1,1][t]],{t,0,5}]
在同一个图中绘制解决方案列表。由于
NDSolve
接受初始条件列表,您也可以执行类似于
plot[(Evaluate[p1[Range[0,1,05],1,1][t]],{t,0,5}],
的操作来在同一个图中绘制解决方案列表。事实上,我的印象是,处理许多可变ODE更容易通过使用向量表示法,Matlab中的(即常微分方程组)比Mathematica中的(即常微分方程组)。对于一个或几个变量,我更喜欢Mathematica。事实上,我的印象是,在Matlab中处理多个变量常微分方程组(即常微分方程组)比Mathematt更容易