Matlab的quadprog功能不被Octave识别



我今天第一次使用Octave作为Matlab的替代品,尝试从我的Python脚本调用它,而不是使用Matlab .engine。从我发现的,这两个是兼容的,所以在Octave中运行Matlab文件并不复杂。然而,我的一个Matlab脚本包含函数"quadprog"在我的Octave命令提示符中调用该命令时,会产生以下错误:

error: Invalid call to __qp__.  Correct usage is:
-- [X, LAMBDA, INFO, ITER] = __qp__ (X0, H, Q, AEQ, BEQ, AIN, BIN,
MAXIT, RTOL)
error: called from
print_usage at line 98 column 5
quadprog at line 352 column 36
FRPY at line 606 column 14
RPdriver at line 388 column 21
my_VF_electrical_equivalent_circuit at line 119 column 23
hi at line 60 column 49

我该如何解决这个问题?另外,我在我的Octave脚本中加载了优化包。当检查它是否已经使用这个命令pkg list安装时,它后面跟着一个星号(因为它发生在optim*),这应该是什么意思?

致意。

optim旁边的星号表示包被正确加载。

显然我不能回答你的问题的其他部分,因为没有代码。我只能告诉你,无论你做了什么,都导致了一个无效的调用。

编辑我想我可能发现了一个bug。转到安装optim包的位置,编辑quadprogram。从

更改第353行
__qp__ (x0, H, f, Aeq, beq, Ain, bin, maxit);  

__qp__ (x0, H, f, Aeq, beq, Ain, bin, maxit, rtol);  

让我知道这是否神奇地起作用了。

如果是这样的话,我会向octave/optim团队报告一个bug。

编辑2:原来这是一个已知的错误,在octave 6中引入,它改变了__qp__函数的函数签名(由quadprogram .m调用)。https://savannah.gnu.org/bugs/?59051

这个问题已经在下一个版本中修复了;与此同时,您可以像上面那样编辑代码(由于某种原因,实际的修复稍微复杂一些)。

最新更新