Octave 无法识别 Matlab 的 quadprog 函数

问题描述

我今天第一次使用 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 脚本中加载了 optim 包.. 无济于事,并且在使用此命令 pkg list 检查它是否已安装时,后面跟着一个星号(碰巧 optim*)这是什么意思?

问候。

解决方法

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

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

编辑:我想我可能发现了一个错误。转到安装 optim 软件包的位置,然后编辑 quadprog.m。将第 353 行更改为

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

__qp__ (x0,maxit,rtol);  

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

就是这样,我将向 Octave/optim 团队报告错误。

EDIT 2:原来这是一个在八度音阶中引入的已知错误,它改变了 __qp__ 函数(由 quadprog.m 调用)的函数签名。 https://savannah.gnu.org/bugs/?59051

此问题已在软件包的下一个版本中修复;同时,您可以像上面一样编辑代码(由于某些原因,实际的修复要复杂一些)。