如何定义与 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 值的变量。