2016-05-17 2 views
-1

У меня есть проблема с частью программы, и я был бы признателен за помощь.Сочетание массивов в Matlab

Моя основная цель - использовать все возможные пары в двух массивах. С некоторой помощью мне удалось получить эту

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

Matlab имеет meshgrid функции для устранения петель для этой цели, например

>> a1=[1:4]; 
>> a2=[0:3]; 
>> [x1,x2]=meshgrid(a1,a2); 
>> r=x1.*x2+x1.^2+x2.^2; 

или использовать квадрат раза

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

UPDATE: для вашего случая вы используете 0:15 значение, их использование будет осуществляться с помощью

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

ans = 

    16 16 

UPDATE 2 Обратите внимание, что ваш метод не создает всех пар, например (0,0) или (1,1) не будет также только одной из (x, y) (y, x) пар будет там для значений x! = y. Вместо двойных циклов предпочтительный подход - это то, что я предложил. Вы можете собрать результаты в матрице в том виде, в котором вы хотите легко, а также

>> 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 
+0

благодарит за ваш ответ, но это не работает так, как я хочу. Он дает выход «1x4 double» – user3644943

+0

какие векторы ввода? Вы попробовали пример, который я опубликовал. Он должен дать вам матрицу 4x4, кросс-произведение двух входов размером 4. – karakfa

+0

Я попытался с примером, который вы мне дали, но все же возвращает «1x4 double». Мои входные векторы arr1 = A (:, 1) и arr2 = A (:, 2) (код, который я опубликовал) – user3644943

Смежные вопросы