在Matlab中查找可能的权重分配

时间:2013-10-29 09:54:55

标签: matlab allocation

给定权重向量

w = [0.1, 0.1, 0.1, 0.1, 0.1];

应该导致

wg = [0.15 0.05 0.1  0.1  0.1; 
      0.15 0.1  0.05 0.1  0.1; 
      0.15 0.1  0.1  0.05 0.1; 
      0.15 0.1  0.1  0.1  0.05; 
      0.05 0.15 0.1  0.1  0.1; 
      0.1  0.15 0.5  0.1  0.1; ...] 

因此会有可能分配的矩阵,因此w的每个元素都会增加和减少到0.05

我尝试使用循环,但似乎是不正确的方法,因为当索引超过矩阵维度时会出现这种情况。是否可以使用循环?有解决方案吗谢谢。

2 个答案:

答案 0 :(得分:0)

可以循环:

w = [0.1, 0.1, 0.1, 0.1, 0.1];
n = length(w);

adj = [0.05*ones(n-1,1), -0.05*eye(length(w)-1)];

wg = bsxfun(@plus, w, adj);
for c = 2:n
   adj(:,[c-1, c]) = adj(:,[c, c-1]);
   wg = [wg; bsxfun(@plus, w, adj)];
end

导致

wg =

   0.150000   0.050000   0.100000   0.100000   0.100000
   0.150000   0.100000   0.050000   0.100000   0.100000
   0.150000   0.100000   0.100000   0.050000   0.100000
   0.150000   0.100000   0.100000   0.100000   0.050000
   0.050000   0.150000   0.100000   0.100000   0.100000
   0.100000   0.150000   0.050000   0.100000   0.100000
   0.100000   0.150000   0.100000   0.050000   0.100000
   0.100000   0.150000   0.100000   0.100000   0.050000
   0.100000   0.050000   0.150000   0.100000   0.100000
   0.050000   0.100000   0.150000   0.100000   0.100000
   0.100000   0.100000   0.150000   0.050000   0.100000
   0.100000   0.100000   0.150000   0.100000   0.050000
   0.100000   0.050000   0.100000   0.150000   0.100000
   0.100000   0.100000   0.050000   0.150000   0.100000
   0.050000   0.100000   0.100000   0.150000   0.100000
   0.100000   0.100000   0.100000   0.150000   0.050000
   0.100000   0.050000   0.100000   0.100000   0.150000
   0.100000   0.100000   0.050000   0.100000   0.150000
   0.100000   0.100000   0.100000   0.050000   0.150000
   0.050000   0.100000   0.100000   0.100000   0.150000

我认为你追求的是什么。它可能没有循环,但我确信这就足够了。

答案 1 :(得分:0)

您想要添加/减去每个重量-0.5,0或.05重量。 为了涵盖所有可能性(5个中有5个元素,3个,总共3 ^ 5个选项):

>> n = length( w );
>> [x{1:n}] = ndgrid( -1:1 );
>> x = cellfun( @(y) y(:), x, 'uni', 0 );
>> wg = bsxfun(@plus, w, [x{:}]*.05 );