Matlab - Ayuda con programa

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 17 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Ayuda con programa

Publicado por Miguel (4 intervenciones) el 29/01/2020 12:11:24
Hola buenas, necesito para hacer una parte del código de un programa generar una serie de números desde el 1 hasta por ejemplo el 7, lo que necesito es crear todas las combinaciones posibles que vayan desde el 1 hasta el 7 y almacenarlas en un vector, es decir, por ejemplo, 1 2 3 4 5 6 7, 1 4 5 6 7, 1 2 5 6 7, 1 2 3 7, y así, pero no consigo crearlas todas, me falla algo, lo he intentado realizar con bucle while para que pare cuando el valor sea el máximo y vuelva a empezar manteniendo los datos del vector pero no soy capaz, si alguien puede ayudarme, creo que se hace con incrementos variables.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Ayuda con programa

Publicado por Daniel (354 intervenciones) el 29/01/2020 12:53:19
Hola,

Para eso tienes la función perms, simplemente lo tienes con

1
perms(1:7)

Saludos,
Daniel Rodríguez.
Analytics Lane
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 17 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Ayuda con programa

Publicado por Miguel (4 intervenciones) el 29/01/2020 15:53:15
No me sirve esa función, porque genera combinaciones de 1 hasta 7 pero completas, es decir, genera 1 3 6 4 5 7, y yo quiero combinaciones como 1 3 7, 1 2 5 7, etc. Gracias por la ayuda pero no me vale :S
Lo que busco es que me genere todas las combinaciones desde 1 hasta el último número pero por orden, empezando siempre por 1 y acabando en 7, es decir,
1 2 3 4 5 6 7
1 2 3 4 5 7
1 2 3 4 6 7
1 2 3 5 6 7
1 2 4 5 6 7
1 2 6 7
1 3 4 5 6 7
1 4 5 6 7
.
.
.
y así todas, y las meta todas dentro del mismo vector porque claro son vectores de diferentes tamaños, no los puedo concatenar...
espero que a alguien se le ocurra alguna forma
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Ayuda con programa

Publicado por Daniel (354 intervenciones) el 29/01/2020 16:48:46
Hola,

Entonces sera una de estas tres opciones

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
n = 5;
 
result = extrae_medios(1:n);
matValues = 1:n;
 
for i = 1:length(result)
    matValues = [matValues; result{i}, zeros(1, n - length(result{i}))];
end
 
% Ceros donde no hay nada
result = unique(matValues, 'row')
 
% NaN donde no hay nada
result(result == 0) = NaN
 
% Guardado en una celda
result = mat2cell(result, ones(1, size(result, 1)), n);
result = cellfun(@(x) x(~isnan(x)), result, 'UniformOutput', false);
 
for i = 1:length(result)
    result{i}
end
 
 
function result = extrae_medios(base)
    result = {};
 
    if length(base) > 2
        for i = 2:(length(base)-1)
            temporal = base;
            temporal(i) = [];
            result = [result , temporal];
 
            if length(temporal) > 2
               result = [result, extrae_medios(temporal)];
            end
        end
    end
end

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
result =
 
     1     2     3     4     5
     1     2     3     5     0
     1     2     4     5     0
     1     2     5     0     0
     1     3     4     5     0
     1     3     5     0     0
     1     4     5     0     0
     1     5     0     0     0
 
 
result =
 
     1     2     3     4     5
     1     2     3     5   NaN
     1     2     4     5   NaN
     1     2     5   NaN   NaN
     1     3     4     5   NaN
     1     3     5   NaN   NaN
     1     4     5   NaN   NaN
     1     5   NaN   NaN   NaN
 
 
ans =
 
     1     2     3     4     5
 
 
ans =
 
     1     2     3     5
 
 
ans =
 
     1     2     4     5
 
 
ans =
 
     1     2     5
 
 
ans =
 
     1     3     4     5
 
 
ans =
 
     1     3     5
 
 
ans =
 
     1     4     5
 
 
ans =
 
     1     5

Saludos,
Daniel Rodríguez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 17 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Ayuda con programa

Publicado por Miguel (4 intervenciones) el 29/01/2020 16:58:46
Muchísimas gracias!! Eres un auténtico crack
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar