我正在求解一组微分方程,其中系数由解决方案本身决定。这是一个最小的例子:
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
确定的。
谢谢!
答案 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}]