Hello guys, I need help.

2 vues (au cours des 30 derniers jours)
Everton Silva
Everton Silva le 27 Mar 2020
Commenté : Rik le 28 Mar 2020
I need to evaluate the function in each combination of (x1, x2, x3), that is:
for i=1:11
for j=1:11
for k=1:11
z(i,j,k)=feval(f,x1(i),x2(j),x3(k));
end
end
end
This evaluation gives us an NxNxN matrix (cell?). I don't know what it's called hahahaha
[sfx, ind]=sort(z(:));
we selected the t smallest function values
sfx=sfx(1:t);
And the indexes corresponding to the t smallest function values
ind=ind(1:t);
Does anyone have any idea how I can return the values of x1, x2 and x3 corresponding to these t smallest function values?
  4 commentaires
Guillaume
Guillaume le 27 Mar 2020
Notes:
z(i,j,k)=feval(f,x1(i),x2(j),x3(k));
can be written more simply as
z(i,j,k)=f(x1(i),x2(j),x3(k));
assuming that f is a function handle.
Also, depending on f you may not need the loops at all.
Steven Lord
Steven Lord le 27 Mar 2020
To compute the smallest values you can use the mink function.

Connectez-vous pour commenter.

Réponse acceptée

Rik
Rik le 27 Mar 2020
Modifié(e) : Rik le 28 Mar 2020
The indices you get in your last operation can be converted to subscripts, which will correspond to your three inputs.
ind=ind(1:t);
[x1_ind,x2_ind,x3_ind]=ind2sub(size(z),ind);
x1=x1(x1_ind);
x2=x1(x2_ind);
x3=x1(x3_ind);
  4 commentaires
Everton Silva
Everton Silva le 27 Mar 2020
Thank you so much.
Rik
Rik le 28 Mar 2020
@Walter thanks for catching the mistake
@Everton you're welcome

Connectez-vous pour commenter.

Plus de réponses (1)

Torsten
Torsten le 27 Mar 2020
Modifié(e) : Torsten le 27 Mar 2020
[X1,X2,X3]=ndgrid(x1,x2,x3);
Z=f(X1,X2,X3); %assumes f is vectorized
M=[X1,X2,X3,Z];
[~,idx]=sort(M(:,4));
sortedM=M(idx,:);
X1s=sortedM(1:s,1);
X2s=sortedM(1:s,2);
X3s=sortedM(1:s,3);
  1 commentaire
Everton Silva
Everton Silva le 27 Mar 2020
For example, if I write in the command window
t=11;
f=@(x1,x2,x3)(x1+x2+x3);
x1=0:0.1:1;
x2=0:0.1:1;
x3=0:0.1:1;
[X1,X2,X3]=ndgrid(x1,x2,x3);
Z=f(X1,X2,X3);
M=[X1,X2,X3,Z];
[~,idx]=sort(M(:,4));
sortedM=M(idx,:);
X1s=sortedM(1:t,1);
X2s=sortedM(1:t,2);
X3s=sortedM(1:t,3);
X=[X1s,X2s,X1s]
returns
X=
0 0 0
0.1000 0.1000 0.1000
0.2000 0.2000 0.2000
0.3000 0.3000 0.3000
0.4000 0.4000 0.4000
0.5000 0.5000 0.5000
0.6000 0.6000 0.6000
0.7000 0.7000 0.7000
0.8000 0.8000 0.8000
0.9000 0.9000 0.9000
1.0000 1.0000 1.0000

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by