python - 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, H, f, Aeq, beq, Ain, bin, maxit, rtol);
让我知道这是否神奇地使它起作用。
既然如此,我将向 octave/optim 团队报告一个错误。
编辑 2:原来这是在 octave 6 中引入的一个已知错误,它改变了函数的函数签名__qp__
(由 quadprog.m 调用)。 https://savannah.gnu.org/bugs/?59051
这已在软件包的下一个版本中修复;同时,您可以像上面那样编辑代码(由于某种原因,实际的修复要复杂一些)。
推荐阅读
- ios - AX 查找问题 - errorCode:1100 error:Permission denied portName:'com.apple.iphone.axserver' PID
- javascript - 如何使用角度在列中显示多值?
- python - 如何将字典从 HTML 传递到 Flask Python 方法?
- javascript - 如何测试调用其他函数的函数?
- angular - .NET Core 3.1 应用程序与 SQL Server 2019 Express 多个数据库支持与主数据库进行身份验证
- javascript - 当 ext 字段有值而不是空时显示 'ext'
- java - 如何检查我的应用程序中的电影 ID 是否存在于我的数据库中
- reactjs - React Native,全局使用状态?
- javascript - 如何解决 Angular HostResourceResolver 错误?
- vim - 一起移动列中的多个 Vim 窗口