Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 利用移动视界估计修正参数的矩阵运算_Python_Gekko - Fatal编程技术网

Python 利用移动视界估计修正参数的矩阵运算

Python 利用移动视界估计修正参数的矩阵运算,python,gekko,Python,Gekko,我最近开始尝试用GEKKO进行移动地平线估计。我指定的操纵变量用于我的模型中的热平衡方程,我对模型中的矩阵运算有一些问题 示例代码: from gekko import GEKKO import numpy as np #creating a sample array of input values nt = 51 u_meas = np.zeros(nt) u_meas[3:10] = 1.0 u_meas[10:20] = 2.0 u_meas[20:40] = 0.5 u_meas[40

我最近开始尝试用GEKKO进行移动地平线估计。我指定的操纵变量用于我的模型中的热平衡方程,我对模型中的矩阵运算有一些问题

示例代码:

from gekko import GEKKO
import numpy as np

#creating a sample array of input values
nt = 51
u_meas = np.zeros(nt)
u_meas[3:10] = 1.0
u_meas[10:20] = 2.0
u_meas[20:40] = 0.5
u_meas[40:] = 3.0

p = GEKKO(remote=False)
p.time = np.linspace(0,10,nt)

n = 1 #process model order

#designating u as my input, and that I'm going to be using these measurements to estimate my parameters with MHE
p.u = p.MV(value=u_meas)
p.u.FSTATUS=1

#parameters I'm looking to modulate
p.K = p.FV(value=1, lb = 1, ub = 3) #gain
p.tau = p.FV(value=5, lb = 1, ub = 10) #time constant

p.x = [p.Intermediate(p.u)]

#constants within the model that do not change
X_O2 = 0.5
X_SiO2 = 0.25
X_N2 = 0.1
m_feed = 100

#creating an array with my feed separated into components. This creates a 1D array with the individual feed streams of my components. 
mdot_F_i = (np.tile(m_feed,3)*np.array([X_O2, X_SiO2, X_N2])

#at this point, I want to add my MV values to the end of my component feed array for later heat and mass balance equations. Normally, in my previous model without MHE, I would put

mdot_c_i = np.concatenate(mdot_F_i, x, (other MV variables after))

但是,既然u是GEKKO中指定的MV,而不是一个设定值,那么我在mdot_c_I行中得到一个错误,该错误表示索引0处的数组具有一维,而索引1处的数组具有二维

我猜我必须指定mdot_c_I作为Gekko中的中间变量。我尝试了两种不同的变体,交替指定mdot_c_I作为中间变量,并尝试仅使用MV的值;然而,我一直在犯这个错误

有没有人经历过类似的问题


谢谢大家!

您可以使用
np.append()
而不是
np.concatenate()
来解决此问题。尝试以下方法:

mdot\u c\u i=np.append(mdot\u F\u i,p.u)
如果你想试试的话,这里有一个最简单完整的例子

将numpy导入为np
从gekko进口gekko
m=GEKKO(远程=False)
x=m.Array(m.Var,3,lb=-10,ub=10)
y=m.Var(5,磅=5,磅=5)
z=np.append(x,y)
m、 最小化(np.dot([1,1,-1,1],z))
m、 求解(disp=False)
打印([z中的zi的zi.value[0])
#解决方案:[-10.0,-10.0,10.0,-5.0]
Gekko变量需要存储为对象,而不是数值。该错误可能是因为
np.concatenate()
函数试图访问Gekko操纵变量数据
p.u.value
的长度,以连接这些值,而不是将
p.u
作为对象连接