2014-01-13 14 views
1

我正在求解一組微分方程,其中的係數由解決方案本身決定。這裏是一個小例子:如何找到想要的初始條件?

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

查看'ParametricNDSolve'。 –

+0

@ b.gatessucks:正是我想要的。謝謝! –

回答

0

這可能是一個更好的方法。

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

{{M [R] - >(A R^3)/ 3 + C [1]}}。 。 。 (公式1)

從等式如圖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