Alla fine della fiera, identificare dei parametri altro non e' che un problema di ottimizzazione, per il quale devi trovare il minimo di una certa funzione ("funzione costo") da te definita.
Partiamo da un caso piu' semplice, di cui e' immediato visualizzare il risultato.
Consideriamo questa funzione:

Come fittare un insieme di punti usando questa funzione?
Ecco un esempio di codice (che verosimilmente senza modificarlo non funzionera' con i tuoi dati, e' giusto per darti l'idea di come approcciare il problema)
main.m- Codice: Seleziona tutto
%
% data..... %already defined
% t..... %already defined
%
%% Initialize variables
alpha=0;
beta=0;
phi=0;
k=0;
v=0;
d0=0;
%% Fitting
x0 = [alpha, beta, phi, k, v, d0];
options = optimset('MaxFunEvals',10000,'TolFun',1e-9,'TolX',1e-9);
[x] = fminsearch(@(x) cost_function(t, data, x), x0, options);
alpha=x(1);
beta=x(2);
phi=x(3);
k=x(4);
v=x(5);
d0=x(6);
%% check result
[ x,y ] = fitting_function( t, alpha, beta, phi, k, v, d0 );
figure
plot3(t,data(1,:),data(2,:),'-b','LineWidth',2)
hold on
plot3(t,x,y,'--r','LineWidth',2)
xlabel('t')
ylabel('x')
zlabel('y')
grid minor
legend('data','fit')
cost_function.m- Codice: Seleziona tutto
function [ cost ] = cost_function( t, data, x )
alpha=x(1);
beta=x(2);
phi=x(3);
k=x(4);
v=x(5);
d0=x(6);
[ x_var, y_var ] = fitting_function( t, alpha, beta, phi, k, v, d0 );
cost_x = sum( (x_var - data(1,:)).^2 );
cost_y = sum( (y_var - data(2,:)).^2 );
cost = mean([cost_x, cost_y]);
end
fitting_function.m- Codice: Seleziona tutto
function [ x,y ] = fitting_function( t, alpha, beta, phi, k, v, d0 )
x = v*cos(phi)*cos(beta)./k * (1-exp(-k*t))+d0*cos(alpha);
y = v*sin(phi)*cos(beta)./k * (1-exp(-k*t))+d0*sin(alpha);
end
Per il problema x,y,z,t che hai tu, devi solo aggiungere una dimensione.
Se il fitting non funziona, per problemi con dati piu' complessi, si puo':
- cambiare tecnica di ottimizzazione (come accennato sopra, ad esempio la simulated-annealing)
- cambiare gli initial guess
- definire una cost-function differente