Fare derivate con Matlab senza espressione analitica?
Ciao a tutti!
Ho un problema con Matlab: praticamente ho a disposizione un numero molto grande di dati sperimentali e devo studiarne l'andamento per verificare alcune equazioni teoriche. Il problema è che a un certo punto dovrei svolgere una derivata di una certa grandezza e non so come fare!
Ho a disposizione:
- un vettore A di dati sperimentali
- un vettore x che contiene 54 punti nello spazio (su un solo asse di riferimento) in cui sono stati misurati i valori di A
Il vettore x NON E' equispaziato, cioè i punti sull'asse non stanno tutti alla stessa distanza.
Io dovrei appunto fare il grafico della derivata $(dA)/(dx)$.
Suggerimenti? (Considerato che io con questo programma sono solo agli inizi e quindi non conosco molte funzioni!)
Io avevo provato a fare così ma non ho idea se sia giusto o no:
Grazie a chi vorrà rispondere
Ho un problema con Matlab: praticamente ho a disposizione un numero molto grande di dati sperimentali e devo studiarne l'andamento per verificare alcune equazioni teoriche. Il problema è che a un certo punto dovrei svolgere una derivata di una certa grandezza e non so come fare!
Ho a disposizione:
- un vettore A di dati sperimentali
- un vettore x che contiene 54 punti nello spazio (su un solo asse di riferimento) in cui sono stati misurati i valori di A
Il vettore x NON E' equispaziato, cioè i punti sull'asse non stanno tutti alla stessa distanza.
Io dovrei appunto fare il grafico della derivata $(dA)/(dx)$.
Suggerimenti? (Considerato che io con questo programma sono solo agli inizi e quindi non conosco molte funzioni!)
Io avevo provato a fare così ma non ho idea se sia giusto o no:
xx=linspace(0,x(end),54); % in questo modo ho un nuovo vettore xx equispaziato A1=interp1(x,A,xx); % interpolo A sui punti del nuovo vettore xx h=xx(2)-xx(1); % lunghezza del Delta x DA=diff(A)/h; % faccio la derivata xxx=xx; % costruisco un nuovo vettore xxx che contenga i centri degli intervalli del precedente vettore xx
for i=1:length(xx) xxx(i)=xx(i)+h/2; end xxx=xxx(1:(end-1)); % tolgo l'ultimo punto perché sta fuori dall'intervallo del vettore xx originario
DA=interp1(xxx,DA,x); % ritorno in x plot(x,DA);
Grazie a chi vorrà rispondere
