简单微分方程的问题求解与绘制解决方案

时间:2019-11-19 21:10:50

标签: python matplotlib odeint

我正在尝试用python中R(0)= 0的初始条件来求解微分方程R ^ {2} = 1 / R。当我从mathematica中得到这个解时,我应该得到R'(t)=(3/2 * t)^(2/3)的解。 Plot of solution to R'[t]^2 = 1/R with initial condition R(0) = 0

我在python中使用了以下代码:

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

sqrt = np.sqrt

# function that returns dy/dt
def model(y,t):
    #k = 1
    dydt = sqrt(1/y)
    return dydt

# initial condition
y0 = [0.0]

# time points
t = np.linspace(0,5)

# solve ODE
y = odeint(model,y0,t)

# plot results
plt.plot(t,y)
plt.ylabel('$R/R_0$')
plt.xticks([])
plt.yticks([])
plt.show()

但是我只得到0,因为我在某个时刻python plot of differential equation R'[t]^2 = 1/R, which is not correct显然被零除。有人可以指出我该怎么做才能获得解决方案并绘制我所期望的图。

谢谢

2 个答案:

答案 0 :(得分:0)

您的模型需要更改。我得到您的方程式,解决方案应该是这样的https://www.wolframalpha.com/input/?i=R%27%28t%29%5E2+%3D+1%2FR


import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
# function that returns dy/dt
def model(y,t):
    #k = 1
    dydt = 1*y**-1/2
    return dydt
# initial condition
y0 = 0.1

# time points
t = np.linspace(0,20)

# solve ODE
y = odeint(model,y0,t)

# plot results
plt.plot(t,y)
plt.ylabel('$R$')
plt.xlabel('$t$')
plt.xticks([])
plt.yticks([])
plt.show()

答案 1 :(得分:0)

您的起始值为0,这导致导数为零(y * -1,或更简单的-y),这意味着0将与当前y值相加,因此对于整体整合。您的代码正确,但公式不正确。

我在您的链接中看到一个1 / R,因此,例如dydt = 1/y;它将失败,因为它导致被零除,所以不要从零开始,因为您的导数没有在那里定义。您导入但从未使用过的地方似乎还有一个平方根。