2016-11-30 55 views
0

我正在研究一个电气工程项目,我们将RLC电路中的电容上的电压绘制为时间的函数。我在以下教程中使用我的代码:Python-ODE for RLC Circuit。我的代码功能齐全,但我只想更好地理解用户定义的函数和SciPy集成函数的工作原理。我已阅读文档,但我仍然有一些具体问题。这里是我的代码:这个用户定义的函数如何与scipy集成odeint?

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 

这里是我的问题:

  1. 什么样的作用是参数值A和T的演奏在功能RLC?为什么将A分配给Vc(电容器电压)和m(v'的虚拟变量)?甚至用过吗?
  2. 当我在odeint模块里面调用RLC函数时,为什么没有任何参数?
  3. odeint模块末尾的.T是什么意思?我在文档中找不到任何关于它的信息。

感谢您对此的任何见解。我希望这不是一个懒惰的问题,但我认为完全理解这将帮助我很多。

回答

0

传递到odeint的ODE函数需要格式为f(state, time),其中time是自变量,state是状态向量。相应的(矢量值)微分方程是y'(t)=f(y(t),t)

  1. )对于需要高阶方程转换为一阶系统的标准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是时间不变的。

  2. )您正在传递函数作为参考/地址,而不是函数值

  3. ),意思是“转置”。 odeint的结果是状态向量列表,它们是数字对。转置它将它转换成一对可以分配给一对变量的列表。