Conditional function on matrix

6 vues (au cours des 30 derniers jours)
Osnofa
Osnofa le 23 Avr 2019
Commenté : Osnofa le 24 Avr 2019
Hello,
This is a tough one to explain.
I am analysing a big chunk of data and now I have a equation defined by intervals.
Kd=1 for Kt<0.2
Kd=e for 0.2<=Kt<=1.09*c2
Kd=f for Kt>1.09*c2
Kt=rand(8784,89);
c2=ones(size(Kt))/2;
e=rand(size(Kt));
f=rand(size(Kt));
I've simplified it quite a bit, because it envolves other matrixes (all with the same size (8784,89)) on the conditions.
My question is, how to execute it? I've tried piecewise, but I'm stuck with the symbolic. I would need to get Kd as double.
Kd(Kt)=piecewise(Kt<0.2,1, 0.2<=Kt<=1.09*c2,10, Kt>1.09*c2,5);
I've tried with If and elseif but as far as I've seen it will only analyze the first element of the array to verify if the condition is true:
if Kt<0.2
Kd=1;
elseif 0.2<=Kt<=1.09*c2
Kd=e;
elseif Kt>1.09*c2
Kd=f;
end
Other ideas or something I'm missing?
edit: edited after trying solution given by Matt J.
thanks.

Réponse acceptée

Matt J
Matt J le 23 Avr 2019
Modifié(e) : Matt J le 23 Avr 2019
vals=[1,10,5];
Kd=vals( discretize(Kt,[-inf,0.2,1.09*c2,+inf]) );
  5 commentaires
Matt J
Matt J le 24 Avr 2019
Modifié(e) : Matt J le 24 Avr 2019
Kd=ones(size(Kt));
condition1 = Kt>=0.2 & Kt<=1.09*c2;
condition2 = Kt>1.09*c2;
Kd(condition1)=e(condition1);
Kd(condition2)=f(condition2);
See also,
Osnofa
Osnofa le 24 Avr 2019
Thanks Matt! I was reading a bit further into logical indexing. Thanks for the link also!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Resizing and Reshaping Matrices 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