Data_Fitting_Esponenziale

di il
2 risposte

Data_Fitting_Esponenziale

Salve a tutti. Sono nuovo del forum perciò perdonatemi se avrò sbagliato sezione in cui postare o altro del genere.
Ho cercato qualche discussione che si avvicinasse al mio problema ma nulla . Ho deciso perciò di aprire una discussione.
Vado subito al sodo.
Ho i dati di una prova di creep su un certo materiale (time, strain).
Riesco a rappresentare i punti sperimentali senza problemi caricando da file ma ho dei dubbi sulla funzione esponenziale che dovrebbe avvicinarcisi nel senso dei minimi quadrati. Segue quanto ho scritto:
file=fopen('Data.txt','r');    %Carico i dati come matrice di tot righe e 2 colonne
A=fscanf(file,'%f %f',[2 Inf]); 
fclose(file);
A=A';                                         % matrice trasposta

time=A(:,1);                              %asse delle ascisse
strain=A(:,2);                             %asse delle ordinate

plot(time,strain,'MarkerSize',4);   %punti sperimentali su grafico
xlabel('time');
ylabel('strain');
y=A(2:63,2);                                  %di qui in poi provo ad avvicinarmi ai dati con la unzione esponenziale 
x=A(2:63,1);                                   %da notare che parto dalla seconda riga per la ragione che spiego sotto
%hold on
logp1 = polyfit(x,log10(y),1)
logpred1 = 10.^polyval(logp1,x);
plot(x,y,'o',x,logpred1);
Innanzitutto non riesco a far partire la funzione dal vero punto iniziale, quello (time=0,strain=0).
Il risultato è infatti quello:
NaN -Inf
cioè forma indeterminata e - infinito.
Posso in qualche modo tracciare l'esponenziale senza rinunciare a quel punto?
Inoltre questi sono i coefficienti che mi vengono restituiti:
0.0037 -0.9056
Vi chiedo: di che coefficienti si tratta?
La funzione è questa : y = -0.9056+e^(0.0037 * x)?
Spero di non aver scritto scemenze (mi sono avvicinato a matlab solo da pochi giorni).
Grazie a tutti coloro i quali mi presteranno attenzione

2 Risposte

  • Re: Data_Fitting_Esponenziale

    Per quanto riguarda il primo problema (NaN et -Inf) servirebbero i dati di input per fare qualche prova.
    Potresti pubblicare un esempio significativo dei dati di input o condividerli in un repository (es. dropbox, ...)?

    Per quanto riguarda le funzioni:

    "polyfit" ritorna i coefficienti di un polinomio di grado "n" (specificato come terzoparametro nella chiamata alla funzione) nel tuo caso:
    logp1 = polyfit(x,log10(y),1)
    genera i coefficienti di un poolinomio di primo grado, di conseguenza, la funzione non è
     y = -0.9056+e^(0.0037 * x)
    ma,
     y = logp1(1)*x+logp1(2)

    Non avendo (al momento) a disposizione i dati di input, un esempio potrebbe essere:
    % Generazione dati di input
    x=1:.1:5
    y=3*10.^x
    % Interpolazione con polinomio 4° grado
    subplot(3,1,1)
    c=polyfit(x,y,4)
    k=polyval(c,x)
    hold on
    plot(x,y,'b',x,k,'r')
    % Interpolazione con polinomio 5° grado
    subplot(3,1,2)
    c=polyfit(x,y,5)
    k=polyval(c,x)
    hold on
    plot(x,y,'b',x,k,'r')
    % Interpolazione con polinomio 7° grado
    subplot(3,1,3)
    c=polyfit(x,y,7)
    k=polyval(c,x)
    hold on
    plot(x,y,'b',x,k,'r')
    

    Allegati:
    16082_7e3402939bb0766111bde148c5f77cdc.jpg
    16082_7e3402939bb0766111bde148c5f77cdc.jpg
  • Re: Data_Fitting_Esponenziale

    Ciao! Innanzitutto grazie per aver risposto.
    Con logp1(1) e logp2(2) ti riferisci ai coefficienti che mi vengono restituiti nel command window?
    Se così fosse otterrei y=-0.9056+0.0037x .
    Io dovrei confrontare quanto ottenuto con un modello che ha legge esponenziale per ottimizzarne i coefficienti!
    Mi spiego meglio.
    Dati questi valori:
    time strain
    0 0.00000000
    2 0.05405405
    4 0.07657658
    6 0.09009009
    8 0.10810811
    10 0.11711712
    12 0.12612613
    14 0.13063063
    16 0.13963964
    18 0.15315315
    20 0.15315315
    22 0.15765766
    24 0.16666667
    26 0.17567568
    28 0.18018018
    30 0.18468468
    32 0.18918919
    34 0.19369369
    36 0.19369369
    38 0.20270270
    40 0.20720721
    42 0.20720721
    44 0.21621622
    46 0.21621622
    48 0.21621622
    50 0.22072072
    52 0.22072072
    54 0.22522523
    56 0.22972973
    58 0.23873874
    60 0.23873874
    Io dovrei ottimizzare i coefficienti di questo modello:
    epsilon=(sigma_0/E)*(1-e^(-Et/eta)).
    Sai inoltre come posso verificare la bontà dei coefficienti con il fattore di correlazione R^2?
    Per quanto riguarda l'esempio ti ringrazio, è stato di conferma a quanto avevo fatto per un altro modello.
Devi accedere o registrarti per scrivere nel forum
2 risposte