CasADi:来自符号变量的矩阵函数

2024-09-27 17:56:02 发布

您现在位置:Python中文网/ 问答频道 /正文

this问题(以及交叉发布的here)有点关系,我试图在^{}中索引一个符号矩阵变量。我想取一个向量变量x,并基于x的组件填充符号函数表达式的矩阵A。更具体地说,我希望做如下(c)部分:

from casadi import *
opti = Opti()

n = 3
B = np.random.normal(size=[n, n])
D = np.random.normal(size=[n, n])
D = np.dot(D.T, D)

##(a) variables and expressions
x = opti.variable(n); opti.set_initial(x, x0)
A = opti.variable(n, n)  # or would A = MX(n, n) be better?

##(b) objective
opti.minimize(sum(x[i]**2 for i in range(n)))  # generic objective

##(c) populate symbolic matrix constraint
yi = MX.sym('yi')
yj = MX.sym('yj')
f_Aij = Function('f_Aij', [yi, yj], [(yi+yj)**2], ['yi', 'yj'], ['Aij'])
for i in range(n):
    for j in range(n):
        xi = x[i]
        xj = x[j]
        A[i,j] = f_Aij(xi, xj)

##(d) matrix inverse constraint
opti.subject_to(diag(solve(A,B) @ D @ solve(A, B).T) <= bounds)

##(e) solve
opti.solver('ipopt')
sol = opti.solve()
print(sol.value(x))

但我得到一个错误:

^{pr2}$

我认为我没有正确初始化A,因为xi和{}被定义为x的向量变量{}返回{}(尽管x.is_symbolic()返回{})。这是从符号变量的组成部分定义矩阵值函数的正确方法,还是我这样做的方式给了我NaN错误?在


Tags: 函数infornp符号range矩阵向量

热门问题