<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo un conjunto de datos que consta de dos columnas, X e Y, resultantes de una medición (voltametría cíclica usando potenciostato PAR). Desafortunadamente, el espaciado de X no es igual (varía entre 0,0005 y 0,0015) y el software del instrumento no puede solucionar este problema. Me gustaría volver a muestrear o interpolar los datos para obtener un espaciado igual de, digamos, 0,001 en X. ¿Existe una forma rápida de hacerlo?
La respuesta a su pregunta depende de qué tan irregulares sean sus valores de x y de qué quiere decir precisamente con "interpolar".
Así que el siguiente guión definitivamente no es una recomendación, sólo un ejemplo del tipo de cosas que son posibles. Si no necesita un script, debería poder seguir pasos similares manualmente.
Probablemente, sin embargo, la pregunta importante es ¿para qué utilizará los valores finales?
NombresDefaultToHere ( 1 ) ;
// (0) Crea algunos datos espaciados uniformemente usando una función particular
h = Función ( { X } , { Local predeterminado } , 0,5 + 0,4 * Pecado ( 2 * Pi () * X ) ) ;
norte = 100 ; // Número de valores x (equiespaciados) en [0,1]
xVals = Índice ( 0 , 1 , 1 / ( norte - 1 ) ) `; // valores x como un vector de columna
yVals = h ( xVals ) + j ( norte , 1 , Normal aleatorio ( 0 , 0.1 ) ) ; // valores y como vector de columna
// (1) Diezmar aleatoriamente tres cuartas partes de los datos para simular valores x desiguales (pero aún en la cuadrícula original)
del = Índice aleatorio ( norte , Redondo ( 3 * norte / 4 , 0 )) ;
xVals [ del ] = [] ;
yVals [ del ] = [] ;
dt = Nueva tabla ( "X desigual" ,
Nueva columna ( "X" , Numérico , Continuo , Valores ( xVals )) ,
Nueva columna ( "y" , Numérico , Continuo , Valores ( yVals ))
) ;
// (2) Ajustar un kernel más suave y guardar la fórmula de predicción
vivac = dt << bivariado ( Y ( : y ) , X ( : X ) ) ;
vivac << Kernel más suave ( 1 , 1 , 0.48261 , 0 , { Guardar fórmula de predicción }) ;
// (3) Obtener la fórmula de predicción
pForm = Columna ( dt , "Predictor de pérdidas para y" ) << obtener propiedad ( "Fórmula" ) ;
// (4) Construya una nueva tabla para contener valores de x igualmente espaciados
CMD = Expr. (
dt2 = Nueva tabla ( "Incluso x" ,
Nueva columna ( "X" , Numérico , Continuo ) ,
Nueva columna ( "Predicho y" , Numérico , Continuo , Fórmula ( Por determinar ))
)
) ;
Sustituir en ( CMD , Expr. ( Por determinar ) , EvaluaciónExpr ( pForm )) ;
CMD ;
// (5) Obtener los datos medidos simulados en dos vectores
xVals = Columna ( dt , "X" ) << ObtenerAsMatrix ;
yVals = Columna ( dt , "y" ) << ObtenerAsMatrix ;
// (6) Encuentra el incremento x más pequeño en los datos
xDel = mín. ( xVals [ 2 :: Nfila ( xVals )] - xVals [ 1 :: ( Nfila ( xVals ) - 1 )]) ;
// (7) Llene la tabla con los datos interpolados usando un espaciado igual de, digamos, 3*xDel
xVals2 = Índice ( 0 , 1 , 3 * xDel ) `;
Columna ( dt2 , "X" ) << Establecer valores ( xVals2 ) ;
// (8) Mira el resultado
dt2 << Generador de gráficos (
Tamaño ( 534 , 454 ) ,
Mostrar panel de control ( 0 ) ,
variables ( X ( : X ) , Y ( : Predicho y ) ) ,
Elementos ( Puntos ( X , Y , Leyenda ( 5 ) ) )
) ;