找到 A 和 X 使得 AX = 0,X 为正非零,并且 A 是稀疏的

计算科学 线性代数 matlab 凸优化 简历
2021-12-16 02:22:37

如果这是一个幼稚的问题,我深表歉意。我正在尝试为稳态下的线性常微分方程系统创建一些自举数据。

由于方程代表化学物质的浓度,X 必须为正。此外,为了使方程的依赖图尽可能小,我试图找到 A 的最稀疏矩阵。

使用 MATLAB 中的 cvx 工具箱,我将问题如下:

clear

% the threshold value below which we consider an element to be zero
delta = 1e-8;

% problem dimensions (m inequalities in n-dimensional space)
n = 25;

X  = rand(n, 1)
b  = zeros(n, 1);
c = zeros(n, n) + delta^2
alpha = 0.1


% l1-norm heuristic for finding a sparse solution
fprintf(1, 'Finding a sparse feasible point using l1-norm heuristic ...')
cvx_begin
  variable A(n,n) 
  %minimize(nnz(A))
  minimize(alpha * nnz( A ) + (1-alpha) * norm(A*X - b, 2) )
cvx_end

% number of nonzero elements in the solution (its cardinality or diversity)
nonzero = length(find( abs(A) > delta ));
fprintf(1,['\nFound a feasible A in R^%d that has %d nonzeros ' ...
           'using the l1-norm heuristic.\n'],n,nonzero);    

这往往会找到 A 的矩阵,其中填充了非常小的接近零的值。有没有人建议启发式方法来找到满足我上面描述的约束的 X 和 A 的组合?它们不需要特别快或内存效率特别高,我正在使用相对较小的矩阵。

需要明确的是 - 我不是试图解决特定的 A 或 X。我试图找到满足我描述的约束的 A 和 X 的组合。

2个回答

您谈论 l1 启发式,但在代码中,您看起来更像是对解决涉及 A 的 nnz 的基础组合问题感兴趣。在 l1 启发式中,您通常会使用 norm(A(:),1) 或类似的东西。您只得到零的事实很自然,因为当 b 为 0 时,问题在 A 中是同质的。不过,您可以在问题中引入任意比例,例如 sum(sum(A))=1 以确保解不为零.

不失一般性,我们可以处理这种情况X是全一向量u, 因为形成AD1X相当于Au在哪里D=diag(X)是对角矩阵,其条目来自X, 和A具有相同的稀疏性AD1.

提到“保持方程的依赖图尽可能小”。除了避免全零矩阵的琐碎性之外,人们可能想要强加一个条件,即这个依赖图是连通的,或者更弱一点,没有一行A允许全为零。

如果目标是最小化非零条目的数量A, 受Au=0,那么我们必须在的每个非零行中至少有两个非零条目。此外,可以通过在每个这样的行中同时放置条目来达到此最小值。A+11

如果寻求依赖图的连通性,则可以在不进一步损失稀疏性的情况下实现。例如,定义其中是置换矩阵 st ,对于,否则A=IPPP1,n=1Pi+1,i=1i=1,,n1Pi,j=0