按照此处给出的 L1 范数近似示例,使用以下代码,
from l1 import l1
from cvxopt import normal
m, n = 500, 100
P, q = normal(m,n), normal(m,1)
u = l1(P,q)
一切正常。
但是,当我将m更改为小于n时,
from l1 import l1
from cvxopt import normal
m, n = 50, 100
P, q = normal(m,n), normal(m,1)
u = l1(P,q)
我收到以下错误:
ValueError: illegal value of ldB
我可以看到该错误是由 L1.py:180 中的以下语句引起的:
lapack.gels(+P, uls)
并进一步深入到 lapack.c:3651,以下语句会引发错误:
if (ldB < MAX(MAX(1,n),m)) err_ld("ldB");
但是,当我阅读有关cvxopt.lapack.gels 的 CVXOPT 的 LAPACK 接口的文档时,它特别指出,当m小于n时,它解决了最小范数问题。
谁能解释为什么m小于n不起作用?