【发布时间】:2026-02-04 10:15:02
【问题描述】:
paper I'm reading 包含以下定理。
我编写了一些 MATLAB 代码来尝试重现本文后面出现的结果,最初它似乎运行良好。
M = 6;
Sigma = [1 .5 .15 .15 0 0;
.5 1 .15 .15 0 0;
.15 .15 1 .25 0 0;
.15 .15 .25 1 0 0;
0 0 0 0 1 .1;
0 0 0 0 .1 1];
Delta = [0 0 .2 .2 .5 .5]';
cov_vect = [.3 .3 .35 .35 .25 .25];
u = ones(M,1);
lastcol = [u' 0];
First = Sigma+(Delta*Delta');
First(M+1,:) = u;
First(:,M+1) = lastcol;
Third = [cov_vect 1]';
X = linsolve(First,Third);
此代码创建的结果与论文中的结果相匹配。
我想将我的代码与其他数据集一起使用,但是当我尝试这样做时遇到了问题。 M、Sigma、Delta 和 cov_vect 会因数据集而异,但其余代码应保持不变。
当我在新数据集上使用我的代码时,尽管向量 w 总和为 1(应该如此),但它有时包含负值。根据该论文,这不应该发生。 lambda 可以为负数,但 w 向量中的任何值都不能为负数。
如何让 MATLAB 约束结果,使 w 中的所有值都必须为正,同时保持向量 w 总和为 1 的要求?
【问题讨论】:
-
一个想法:您可以将问题表述为优化问题。例如。最小化 x'Ax + b'*x 服从 C * x quadprog 或 linprog.
-
查看 linprog 的文档,似乎我应该有类似 [X,FVAL] = linprog(f,First,Third) 的内容。但是在这种情况下 f 是什么?
-
为了得到线性等式系统,论文作者是否解决了一些优化问题?我要做的第一件事(如果可能的话)是通过添加 w 为非负的约束来解决相同的优化问题。
-
尝试查看
lsqnonneg:mathworks.com/help/matlab/ref/lsqnonneg.html - 这确定了最小二乘问题的最佳解决方案,确保解决方案都是正数。值得考虑的事情。 -
我有点好奇,所以就这么做了。看我的回答。
标签: matlab