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

在Matlab中寻找可能的权重分配,matlab,allocation,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.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


我尝试使用循环,但这似乎是不正确的方法,因为存在索引超过矩阵维度的情况。可以使用循环吗?有解决办法吗?多谢各位

可以使用循环:

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

这就是我认为你想要的。可能没有循环也可以,但我相信这就足够了。

您希望添加/减去每个权重-.05、0或.05权重。 涵盖所有可能性(5个元素中5个元素3个,共3^5个选项):


请更详细地解释如何从
w
Yes获得
wg
。这正是我想做的。谢谢。但当分配为负时,如何避免这种情况呢。例如,如果初始权重为w=0,11 0,09 0,1 0,1 0,2 0,1 0,1 0,1 0,1 0,1 0]。感谢you@Adrian我不知道那是什么意思。你的问题定义不清楚。我认为OP希望权重之和保持不变。您可以添加
wg=wg(sum(wg,2)=sum(w),:)在末尾
>> n = length( w );
>> [x{1:n}] = ndgrid( -1:1 );
>> x = cellfun( @(y) y(:), x, 'uni', 0 );
>> wg = bsxfun(@plus, w, [x{:}]*.05 );