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.

 Accepted Answer

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 Comments

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?
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.

Sign in to comment.

More Answers (0)

Categories

Asked:

on 14 Dec 2016

Commented:

on 4 Feb 2017

Community Treasure Hunt

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

Start Hunting!