Funzione fit cftool da programma

di il
6 risposte

Funzione fit cftool da programma

Ciao a tutti, ho inserito la chiamata a cftool in un programma semplicemente scrivendo:
cftool (xdata,ydata);
Volevo sapere se esiste un modo per dargli anche una funzione di fitting direttamente dal programma (cioè quando si apre cftool) oltre i dati esce già la funzione di fitting voluta (perchè altriemtni di default mi esce una funzione lineare).
Grazie

6 Risposte

  • Re: Funzione fit cftool da programma

    Tra gli input possibili non figura la possibilità di specificare una funzione:

    https://it.mathworks.com/help/curvefit/curvefitting-app.html

    Tuttavia, forse, nelle pagine seguenti, puoi trovare una soluzione alternativa:

    https://it.mathworks.com/matlabcentral/answers/343084-how-can-we-automate-curve-fitting-tool-cftool-processes
    https://it.mathworks.com/help/curvefit/custom-nonlinear-models.html
  • Re: Funzione fit cftool da programma

    Ciao e come sempre grazie!

    ask_raf ha scritto:


    Tra gli input possibili non figura la possibilità di specificare una funzione:

    https://it.mathworks.com/help/curvefit/curvefitting-app.html [/code]

    Infatti io avevo letto che non c'era una funzione che permette ciò...tuttavia, quando ho portato il programma al laboratorio mi hanno detto che sicuramente c'è (però ovviamente non la conoscono)...

    Detto ciò...ho provato a seguire questo esempio
    
    function y = piecewiseLine(x,a,b,c,d,k)
    % PIECEWISELINE   A line made of two pieces
    % that is not continuous.
    
    y = zeros(size(x));
    
    % This example includes a for-loop and if statement
    % purely for example purposes.
    for i = 1:length(x)
        if x(i) < k,
            y(i) = a + b.* x(i);
        else
            y(i) = c + d.* x(i);
        end
    end
    end

    che trovi dove c'è scritto Fitting a Curve Defined by a File in the Curve Fitting App nel sito che mi hai indicato

    ask_raf ha scritto:


    https://it.mathworks.com/help/curvefit/custom-nonlinear-models.html

    ho provato allora a fare
    function myfitfun(xdata,A,ckgraconv_n, lambda,ckdian);
    myfitfun= A.*ckgraconv_n+lambda.*ckdian;
    cftool (xdata,ydata);
    ma mi da l'errore:
    Error: File: sp2sp3diff_Titantah.m Line: 562 Column: 5
    Function definitions are not permitted in this context.
    dove la riga 562 è
     function myfitfun(xdata,A,ckgraconv_n, lambda, ckdian);
    Poichè quel pezzo
    A.*ckgraconv_n+lambda.*ckdian
    è un pezzo già di fit che fa il programma (appoggiandosi a uno script esterno, infatti il programma plotta la funzione di fit come:
      plot(xdata, A.*ckgraconv_n+lambda.*ckdian,'g');
    ho anche provato a fare una cosa più semplice (solo per provare se funziona)
    e cioè:

    
    function myfitfun(xdata, b);
        i=1;
        for i=1:1024;
        myfitfun= xdata(i)*xdata(i)+b;
        i++;
        end
    [/cod]
    
    ma l'errore è sempre lo stesso
  • Re: Funzione fit cftool da programma

    L'errore è nel modo nel quale hai definito la funzione:
    
    function myfitfun(xdata, b)
    
    definisce una funzione che non ritorna alcun output inoltre non puoi usare il nome della funzione come nome di una variabile all'interno della funzione stessa (ed in generale).

    Se vuoi che la funzione ritorni un parametro di output la devi definire come:
    
    function ret_value=myfitfun(xdata, b)
    
    dove "ret_value" è il nome della variabile di output della funzione, calcolato all'intero della funzione stessa.

    Per chiamare la funzione dovrai scrivere:
    
    output_val=myfitfun(xdata, b)
    
    Ho volutamente usato nomi diversi per la variabile di output per sottolineare il fatto che nn devono essere necessariamente uguali.

  • Re: Funzione fit cftool da programma

    Ciao, grazie...comunque scrivendo:
    function ret_value=myfitfun(A,lambda);
        output_val=myfitfun(A,lambda);
       cftool (xdata,ydata);
    (perchè A,lambda sono i parametri del fit) mi da l'errore
    Function definitions are not permitted in this context.
    ma credo dipenda dal fatto che si appoggia a un file esterno..boh...
  • Re: Funzione fit cftool da programma

    Devi pubblicare una parte coerente del codice, non solo qualche riga, qua e là.

    Hai pubblicato tre righe di codice che, da sole non consentono di capire quale sia il problema.

    Da dove saltano fuori "xdata" e "ydata"?

    Per caso hai inserito la funzione all'interno di uno script (".m") che contiene altro codice?
    Se è così, non puoi farlo, se non hai una versione di MatLab R2016b o più recente; le funzione devono essere salvate ognuna in un file dedicato, molto meglio se salvato con lo stesso nome della funzione.

    Puoi inserire più di una funzione in un file ".m", in questo caso solo la prima funzione è visibile "all'esterno" (pupò essere chiamata da altre funzioni / scripts), le altre sono considerate "funzioni locali" e sono visibili solo alla prima funzione.

    Hai letto la documentazione su come definire le funzioni che ti ho indicato nella risposta precedente?
  • Re: Funzione fit cftool da programma

    Ciao innanzitutto grazie.
    Al momento devo fare un'altra cosa, poi proverò a vedere meglio.

    Comunque, io ho R2017a 64bit , al laboratorio c'è R2015 (non ricorso se a, b). Pensi che posso portare il file su pennetta senza portarmi il computer, o possono esserci problemi di compatibilità?
Devi accedere o registrarti per scrivere nel forum
6 risposte