如何找到所需的初始条件?

时间:2014-01-13 08:33:31

标签: wolfram-mathematica

我正在求解一组微分方程,其中系数由解决方案本身决定。这是一个最小的例子:

s = NDSolve[{M'[r] == a r^2, M[0] == 0}, M, r]; 
Plot[Evaluate[M[r] /. s], {r, 0, 1}]

其中a是通过要求M[r=1]=1确定的。找到正确的a后,我会正常求解方程并绘制M[r]。在fortran中,我可以迭代a,直到满足这样的要求。我想知道如何用Mathematica做到这一点,或者更好的是,这样做更优雅(不迭代,因为它在Mathematica中耗费时间)。

或者如果你发现上面的例子太傻了,这就是原来的问题:

s = NDSolve[{M'[r] == r^2 Exp[lnp[r]], lnp'[r] == - M[r]/r^2, M[0.01] == 0, lnp[0.01] == a}, {M, lnp}, {r, 0.01, 1}]
Plot[Evaluate[M[r] /. s], {r, 0.01, 1}]

其中a是通过要求M[1]=1确定的。

谢谢!

1 个答案:

答案 0 :(得分:0)

这可能是一种更简洁的方法。

DSolve[D[M[r], r] == a r^2, M[r], r]
  

{{M [r] - > (a r ^ 3)/ 3 + C [1]}}。 。 。 (方程1)

来自eqn。 1,当r = 0时,M[0] == C[1],因此

M[r] == (a r^3)/3 + M[0]

给定M [0] = 0

M[r] == (a r^3)/3

同样给出M [1] = 1,a == 3,因此

M[r_] := r^3

Plot[M[r], {r, 0, 10}]

enter image description here