Matlab - Unir vectores con el valor mas alto #2

 
Vista:
sin imagen de perfil
Val: 66
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Unir vectores con el valor mas alto #2

Publicado por jose david (23 intervenciones) el 04/07/2020 23:01:15
Estimada comunidad

Espero se encuentren bien.

Necesito ayuda frente a un ejercicio que he intentado en diversas oportunidades de solucionar, pero aún no he logrado mi objetivo

Intento unir dos espectros de datos (conjuntos de valores X, Y) los cuales se sobreponen en sus extremos de continuidad (el extremo derecho de uno de los espectros se solapa con el extremo izquierdo del siguiente), esto conlleva a que exista una zona con dos valores de Y.

Para solucionar este problema considere que lo mejor para los fines del experimento era que "Sobreviviera" el valor de Y más alto por lo cual use un código generado por el señor Jose Jeremias de la forma


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
28
29
E=[];
 
a=whos('Qr*'); % las matrices eran Q1, Q2...
 
for i=1:size(a,1)
 
E=[E; eval(a(i).name)];
 
end
 
F=sortrows(E) ;
 
G=unique(F(:,1));
 
for i=1:length(G)
 
    H=find(F(:,1)==G(i));
 
     I=F(H,2);
 
     maximo=max(I);
 
     D1(i,:)=[G(i), maximo];
 
end
 
D1
 
end

El cual me entrego unos resultados con picos que saltan desde un valor a otro como se ve en el siguiente anexo

codigo-1

Posterior a esto intente realizar unos cambios al código de la forma :

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
E=[];
 
a=whos('Qr*');
 
for i=1:size(a,1)
 
E=[E; eval(a(i).name)];
 
end
 
F=sortrows(E) ;
 
G=unique(F(:,1));
 
for i=1:length(F)
 
    H=find(abs(F(:,1)-F(i))<0.022);
 
     I=F(H,2);
 
     maximo=max(I);
 
     D1(i,:)=[F(i), maximo];
 
end

lo cual me entrega unos mejores resultados como se ven en la siguiente grafica

codigo-2

Pero aún no he podido solucionar el problema por que como se pueden dar cuenta donde deben ir picos existen unos pequeños valles , lo que me dificulta la aplicabilidad del código

1
findpeaks

Si es necesaria que cargue la parte del código que me permitió volver los archivos matrices, me indican para cargarlos
Adjunto los dos archivos formato (.Csv) que se comentan en este post.


De verdad quedo muy atento, a cualquier indicación o ayuda

Mil gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 8.185
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Unir vectores con el valor mas alto #2

Publicado por JOSE JEREMIAS CABALLERO (5756 intervenciones) el 05/07/2020 01:13:53
¿Matrices Q*?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 8.185
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Unir vectores con el valor mas alto #2

Publicado por JOSE JEREMIAS CABALLERO (5756 intervenciones) el 05/07/2020 01:30:08
Nos muestra la parte de grafica pero no hay información del código que hace la gráfica.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 66
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Unir vectores con el valor mas alto #2

Publicado por jose david (23 intervenciones) el 05/07/2020 16:02:20
para realizar la grafica solamente use el codigo

1
2
3
4
plot (D1(:,1),D1(:,2))
 hold on
 plot (Qr1(:,1),Qr1(:,2))
 plot (Qr2(:,1),Qr2(:,2))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 66
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Unir vectores con el valor mas alto #2

Publicado por jose david (23 intervenciones) el 05/07/2020 15:58:26
Estimado jose jeremias

Espero se encuentre bien

Muchas gracias por responder a mi post

ya entrego el codigo completo


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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
[archivo,ruta]=uigetfile('*.csv*','MultiSelect',"on");
dat_archivo=strcat(ruta,archivo);
archivo2=char(archivo);
k = size(archivo2,1);
    switch k
    case 0
    return;
    case 1  %% un solo archivo cargado
    dat_archivo=strcat(ruta,archivo);
    Qr= readtable(dat_archivo);
    Qr=table2cell(Qr);
    Qr=string(Qr);
    Qr=strrep(Qr,",",".");
    Qr=str2double(Qr);
    K2=Qr;
    Qr=str2double(Qr);
 
    n=isnan(Qr);
    if (n == 1)
        Qr=K2;
    else
    Qr(isnan(Qr))=0;
    end
    otherwise  %% mas de un archivo cargado
 
     for i=1:k %% debe permitir crear varias matrices con cada una de los archivos cargados
     dat_archivo=strcat(ruta,archivo(i));
     dat_archivo=char(dat_archivo);
Qr= readtable(dat_archivo);
  Qr=table2cell(Qr);
    Qr=string(Qr);
    Qr=strrep(Qr,",",".");
    R2=Qr;
    Qr=str2double(Qr);
 
    n=isnan(Qr);
    if (n == 1)
        Qr=R2;
    else
 
    Qr(isnan(Qr))=0;
    end
     v=genvarname(['Qr',num2str(i)]);
     eval([v, '=Qr']);
 
     end
     end
E=[];
 
a=whos('Qr*');
 
for i=1:size(a,1)
 
E=[E; eval(a(i).name)];
 
end
 
F=sortrows(E) ;
 
G=unique(F(:,1));
 
for i=1:length(F)
 
    H=find(abs(F(:,1)-F(i))<0.022);
 
     I=F(H,2);
 
     maximo=max(I);
 
     D1(i,:)=[F(i), maximo];
 
end
 
 
 
Q=D1;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 66
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Unir vectores con el valor mas alto #2

Publicado por jose david (23 intervenciones) el 06/07/2020 15:28:28
aun no he podido solucionar.


se me ocurre eliminar las filas que cumplan una condicion

algo como

1
2
3
4
5
6
for i=1:length(F)
if ( A(:,2) < (A(i),2)  )
 
%% eliminar esa fila de A
 
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar