我必须解决许多独立的约束线性最小二乘问题(有边界和约束)。所以我在循环中多次这样做。对于每个问题,我正在寻找的 x 是 min||Cx-d|| 并且 x 是有界的(在 0,1 中)并且所有 x 元素的总和必须为 1。
我正在寻找一种快速完成它的方法,因为虽然每次优化都不需要很多时间,但我需要将它包含在一个大循环中。
例如,我的 Matlab 实现如下所示:
img = imread('test.tif');
C = randi(255,6,4);
x=zeros(size(C,2),1);
tp = zeros(size(C,2),1);
Aeq = ones(1,size(C,2));
beq = 1;
options = optimset('LargeScale','off','Display','off');
A = (-1).*eye(size(C,2));
b = zeros(1,size(C,2));
result = zeros(size(img,1),size(img,2),size(C,2));
for i=1:size(img,1)
for j=1:size(img,2)
for k=1:size(img,3)
tp(k) = img(i,j,k);
end
x = lsqlin(C,tp,A,b,Aeq,beq,[],[],[],options);
for l=1:size(C,2)
result(i,j,l)=x(l);
end
end
end
对于 500x500 循环,大约需要 5 分钟。但我的循环比这大得多。欢迎任何想法,但我更喜欢 Matlab、Python 或 R 解决方案。