ここで与えられた 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よりも小さくしてもうまくいかない理由を誰かが明らかにすることはできますか?