我正在尝试使用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'传递的函数
答案 0 :(得分:0)
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
值的变量。