我正在将MATLAB程序的部分转换为Python和Octave。
我正在使用Octave生成两个矩阵,然后使用oct2py
将这些矩阵导入Python。 我问题的根源就是下面这些MATLAB代码中的这两行(H_combined
和f_combined
)。
handles.options =optimset('algorithm','interior-point-convex','Display','off','TolFun',1e-15,'TolX',1e-10,'MaxFunEvals', 1E5);
handles.x_ridge_combined = quadprog(H_combined, f_combined, [], [], [], [], handles.lb_re, handles.ub_re, handles.x_re_0, handles.options);
目前,我正在寻找Python或Octave的解决方案,以产生类似的输出,但未能找到合适的。
我尝试使用Octave的optim
中的quadprog
,但是在x_ridge_combined
上得到了一个输出为120, 1, 1, 1, ..., 1
的结果,而不是我所期望的一系列浮点值。 我已经验证了H_combined
和f_combined
与在MATLAB中运行时完全相同,但我想Octave
中的quadprog
并不起作用。
在尝试了Octave的方法之后,我尝试将这些值导入Python,并尝试使用quadprog
包。
尝试使用quadprog
,
print(quadprog.solve_qp(H,f))
产生了错误
ValueError: Buffer has wrong number of dimensions (expected 1, got 2)
H
和f
的类型和形状如下:
<class 'numpy.ndarray'> #H
(123, 123)
<class 'numpy.ndarray'> #f
(1, 123)
谁知道为什么我会收到这些错误?或者对如何从MATLAB中翻译那一行有其他的建议吗?