I am trying to create a matrix that list all combinations possible under a certain condition. Right now I am creating all combinations and then filtering but the matrix of combination is too large.
I want to keep only when
Thank you
I am putting an example with smaller vector size
x = [0 0.25 0.5 0.75 1]
x_1 = [0 0.5 1]
x_2 = [0 0.5 1]

4 comentarios

Torsten
Torsten el 9 de Feb. de 2023
I don't understand your example.
Les Beckham
Les Beckham el 9 de Feb. de 2023
Combinations of what?
Jan
Jan el 9 de Feb. de 2023
I don't either. What are the inputs you want to combine?
Sorry I wasn't clear
I want to have all to possible combinations of x, x_1 and x_2 with the condition
I want to end with something like this
Hope it makes more sense
0 0 0
0.25 0 0.5
0.25 0.5 0
0.5 0 1
0.5 0.5 0.5
0.5 1 0
0.75 0.5 1
0.75 1 0.5
1 1 1

Iniciar sesión para comentar.

 Respuesta aceptada

Voss
Voss el 9 de Feb. de 2023
Maybe something like this?
x = [0 0.25 0.5 0.75 1];
x_1 = [0 0.5 1];
x_2 = [0 0.5 1];
x_12 = (x_1.'+x_2)/2;
[ism,idx] = ismember(x_12,x);
[r,c] = find(ism);
result = [x_1(r); x_2(c); x(idx(ism))].'
result = 9×3
0 0 0 0.5000 0 0.2500 1.0000 0 0.5000 0 0.5000 0.2500 0.5000 0.5000 0.5000 1.0000 0.5000 0.7500 0 1.0000 0.5000 0.5000 1.0000 0.7500 1.0000 1.0000 1.0000

7 comentarios

Nicolas Leport
Nicolas Leport el 9 de Feb. de 2023
Hopefully yes, just with the the 3rd column in an increasing order
x = [0 0.25 0.5 0.75 1];
x_1 = [0 0.5 1];
x_2 = [0 0.5 1];
x_12 = (x_1.'+x_2)/2;
[ism,idx] = ismember(x_12,x);
[r,c] = find(ism);
result = [x_1(r); x_2(c); x(idx(ism))].';
% sort on 3rd column:
[~,idx] = sort(result(:,3));
result = result(idx,:)
result = 9×3
0 0 0 0.5000 0 0.2500 0 0.5000 0.2500 1.0000 0 0.5000 0.5000 0.5000 0.5000 0 1.0000 0.5000 1.0000 0.5000 0.7500 0.5000 1.0000 0.7500 1.0000 1.0000 1.0000
Nicolas Leport
Nicolas Leport el 9 de Feb. de 2023
Thank you!
Voss
Voss el 9 de Feb. de 2023
You're welcome!
Nicolas Leport
Nicolas Leport el 9 de Feb. de 2023
How would you modify it if I wanted to add a x_3 and now (x1+x2+x3)/3=x ?
Walter Roberson
Walter Roberson el 9 de Feb. de 2023
Voss's solution creates all combinations and filters them, which you had said gets too large for your purposes.
ismember with floating point is risky. This example with exact fractions of powers of 2 gets away with it, but you would have problems with 0.1 and 0.2 for example
Nicolas Leport
Nicolas Leport el 9 de Feb. de 2023
I actually changed x, x1, x2 to be whole number and then divide the result matrix by the number of data points. It works fine. But I don't know how to modify it to do it with x, x1, x2 and x3

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Preguntada:

el 9 de Feb. de 2023

Comentada:

el 9 de Feb. de 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by