【问题标题】:How does this user-defined function work with scipy integrate odeint?这个用户定义的函数如何与 scipy 集成 odeint 一起工作?
【发布时间】:2017-04-15 02:13:25
【问题描述】:

我正在从事一个电气工程项目,在该项目中,我们将 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

这是我的问题:

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

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

【问题讨论】:

    标签: python function scipy user-defined-functions ode


    【解决方案1】:

    传递给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 的结果是状态向量列表,它们是成对的数字。转置它会将其转换为一对可以分配给一对变量的列表。

    【讨论】:

      猜你喜欢
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 2017-09-19
      • 2021-08-11
      • 1970-01-01
      • 2020-05-18
      相关资源
      最近更新 更多