Bonjour à tous,
J'ai actuellement besoin d'utiliser la fonction min (ou la fonction max) afin de calculer un maximum ou un minimum. Le souci c'est que je voudrais utiliser une telle fonction mais seulement entre deux bornes. Le problème est assez tordu et je n'arrive plus à y voir clairement. Voici d'abord une représentation imagée d'une certaine courbe A1 :
Ce qui m'intéresse c'est de calculer les coordonnées des deux pics extrema ici entre les indices 45 et 65 à peu près. Il est très clair que l'on a ici un maximum et un minimum absolu. Mais il arrive qu'entre ces bornes 45 et 55 les deux pics dont je parle ne soient pas les plus grand ou les plus petits, le maximum étant par exemple inférieur à ce que j'appellerai la ligne de base autour de 50. Et c'est là que commencent les problèmes : jusque-là j'utilisais une fonction spéciale (disponible sur mathworks) et appelée extrema qui trouve tous les pics de la courbe et les restituent puis je stocke moi-même dans une matrice avec deux colonnes abscisse/ordonnée l'ensemble des pics trouvés (minima ou maxima séparés). Je ne vais pas revenir sur cette fonction qui me fournit un résultat correct. Après son utilisation, je trie simplement la matrice par rapport à la première colonne afin d'avoir les abscisses dans l'ordre, ce qui donne ici :
Le pic maximum figure donc bien dans cette matrice, en l'occurrence il s'agit de la 14ème ligne : 50 93.342. Pour le déterminer, je faisais simplement une recherche de l'indice du maximum sur la matrice précédente et je stockais dans un autre vecteur la ligne trouvée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 2 49,312 6 48,649 9 43,899 11 45,072 15 45,192 20 44,643 23 44,493 25 45,597 29 45,565 31 45,846 34 40,332 36 41,838 39 46,216 50 93,342 62 47,864 65 42,229 68 44,468 72 43,185 76 45,313 78 45,386 82 49,469 88 45,403 90 48,083 93 42,735 95 46,375 97 44,798 100 45,071
Mais voilà, comme je l'ai dit plus haut, il y a des cas problématiques où cette recherche avec find ne fournit pas le maximum entre 45 et 55. C'est pourquoi j'aurais besoin d'utiliser le find et max entre ces deux bornes. Mais je ne sais pas comment m'y prendre : d'une part comment restreindre le max sur le code précédent ? D'autre part, 45 et 55 n'existe pas en tant que pics : ici le 45 "deviendrait" 50 et le "55" 62 ce qui me permettrait de chercher le max entre 50 et 62, ce qui doit donner 50 donc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 A1b=find(maxima_A1_trier_1(:,2)==max(maxima_A1_trier_1(:,2))); maxima_A1_1=[maxima_A1_trier_1(A1b,1) maxima_A1_trier_1(A1b,2)];
J'avais essayé de restreindre la fonction extrema appliquée originellement comme suit :
Mais écrire par exemple extrema(A1(45:55)) au lieu de extrema(A1) dans la première ligne ne marche pas : je n'obtient pas seulement les pics entre les indices 45 et 55 et pire j'obtiens quelque chose et l'indicage a changé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 [valeurs_indices_max_A1,indices_max_A1,valeurs_indices_min_A1,indices_min_A1] = extrema(A1); maxima_A1=[indices_max_A1 valeurs_indices_max_A1]; minima_A1=[indices_min_A1 valeurs_indices_min_A1];
Partager