【发布时间】:2017-02-15 00:11:02
【问题描述】:
我正在计算约束线性最小二乘问题的解,如下所示:
lb = zeros(7,1);
ub = ones(7,1);
for i = 1:size(b,2)
x(:,i) = lsqlin(C,b(:,i),[],[],[],[],lb,ub);
end
其中C 是m x 7 而b 是m x n。 n 非常大,导致计算时间变慢。有什么方法可以加快这个过程并摆脱缓慢的for 循环。我使用lsqlin 而不是pinv 或\,因为我需要将我的解决方案限制在0-1 的边界(lb 和ub)。
【问题讨论】:
-
您可以随时尝试切换默认求解器。试试
'interior-point。不确定该循环的用途以及您希望我们如何处理它。 -
我尝试了不同的求解器,但问题是一样的。我正在使用 for 循环,因为如果我尝试给
x = lsqlin(C,b,[],[],[],[],lb,ub);我收到Inner matrix dimensions must agree.错误。另一方面,如果我使用pinv(C)*b或C \ b它就像一个魅力但对于lsqlin我需要通过for循环来完成它,因为我需要约束我需要使用@987654340 @。因此,我只是想问是否有可能优化或丢弃for循环。
标签: matlab optimization least-squares