Reducing values preceding the 1st minima to zero

1 vue (au cours des 30 derniers jours)
Tom
Tom le 22 Juil 2014
Commenté : Azzi Abdelmalek le 22 Juil 2014
I need to reduce the value of all the values before the 1st minima, to zero, e.g. if I had: -
x = 0:30;
y = [10 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 5 4 3 2 3 4 3 2 1 0.5 0.3 0.2 0.1 0]';
figure(1)
plot(x,y)
ylim([0 10])
then I need a bit of code that changes it to: -
z = [0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 5 4 3 2 3 4 3 2 1 0.5 0.3 0.2 0.1 0]';
figure(2)
plot(x,z)
ylim([0 10])
instead.
Can anyone suggest something?
Many thanks.

Réponse acceptée

Azzi Abdelmalek
Azzi Abdelmalek le 22 Juil 2014
Modifié(e) : Azzi Abdelmalek le 22 Juil 2014
y = [10 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 5 4 3 2 3 4 3 2 1 0.5 0.3 0.2 0.1 0]';
[~,jj]=findpeaks(-y,'npeaks',1)
z=y
z(1:jj)=0
  2 commentaires
Tom
Tom le 22 Juil 2014
Many thanks!
Azzi Abdelmalek
Azzi Abdelmalek le 22 Juil 2014
You can also use gradient
g=gradient(y);
idx=find(g==0 & gradient(g)>0,1)
z=[zeros(idx,1) ;y(idx+1:end)]

Connectez-vous pour commenter.

Plus de réponses (1)

Andrei Bobrov
Andrei Bobrov le 22 Juil 2014
Modifié(e) : Andrei Bobrov le 22 Juil 2014
ii = find(diff(diff(y)<0)==-1,1)+1;
y1=y;
y1(1:ii)=y(ii);
or
ii = strfind([0,diff(y(:)')<0],[1 0]);
y1=y;
y1(1:ii(1)) = y(ii(1));

Catégories

En savoir plus sur Get Started with MATLAB dans Help Center et File Exchange

Tags

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by