循环通过单位三角形中的点

时间:2016-03-11 04:22:30

标签: matlab loops

我有一个问题,我有两个选择变量x1和x2,然后确定第三个x3 = 1 - x1 - x2。我想循环遍历[x1,x2,x3]的各种值。此代码有效:

w1 = perms([0.1, 0.1, 0.8]);
w2 = perms([0.1, 0.2, 0.7]);
w3 = perms([0.1, 0.3, 0.6]);
w4 = perms([0.1, 0.4, 0.5]);
w5 = perms([0.2, 0.2, 0.6]);
w6 = perms([0.2, 0.3, 0.5]);
w7 = perms([0.2, 0.4, 0.4]);
w8 = perms([0.3, 0.3, 0.4]);

w = [w1; w2; w3; w4; w5; w6; w7; w8];
w = unique(w,'rows');

% loop
for ii = 1:size(w, 1) 
    ... do some stuff with w(ii, :)  

但我想知道是否有更优雅的方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

这是ndgrid的经典案例

[x1,x2]=ndgrid(0.1:0.1:0.8,0.1:0.1:0.8);
x3 = 1-x1-x2;

%I assume from your example that we want x1,x2,x3 in (0,1) OPEN interval, then:
valid_points = x3>0 & x3 <1 

w_prime = [x1(valid_points),x2(valid_points),x3(valid_points)];