如何定义与 scipy.integrate.solve_ivp 一起使用的函数
How to define a function to use with scipy.integrate.solve_ivp
我正在尝试使用 scipy.integrate.solve_ivp
求解微分方程
L*Q'' + R*Q' + (1/C)*Q = E(t), E(t) = 230*sin(50*t)
对于 Q(t) 和 Q'(t)
C = 0.0014 #F
dQ_0 = 2.6 #A
L = 1.8 #H
n = 575 #/
Q_0 = 1e-06 #C
R = 43 #Ohm
t_f = 2.8 #s
import numpy as np
from scipy.integrate import solve_ivp
t = np.linspace(0, t_f, n)
def E(x):
return 230*np.sin(50*x)
y = E(y)
def Q(t, y, R, L, C):
return (y - L*Q'' - R*Q')*C
init_cond = [Q_0, dQ_0]
y_ivp = solve_ivp(Q, t_span=(0, t_f), y0=init_cond)
我只是想了解如何在 scipy.integrate.solve_ivp
中正确定义作为参数 'fun' 传递的函数
solve_ivp
没有参数传递机制,所以把参数当作全局变量。您正在为 Q
制定 ODE,因为它是二阶 ODE,状态还包含一阶导数,正如您在初始状态的组合中以某种方式认识到的那样。然后,ODE 函数需要在给定状态下生成导数值。确定Q(t)=Q[0]
和Q'(t)=Q[1]
,然后
def Q_ode(t, Q):
return [ Q[1], (E(t) - R*Q[1] - (1/C)*Q[0])/L ]
我会继续用字母 Q
来命名包含 Q
值的变量。
我正在尝试使用 scipy.integrate.solve_ivp
求解微分方程L*Q'' + R*Q' + (1/C)*Q = E(t), E(t) = 230*sin(50*t)
对于 Q(t) 和 Q'(t)
C = 0.0014 #F
dQ_0 = 2.6 #A
L = 1.8 #H
n = 575 #/
Q_0 = 1e-06 #C
R = 43 #Ohm
t_f = 2.8 #s
import numpy as np
from scipy.integrate import solve_ivp
t = np.linspace(0, t_f, n)
def E(x):
return 230*np.sin(50*x)
y = E(y)
def Q(t, y, R, L, C):
return (y - L*Q'' - R*Q')*C
init_cond = [Q_0, dQ_0]
y_ivp = solve_ivp(Q, t_span=(0, t_f), y0=init_cond)
我只是想了解如何在 scipy.integrate.solve_ivp
中正确定义作为参数 'fun' 传递的函数solve_ivp
没有参数传递机制,所以把参数当作全局变量。您正在为 Q
制定 ODE,因为它是二阶 ODE,状态还包含一阶导数,正如您在初始状态的组合中以某种方式认识到的那样。然后,ODE 函数需要在给定状态下生成导数值。确定Q(t)=Q[0]
和Q'(t)=Q[1]
,然后
def Q_ode(t, Q):
return [ Q[1], (E(t) - R*Q[1] - (1/C)*Q[0])/L ]
我会继续用字母 Q
来命名包含 Q
值的变量。