我一直在尝试数值求解Rayleigh Plesset方程。我写了
import numpy as np
from matplotlib import pyplot as plt
from scipy.integrate import odeint
# define equations
def equation(y0, t):
R, u = y0
f = [u, 1/(R*rho)*(4*miu*u/R-2*sigma/R)-3*u**2/(2*R)]
return f
def plot_results(time, R_1):
plt.plot(time, R_1)
s = "for initial radius" + str(R_0)
plt.title("Oscillations in Sonoluinescing Bubble Radius" + s)
plt.xlabel("Time")
plt.yalbel("Radius of bubble")
plt.grid(True)
plt.show()
# parameters
time = np.arange(0, 1.0, 0.025)
rho = 1000
sigma = 0.0725
miu = 0.001
P_v = 2330
P_0 = 100000
P_ext = 70000*np.sin(2*np.pi*31700*time)
# initial conditions
R_0 = 0.01
R_1 = odeint(equation, [R_0], time)
plot_results(time, R_1)
但是,当我运行代码时,发现以下错误:ValueError:没有足够的值要解压(预期2,得到1)。
答案 0 :(得分:0)
在这行代码中;
R, u = y0
您试图在一行中设置2个变量,但是仅提供一个值。
您需要在此处设置2个值或仅分配一个变量。
R, u = y0, 1
为例。
答案 1 :(得分:0)
好的。 因此,我将两个变量传递给方程式,代码如下所示:
''' 将numpy导入为np 从matplotlib导入pyplot作为plt 从scipy.integrate导入odeint
# define equations
def equation(y0, t):
R, u = y0
return u, (P_g-P_0-70000*np.sin(2*np.pi*31700*t)-4*miu*u/R- 2*sigma/R)/(R*rho)-3*u**2/(2*R)
def plot_results(time, R_1):
plt.plot(time, R_1)
s = "for initial radius" + str(R_0)
plt.title("Oscillations in Sonoluminescing Bubble Radius" + s)
plt.xlabel("Time")
plt.ylabel("Radius of bubble")
plt.grid(True)
plt.show()
# parameters
time = np.arange(0, 0.0001, 0.000000000025)
rho = 1000
sigma = 0.0725
miu = 0.001
P_g = 2330
P_0 = 10000
# initial conditions
R_0 = 0.0001
u_0 = 0
R_1 = odeint(equation, [R_0, u_0], time)
plot_results(time, R_1)
但是,当我运行代码时,我得到了一个无用的图形,根本没有任何意义。我使用了此处定义的参数:https://people.eng.unimelb.edu.au/asho/AdvCompMech/Assignment_1.pdf
有什么建议吗?