Matlab - Interpola en Matlab con varios NaN consecutivos

 
Vista:

Interpola en Matlab con varios NaN consecutivos

Publicado por Ixchel (1 intervención) el 12/03/2018 19:09:58
este programa de abajo interpola dos valores.. donde hay: x1, NaN, x2

1
2
3
4
5
6
7
function x=interpola(x)
I=find(isnan(x));
m=length(I);
for i=1:m
    x(I(i))=(x(I(i)-1)+x(I(i)+1))/2;
end
end

tenemos:
1
2
3
4
5
6
7
8
9
10
11
>> x=[1,nan,3]
 
x =
 
     1   NaN     3
 
>> interpola(x)
 
ans =
 
     1     2     3


ahora hay que programar la funcion interpola para hacer correcciones con NaN consecutivos, es decir, x=[x1, x2, NaN, NaN, NaN, x6, NaN, NaN, x9]

como lo puedo hacer?
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 Lindsey
Val: 419
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Interpola en Matlab con varios NaN consecutivos

Publicado por Lindsey (119 intervenciones) el 15/03/2018 00:20:34
Yo lo hice buscando cada grupo de NaNs consecutivos, no sé si te sirva así

1
2
3
4
5
6
7
8
9
I=find(isnan(x)); % Encuentra los NaN
igrupos = [1 find(diff(I)~=1)+1 length(I)+1]; % Tiene los índices en donde empieza cada grupo de NaNs consecutivos y el número de elemento de I +1
for g=1:length(igrupos)-1
    grupo = I(igrupos(g)):I(igrupos(g+1)-1);
    paso = (x(grupo(end)+1) - x(grupo(1)-1))/(length(grupo)+1);
    for gg=1:length(grupo)
        x(grupo(gg)) = x(grupo(gg)-1)+paso;
    end
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