在Matlab中组合数组

时间:2016-05-17 17:10:35

标签: matlab combinations permutation

我对某个程序有一个问题,我希望得到一些帮助。

我的主要目标是在两个数组中使用所有可能的对。有了一些帮助,我设法得到了这个

A = nchoosek(0:15, 2)
arr1 = A(:,1);
arr2 = A(:,2);
Result = arr1.*arr2 + arr1.^2 + arr2.^2;

我想使用arr1和arr2中的所有组合来求解结果方程并打印出如下结果:

arr1   arr2    Result
0       0        0
1       1        3
2       0        4

等等..但是当我尝试这种方法时,并不是所有的组合都被使用。如何获得所有可能的组合?

1 个答案:

答案 0 :(得分:1)

Matlab具有meshgrid功能,可以为此目的消除循环,例如

>> r1=(x1+x2).^2-x1.*x2;

或使用正方形

>> a1=[0:15];a2=[0:15];
>> [x1,x2]=meshgrid(a1,a2);
>> r=-x1.*x2+(x1+x2).^2;
>> size(r)

ans =

    16    16

更新:对于你的情况你使用0:15的值,使用它们将导致

>> n=size(r,1);
>> R=[reshape(x1,1,n*n); reshape(x2,1,n*n); reshape(r,1,n*n)]'
R =
     0     0     0
     0     1     1
     0     2     4
     0     3     9
     0     4    16
     0     5    25
     0     6    36
     0     7    49
     ...
    15     6   351
    15     7   379
    15     8   409
    15     9   441
    15    10   475
    15    11   511
    15    12   549
    15    13   589
    15    14   631
    15    15   675

UPDATE 2 请注意,您的方法不会创建所有对,例如(0,0)或(1,1)也不会只有其中一个(x, y)(y,x)对将是x!= y值。除了双循环之外,首选方法就是我提出的方法。您也可以轻松地以您想要的形式收集结果

android:src="img"