0

为什么这条线:

    prog.AddQuadraticErrorCost(np.identity(len(q)), q0, q)

作品。

但是这个:

  prog.AddCost(np.linalg.norm(q_variables - q_nominal)**2)

运行时错误:表达式 pow(sqrt((pow(q(0), 2) + pow(q(2), 2) + pow(q(4), 2) + pow(q(6), 2) + pow( q(7), 2) + pow(q(8), 2) + pow((-1 + q(5)), 2) + pow((-0.59999999999999998 + q(1)), 2) + pow( (1.75 + q(3)), 2))), 2) 不是多项式。ParseCost 不支持非多项式表达式。

才不是?

这些表达式在数学上不是相同的吗?

4

1 回答 1

1

它们在数学上是相同的,但我们的符号引擎还不够强大,无法识别 sqrt(x)**2 应该简化为 x。

您还可以使用符号形式编写表达式

prog.AddQuadraticCost((q-q0).dot(q-q0))

如果您更喜欢可读的代码。

于 2021-11-08T22:26:23.980 回答