<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ho un set di dati composto da due colonne, X e Y, risultanti da una misurazione (voltammetria ciclica utilizzando il potenziostato PAR). Sfortunatamente, la spaziatura di X non è uguale (varia tra 0,0005 e 0,0015) e il software dello strumento non può risolvere questo problema. Vorrei ricampionare o interpolare i dati per ottenere una spaziatura uguale, ad esempio, di 0,001 in X. C'è un modo veloce per farlo?
La risposta alla tua domanda dipende da quanto irregolari sono i tuoi valori x e da cosa intendi precisamente per "interpolare".
Quindi lo script seguente non è sicuramente una raccomandazione, ma solo un esempio del tipo di cosa che è possibile. Se non hai bisogno di uno script, dovresti essere in grado di seguire passaggi simili manualmente.
Probabilmente, però, la domanda importante è: per cosa utilizzerai i valori finali?
NomiDefaultToHere ( 1 ) ;
// (0) Crea alcuni dati equidistanti utilizzando una funzione particolare
H = Funzione ( { X } , { Locale predefinito } , 0,5 + 0.4 * Peccato ( 2 * Pi () * X ) ) ;
N = 100 ; // Numero di valori x (egualmente spaziati) in [0,1]
xVals = Indice ( 0 , 1 , 1 / ( N - 1 ) ) `; // valori x come vettore colonna
yVals = H ( xVals ) + J ( N , 1 , Normale casuale ( 0 , 0,1 ) ) ; // valori y come vettore colonna
// (1) Decimare casualmente tre quarti dei dati per simulare valori x irregolari (ma sempre sulla griglia originale)
del = Indice casuale ( N , Girare ( 3 * N / 4 , 0 )) ;
xVals [ del ] = [] ;
yVals [ del ] = [] ;
dt = Nuova tabella ( "X irregolare" ,
Nuova colonna ( "X" , Numerico , Continuo , Valori ( xVals )) ,
Nuova colonna ( "y" , Numerico , Continuo , Valori ( yVals ))
) ;
// (2) Adatta un kernel più liscio e salva la formula di previsione
biv = dt << Bivariato ( Y ( : sì ) , X ( : X ) ) ;
biv << Kernel più liscio ( 1 , 1 , 0,48261 , 0 , { Salva formula di previsione }) ;
// (3) Ottieni la formula di previsione
pForm = Colonna ( dt , "Loess Predictor per y" ) << getProperty ( "Formula" ) ;
// (4) Costruisce una nuova tabella per contenere valori x equispaziati
CMD = Espr (
dt2 = Nuova tabella ( "Anche x" ,
Nuova colonna ( "X" , Numerico , Continuo ) ,
Nuova colonna ( "Previsto sì" , Numerico , Continuo , Formula ( Da definire ))
)
) ;
SostituisciInto ( CMD , Espr ( Da definire ) , Espr.Val ( pForm )) ;
CMD ;
// (5) Divide i dati misurati simulati in due vettori
xVals = Colonna ( dt , "X" ) << OttieniComeMatrice ;
yVals = Colonna ( dt , "y" ) << OttieniComeMatrice ;
// (6) Trova il più piccolo incremento x nei dati
xCanc = minimo ( xVals [ 2 :: NRow ( xVals )] - xVals [ 1 :: ( NRow ( xVals ) - 1 )]) ;
// (7) Compila la tabella con i dati interpolati utilizzando una spaziatura uguale, ad esempio 3*xDel
xVals2 = Indice ( 0 , 1 , 3 * xCanc ) `;
Colonna ( dt2 , "X" ) << Imposta valori ( xVals2 ) ;
// (8) Guarda il risultato
dt2 << Costruttore di grafici (
Misurare ( 534 , 454 ) ,
Mostra Pannello di controllo ( 0 ) ,
Variabili ( X ( : X ) , Y ( : Previsto y ) ) ,
Elementi ( Punti ( X , Y , Leggenda ( 5 ) ) )
) ;