Octave不认识Matlab的quadprog函数

3
今天我第一次使用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*),这是什么意思?

谢谢。


请不要删除并询问同样的问题:https://stackoverflow.com/questions/65771742/using-matlabs-quadprog-in-octave 这些都是你的账户吗? - Thomas Sablik
2
不,那不是我的问题,但是有人联系了我,因为没有人回答他的问题,所以我试图帮助他,但是我没有找到答案。所以我决定重新表述并在我的账户上发布它。另外,我可能也会使用Octave。 - Wallflower
1个回答

2

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

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

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

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

to

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

如果这样做可以神奇地使它工作,请告诉我。

如果是这种情况,我将向 octave/optim 团队报告一个 bug。

编辑 2:事实证明,这是 octave 6 中引入的已知 bug,它改变了 __qp__ 函数(由 quadprog.m 调用)的函数签名。 https://savannah.gnu.org/bugs/?59051

这个问题已经在包的下一个版本中得到解决;在此期间,您只需像上面那样编辑代码即可(实际修复原因有点复杂)。


我仍在尝试找到我的quadprog.m文件的位置 x) - Wallflower
2
已完成,找到并修改了第353行。它可以工作了。非常感谢您的帮助 ^_^ - Wallflower

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接