Cómo encontrar valores mayores en arreglos de acuerdo al orden
Publicado por Pilar (35 intervenciones) el 25/01/2018 23:24:40
Hola, tengo un caso particular que aún no logro cómo resolver, espero puedan ayudarme.
Tengo el siguiente arreglo de 101 elementos:
Donde el valor máximo es el 1 y se encuentra en el indice 51 del arreglo. Debo encontrar el penúltimo mayor a ese número pero no debe ser el valor anterior ni el siguiente del máximo, es decir, que no sean los indices 50 ni 52, debo encontrar el mayor entre los valores restantes.
Si ordeno todo el arreglo de los valores menores a mayores quedaría de la siguiente manera:
Donde vemos que el mayor es el 1, pero los valores próximos mayores según el orden son los correspondientes a los indices 50 y 52, los que no debo contar, así que el valor que necesito obtener es el que se encuentra antes de esos.
¿Cómo puedo resolver este problema con la misma idea pero que lo haga de forma directa?, es decir, aunque tuviera otro arreglo con diferentes valores pero que hiciera lo mismo, tomar el valor máximo y después encontrar el siguiente máximo pero que no sean ni su valor anterior ni el siguiente de él.
Espero me haya podido explicar y puedan ayudarme.
Tengo el siguiente arreglo de 101 elementos:
1
2
a=[0.0576300862316789 0.0576621713163863 0.0585042922056451 0.0607414598908939 0.0623751125231964 0.0616507814346697 0.0657936344230945 0.0941418699700253 0.159086108535974 0.223191816168747 0.182081688103828 0.0556822802711206 0.224400269407963 0.139377527978275 0.208540999863253 0.168502568230666 0.123860428230392 0.178411646093968 0.140542397426977 0.118209452080182 0.113432766139960 0.176563935643092 0.145638082742001 0.130450802846858 0.149420322836074 0.103933295577100 0.129681833604020 0.0860681337031712 0.162165903960626 0.211604222101748 0.139545007019492 0.105262958116234 0.140728930359906 0.199831337307867 0.208091080428639 0.171877549556737 0.209505430436842 0.170724164156591 0.207081767225051 0.149612962795540 0.215100450962213 0.199031000093617 0.0551909376636168 0.110533724348708 0.103292451755349 0.177800162116462 0.0572038368723621 0.0986793017817233 0.0178667847529531 0.245627933464903 1 0.249276652759747 0.0183986117663701 0.103077569095206 0.0605846927162993 0.190813260527121 0.112245085730615 0.121520473616639 0.0613294786078909 0.223318717597293 0.243432030098998 0.170587762710754 0.237609698133927 0.196906791284840 0.242611277393454 0.199620529556550 0.242131428983313 0.232723609846334 0.163884841989324 0.122473539860381 0.162092343727048 0.245223890826547 0.187385139897209 0.0991153538669213 0.148772664925400 0.118741450108535 0.169962229907607 0.147708999428773 0.164135473749470 0.198048907374355 0.126633795191900 0.131347694543135 0.155443246325607 0.196440870602039 0.135784259183168 0.183952703347002 0.226755485225644 0.150979647663465 0.242218507619798 0.0599051985542947 0.195293469572110 0.238719813319193 0.169726364382063 0.100213947717775 0.0699007486866738 0.0653907375314294 0.0660687959304845 0.0642699964261083 0.0618556720162170 0.0609373820008070 0.0608942476911859];
[maximo,Indice]=max(a);
Si ordeno todo el arreglo de los valores menores a mayores quedaría de la siguiente manera:
1
2
3
4
[val,ind]=sort(a);
val= [0.0178667847529531 0.0183986117663701 0.0551909376636168 0.0556822802711206 0.0572038368723621 0.0576300862316789 0.0576621713163863 0.0585042922056451 0.0599051985542947 0.0605846927162993 0.0607414598908939 0.0608942476911859 0.0609373820008070 0.0613294786078909 0.0616507814346697 0.0618556720162170 0.0623751125231964 0.0642699964261083 0.0653907375314294 0.0657936344230945 0.0660687959304845 0.0699007486866738 0.0860681337031712 0.0941418699700253 0.0986793017817233 0.0991153538669213 0.100213947717775 0.103077569095206 0.103292451755349 0.103933295577100 0.105262958116234 0.110533724348708 0.112245085730615 0.113432766139960 0.118209452080182 0.118741450108535 0.121520473616639 0.122473539860381 0.123860428230392 0.126633795191900 0.129681833604020 0.130450802846858 0.131347694543135 0.135784259183168 0.139377527978275 0.139545007019492 0.140542397426977 0.140728930359906 0.145638082742001 0.147708999428773 0.148772664925400 0.149420322836074 0.149612962795540 0.150979647663465 0.155443246325607 0.159086108535974 0.162092343727048 0.162165903960626 0.163884841989324 0.164135473749470 0.168502568230666 0.169726364382063 0.169962229907607 0.170587762710754 0.170724164156591 0.171877549556737 0.176563935643092 0.177800162116462 0.178411646093968 0.182081688103828 0.183952703347002 0.187385139897209 0.190813260527121 0.195293469572110 0.196440870602039 0.196906791284840 0.198048907374355 0.199031000093617 0.199620529556550 0.199831337307867 0.207081767225051 0.208091080428639 0.208540999863253 0.209505430436842 0.211604222101748 0.215100450962213 0.223191816168747 0.223318717597293 0.224400269407963 0.226755485225644 0.232723609846334 0.237609698133927 0.238719813319193 0.242131428983313 0.242218507619798 0.242611277393454 0.243432030098998 0.245223890826547 0.245627933464903 0.249276652759747 1];
%indices de los valores ordenados:
ind=[49 53 43 12 47 1 2 3 90 55 4 101 100 59 6 99 5 98 96 7 97 95 28 8 48 74 94 54 45 26 32 44 57 21 20 76 58 70 17 81 27 24 82 85 14 31 19 33 23 78 75 25 40 88 83 9 71 29 69 79 16 93 77 62 38 36 22 46 18 11 86 73 56 91 84 64 80 42 66 34 39 35 15 37 30 41 10 60 13 87 68 63 92 67 89 65 61 72 50 52 51];
¿Cómo puedo resolver este problema con la misma idea pero que lo haga de forma directa?, es decir, aunque tuviera otro arreglo con diferentes valores pero que hiciera lo mismo, tomar el valor máximo y después encontrar el siguiente máximo pero que no sean ni su valor anterior ni el siguiente de él.
Espero me haya podido explicar y puedan ayudarme.
Valora esta pregunta


0