如何定义要与scipy.integrate.solve_ivp一起使用的函数

时间:2019-05-29 09:48:13

标签: numpy scipy differential-equations

我正在尝试使用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'传递的函数

1 个答案:

答案 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值的变量。