没有足够的值使用odeint解压缩(预期为2,得到1)

时间:2019-12-20 00:45:49

标签: python

我一直在尝试数值求解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)。

2 个答案:

答案 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

有什么建议吗?