具有时间延迟的LTI系统的传递函数具有分子项exp(-Td*s),其中Td是时间延迟.在Matlab中,可以通过多种方式创建这样的LTI系统(例如,使用"s"运算符并直接设置指数项或通过设置对象的inputdelay outputdelay属性tf.)但是,我无法在Scipy Signal LTI中找到任何方法对象.我还检查了Python控制系统库,但仍然找不到方法.
我不想将Pade近似用于时间延迟,并且想要为LTI系统设置准确的时间延迟.
有谁知道如何在Scipy或任何其他外部Python库中实现这一点?
请看下面的代码。
import numpy
def f(u):
print(u) # to check dimensions of the input
return 10
u= numpy.array([[1,2],[3,4]])
scipy.optimize.minimize(f,u)
Run Code Online (Sandbox Code Playgroud)
输出:
[ 1. 2. 3. 4.]
[ 1.00000001 2. 3. 4. ]
[ 1. 2.00000001 3. 4. ]
[ 1. 2. 3.00000001 4. ]
[ 1. 2. 3. 4.00000001]
[ 1. 2. 3. 4.]
Out[24]:
fun: 10
hess_inv: array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]])
jac: array([ 0., 0., 0., 0.])
message: 'Optimization …Run Code Online (Sandbox Code Playgroud) 我正在尝试解决gekko中的简单混合操作。混合器mx需要两个入口流Feed1和Feed2。预期结果是出口流mx.outlet的质量流量应为入口流的质量流量的总和。这是我尝试过的。
from gekko import GEKKO, chemical
m = GEKKO(remote=False)
f = chemical.Flowsheet(m)
P = chemical.Properties(m)
c1 = P.compound('Butane')
c2 = P.compound('Propane')
feed1 = f.stream()
m_feed1 = f.massflows(sn= feed1.name)
m_feed1.mdot = 200
m_feed1.mdoti = [50,150]
feed2= f.stream()
m_feed2 = f.massflows(sn= feed2.name)
m_feed2.mdot = 200
m_feed2.mdoti = [50,150]
mx = f.mixer(ni=2)
mx.inlet = [feed1.name,feed2.name]
m.options.SOLVER = 1
mf = f.massflows(sn = mx.outlet)
m.solve()
Run Code Online (Sandbox Code Playgroud)
代码成功运行。但是,打开 mf.mdot似乎输出了不正确的值[-1.8220132454e-06]。预期值为400。有什么帮助,我的代码有什么问题?