【发布时间】:2011-07-25 16:44:25
【问题描述】:
mathematica 中有没有办法为 NDSolve 提供可变系数?我需要改变系数值并创建多个图表,但除了为每个图表重新输入整个表达式之外,我无法找到一种方法来做到这一点。这是我想做的一个例子(非功能性);希望它接近工作:
X[\[CapitalDelta]_, \[CapitalOmega]_, \[CapitalGamma]_] =
NDSolve[{\[Rho]eg'[t] ==
(I*\[CapitalDelta] - .5*\[CapitalGamma])*\[Rho]eg[t] -
I*.5*\[CapitalOmega]*\[Rho]ee[t] +
I*.5*\[CapitalOmega]*\[Rho]gg[t],
\[Rho]ge'[t] == (-I*\[CapitalDelta] - .5*\[CapitalGamma])*\[Rho]ge[t] +
I*.5*\[CapitalOmega]\[Conjugate]*\[Rho]ee[t] -
I*.5*\[CapitalOmega]\[Conjugate]*\[Rho]gg[t],
\[Rho]ee'[t] == -I*.5*\[CapitalOmega]\[Conjugate]*\[Rho]eg[t] +
I*.5*\[CapitalOmega]*\[Rho]ge[t] - \[CapitalGamma]*\[Rho]ee[t],
\[Rho]gg'[t] == I*.5*\[CapitalOmega]\[Conjugate]*\[Rho]eg[t] -
I*.5*\[CapitalOmega]*\[Rho]ge[t] + \[CapitalGamma]*\[Rho]ee[t],
\[Rho]ee[0] == 0, \[Rho]gg[0] == 1, \[Rho]ge[0] == 0, \[Rho]eg[0] == 0},
{\[Rho]ee, \[Rho]eg, \[Rho]ge, \[Rho]gg}, {t, 0, 12}];
Plot[Evaluate[\[Rho]ee[t] /. X[5, 2, 6]], {t, 0, 10},PlotRange -> {0, 1}]
这样我只需要重新调用带有系数输入的绘图命令,而不是一遍又一遍地重新输入整个序列。这会让事情变得更干净。
PS:为看起来很糟糕的代码道歉。直到现在我才意识到mathematica 没有保留字符转换。
EDIT 格式更好的版本:
【问题讨论】:
-
我们需要一个mathematica 渲染器!和乳胶和,和!!
-
我只是在这里猜测;你可以对系数使用设置延迟吗?我这里没有mathematica,我什至无法从01:07的SO渲染中猜出代码在做什么:)
-
@stefan 当格式化很重要时,我会发布表达式的位图。
-
@Sjoerd 是的,但是由于我们有一个数学标签,我们应该以某种方式使代码格式合理或没有标签 imo。 Mathematica 大约有 50% 的图形 :)
-
@Eliot 我编辑了您的问题以包含格式化方程式的图形。它正在等待批准。实际上,mma 转换为 ASCII 样式是有好处的。几乎没有论坛能够使用这些特殊字符。
标签: function variables wolfram-mathematica plot