3

按照此处给出的 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不起作用?

4

1 回答 1

0

我有同样的问题,为了后代,我添加了我从 CVXOPT 问题中找到的答案。在超定情况下,该l1函数似乎严格用于逼近||Ax - b||_1。我想“近似”应该是表示“过度确定”的关键字,但这对我来说并不清楚。无论如何,马丁安德森说:

m < n请注意,当方程Ax = b一致时,最优值为零。这意味着任何欠定系统Ax = b的解也是优化问题的解。l1示例代码适用m > n于.

于 2017-07-24T15:05:19.357 回答