How to find intermediate points and plot following problem in MATLAB?

I have three variables x, y and z. Each variable value can be between [0 0.5]. I want to generate 20 equidistant points for each variable such that sum of x y and z is 0.5. For e.g. 0 0 0.5, 0.495 0.05 0 etc. Kindly tell me how to proceed. Basically it is a Pareto front for DTLZ1 test function.

 Réponse acceptée

José-Luis
José-Luis le 15 Déc 2016
Modifié(e) : José-Luis le 15 Déc 2016
Much more efficient and actually yielding all possible combinations:
N = 101;
x = linspace(0,0.5,N);
%-------------------------------------------------
%This bit here is more efficient than the one below. Loops can be your friend.
tic
numVals = numel(x);
total_elements = sum(1:numel(x));
results = ones(total_elements,3);
pos = 1;
for ii = 1:numVals;
idx = pos + numVals - ii;
results(pos : idx, 1) = x(end - ii + 1:-1:1);
results(pos : idx, 2) = x(1:end - ii + 1);
results(pos : idx, 3) = x(ii);
pos = idx + 1;
end
toc
%---------------------------------------------------
%KSSV's answer:
tic
y = linspace(0,0.5,N) ;
z = linspace(0,0.5,N) ;
[X,Y,Z] = ndgrid(x,y,z) ;
x = X(:) ; y = Y(:) ; z = Z(:) ;
thesum = x+y+z ;
% get the sum 0.5
idx = find(thesum==0.5) ;
iwant = [x(idx) y(idx) z(idx)];
toc

6 commentaires

thnx a lot
How can I modify it if I want only 100 points as result? Also could you please explain me the logic you applied in loop?
José-Luis
José-Luis le 16 Déc 2016
Modifié(e) : José-Luis le 16 Déc 2016
My pleasure.
What do you mean only 100 points? Change N?
The logic I followed, without going into too much detail, is that the values you want follow a certain pattern in the 3D array defined by the x vector. It's on a diagonal decreasing in the 3rd dimension. It is then a matter of following that pattern, indexing into the x vector. At least that's how I visualize the problem. There are probably more efficient ways.
By 100 points I mean 100 rows in 'iwant' matrix. i.e. iwant matrix is of size 100*3
Either change N or delete one row from results. I can't be more specific since I don't know what you are trying to achieve.
Hi Jose, Could you please tell me how to extend this approach to 5D, 7D and 10D. I am struck on this part.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by