我正在解一组微分方程,其中的系数由解本身决定。下面是一个最小的例子:
s = NDSolve[{M'[r] == a r^2, M[0] == 0}, M, r];
Plot[Evaluate[M[r] /. s], {r, 0, 1}]其中,通过要求M[r=1]=1来确定a。一旦找到了正确的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}]其中,通过要求M[1]=1来确定a。
谢谢!
发布于 2014-01-16 17:28:14
可能有一种更好的方法来做到这一点。
DSolve[D[M[r], r] == a r^2, M[r], r]{{Mr -> (a r^3)/3 + C1}}。。。(等式1)
来自eqn。1,当r=0时,M[0] == C[1],因此
M[r] == (a r^3)/3 + M[0]给定M=0
M[r] == (a r^3)/3同样给定M1 = 1,a == 3,因此
M[r_] := r^3
Plot[M[r], {r, 0, 10}]

https://stackoverflow.com/questions/21086825
复制相似问题