【问题标题】:quadratic constraint feasibility in MatlabMatlab中的二次约束可行性
【发布时间】:2013-09-30 14:33:15
【问题描述】:

假设 A 是一个 n x n 矩阵,并且我观察到 A 的一些条目,例如,对于 {1,...,n} x {1,...,n} 中的某个子集 S 的 A_S。我想知道A是否有可能排名1。

所以这可以重新表述为以下问题:是否存在向量 x 和 y 使得 xy^T 限制在 S 上等于观察值 A_S?

通过连接 x 和 y,例如,让 z = [x;y],我们可以将此约束写为 z 中的二次形式。 Matlab中如何测试约束是否可行?

【问题讨论】:

  • 我只是以为我想出了一个简单的解决方案并删除了之前的评论,但后来我意识到已经晚了,我是个白痴。无论如何:问题是双凸的,所以局部最小值将是一个问题。使用(例如)观察点的总平方误差作为您的目标,实际找到这样的 x 和 y 可能(或可能不会)更容易。这是一个标准的矩阵分解问题,它是一个很好的平滑目标,尽管局部最小值是一个问题。因此,如果您找到一个有效的 x/y,您就知道它可能是 1 级;如果你不这样做,它可能仍然是排名 1。

标签: matlab matrix


【解决方案1】:

我认为您会发现 fmincon 对您的情况很有帮助。
保持目标函数为零,并将非线性等式约束编码为二次约束。

编辑:(定义二次约束函数的例子)

写一个m函数:

function err = myQuadEqCon( z, n, S, A_s )
% given z ( a concatanation of x and y n-vectors ) and a set of entries S
% checks (x*y')(S) == A_s
x = z( 1:n );
y = z( (n+1):end );
xy = x*y.';
err = sum( abs( xy(S) - A_s ) );

现在,在您的“主要”函数/脚本中,确保正确定义了 n(问题的维度)、SA_s,然后

>> z = fmincon( @(z) 0, ... % objective function plays no role
                z0, ... % your initial guess for x and y
                [], [], [], [], [], [], ... % linear constraints are empty
                @( z ) deal( 0, ... % first output nonlinear inequalities
                             myQuadEqCon( z, n, S, A_s ) ) );

【讨论】:

  • 非线性约束函数将取决于 S,它是一个动态集。我该如何处理?
  • @user58955 关闭!您可以定义一个匿名函数,也可以编写一个返回子函数引用的函数。
  • 你能在网上给我一些例子吗?我是 matlab 中函数指针等的新手...
  • @user58955 请查看我的编辑。 google "deal and annonymuse function in matlab" 来查看 hoe 从 annonymuse 函数返回多个输出。有关详细信息,请参阅fmincon 帮助页面中的“传递额外参数”链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
相关资源
最近更新 更多