How to find intermediate points and plot following problem in MATLAB?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Abhinav
am 14 Dez. 2016
Kommentiert: Abhinav
am 4 Feb. 2017
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.
0 Kommentare
Akzeptierte Antwort
José-Luis
am 15 Dez. 2016
Bearbeitet: José-Luis
am 15 Dez. 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 Kommentare
José-Luis
am 19 Dez. 2016
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.
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!