我正在开展一个电气工程项目,我们将RLC电路中电容器上的电压绘制成时间的函数。我的代码基于以下教程:Python-ODE for RLC Circuit。我的代码功能齐全但我只是想更好地理解用户定义函数和SciPy集成函数的工作原理。我已阅读文档但仍有一些具体问题。这是我的代码:
from scipy.integrate import odeint # for integrating ode
import matplotlib.pyplot as plt # for plotting commands
import numpy as np #For loadtxt and linspace modules
R,L,C,tl,numplot = np.loadtxt('UserInput_RLC_Values.txt',unpack=True)
def RLC(A,t):
Vc,m=A
V = 2.0 #voltageSource
res=[m,(V-Vc-(m*R*C))/(L*C)]
return res
time = np.linspace(0.0,tl,numplot)
vc,m = odeint(RLC,[0.0,0.0],time).T
以下是我的问题:
感谢您对此有任何见解。我希望这不是一个懒惰的问题,但我认为完全理解这将对我有很大的帮助。
答案 0 :(得分:0)
传递给odeint
的ODE函数需要格式f(state, time)
,其中time
是自变量,state
是状态向量。相应的(向量值)微分方程是y'(t)=f(y(t),t)
)对于标准ODE求解器,您需要将高阶方程转换为一阶系统。这里使用m
作为动量(?)变量m = dVc/dt
。然后dm/dt = d²Vc/dt²
是二阶导数。
如果输入为state = [ Vc, m ]
,则输出必须为[ dVc/dt, dm/dt ] = [ m, Eqn(t,Vc,m) ]
,其中d²Vc/dt² = Eqn(t,Vc,dVc/dt)
是原始等式的一种形式。
t
,即使ODE是时不变的。
)您将函数作为引用/地址传递,而不是函数值
)表示"转置"。 odeint
的结果是状态向量列表,它们是数字对。转置它会将其转换为一对可以分配给一对变量的列表。