如何在GEKKO中使用复共轭

2 投票
2 回答
18 浏览
提问于 2025-04-14 16:11

我在使用GEKKO解决一个最优控制问题。现在我需要对一个变量进行复共轭操作。我知道GEKKO有一些方法,比如.exp、.log等等,但我找不到关于.conj的方法。

那么,我该怎么使用.conj呢?在GEKKO中,变量可以是复数吗?

2 个回答

0

我对GEKKO一点都不了解。在Python中,你可以使用.conjugate()这个方法来获取一个数字的复共轭。

>>> x = 2 + 3j
>>> x.conjugate()
(2-3j)
>>> y = complex(10, 5)
>>> y.conjugate()
(10-5j)
0

Gekko支持复数,但它的求解器只能处理实数,所以我们需要特别的结构来处理实数和虚数部分。下面是一个例子,它计算一个决策变量的平方根,目标是最大化这个数的虚数部分。同时也计算了复共轭。

from gekko import GEKKO
m = GEKKO()
x = m.Var(2, lb=-9, ub=16)  # -9<=x<=16
b = m.if3(x, 0, 1)          # binary switch
s = m.Intermediate(m.sqrt(m.abs3(x)))  # sqrt(x)
r = m.Intermediate(b*s)     # real
i = m.Intermediate((1-b)*s) # imaginary

# Complex conjugate
r_conj = r  # real part is the same
i_conj = m.Intermediate(-i) # imaginary part

# Maximize imaginary part
m.Maximize(i_conj**2)
m.solve(disp=False)
print("Original:", r.value[0], '+', i.value[0], 'j')
print("Conjugate:", r_conj.value[0], '+', i_conj.value[0], 'j')

结果是:

Original: 0.0 + 3.0 j
Conjugate: 0.0 + -3.0 j

撰写回答