我有这个简短的样本..
sysclk.value = 320e6
ddsdiv = cp.Variable(integer = True, # DDS divisor
name = 'ddsdiv')
ddsdivpos = cp.Variable(pos = True) # Constrain to be positive
ddsclk = cp.Variable(pos = True, name = 'ddsclk') # Resulting clock
constraints = [
ddsdiv == ddsdivpos, # Constrain DDS divisor to be positive
sysclk == ddsclk * ddsdiv, # Compute DDS clock
]
objective = cp.Minimize(cp.abs(ddsclk - 10e6))
prob = cp.Problem(objective, constraints);
prob.solve()
print(ddsclk.value)
然而它说..
DCPError: Problem does not follow DCP rules. Specifically:
The following constraints are not DCP:
sysclk == ddsclk * ddsdiv , because the following subexpressions are not:
|-- ddsclk * ddsdiv
同样,如果我尝试(更天真),它也会失败..
ddsclk == sysclk / ddsdiv, # Compute DDS clock
它还会发出 DCPError。
我不明白一个正数除以一个正整数怎么不能是我的凸(但我的数学不是很好:)
我在 MacOSX 10.14.6 上使用 CVXPY 1.0.25、Python 3.7.5。
谢谢。