Сочетание элементов в MATLAB - PullRequest
0 голосов
/ 04 февраля 2019

У меня вопрос, мне нужно построить функцию, вывод которой представляет собой матрицу для всех возможных комбинаций между одним элементом, который повторяется только один раз, а другим элементом может быть один или несколько.

Например, предположим, что у нас есть массив y с размером 3 x 1, инициализированный [0 0 0], первый элемент - x, который повторяется только один раз, а второй элемент r, который повторяется либо одинили больше.поэтому приведенная матрица, которую мне нужно построить, будет похожа на эту:

y = [x r 0; 
     x 0 r;
     x r r;
     r x 0;
     0 x r;
     r x r;
     r 0 x;
     0 r x;
     r r x]

Я пытался использовать nchoosek, но это не работает, потому что когда у меня есть [xr 0], я могу 't [x 0 r].

Я попробовал этот пример с перестановкой, но я не мог теперь поставить x в месте 3 и r в месте 0 в соответствии с приведенной выше матрицей

clear all 
clc 

v = 1 : 3; 
vv = perms(v); 
vv(vv<3)=0;

пожалуйста, помогите,

спасибо

1 Ответ

0 голосов
/ 06 февраля 2019

У вас каверзная проблема.Вот как я решил это:

  1. Предположим, у вас есть 2 r: r1, r2.
  2. Вычислить все перестановки
  3. Удалить эквивалентте (где r1 вместо r2 и наоборот)
  4. Удалите те, которые вам не нравятся (без x)

В конце концов выв «режиме кода», вам просто нужно заменить числа на соответствующие переменные.Я уверен, что вы можете понять это;)

% Code is:
% x=1
% r=2
% r=3
% 0=4
nk=nchoosek(1:4,3);

% compute all permutations
fullperms=[];
for ii=1:size(nk,1)
    fullperms=[fullperms; perms(nk(ii,:))];
end

% Remove the ones that are "the same" (we have 2 r)
% eg
% [1 2 4] and [1 3 4]
fullpermsaux=fullperms;
fullpermsaux(fullpermsaux==2)=3;
[~,ia,~]=unique(fullpermsaux,'rows');
fullperms=fullperms(ia,:);

% Remove the ones that have no "x"
fullperms(~any(fullperms'==1)',:)=[];

% Tada!

% Replace numbers as:
% x=1
% r=2
% r=3
% 0=4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...