Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

Operazioni su funzioni non lineari

Handle delle funzioni

È possibile creare un handle verso qualsiasi funzione di MATLAB®, quindi utilizzarlo come metodo di riferimento alla funzione. L'handle di una funzione solitamente viene passato in un elenco di argomenti verso altre funzioni, che possono poi eseguire, o valutare, la funzione utilizzando l'handle.

Per creare un handle di funzione in MATLAB utilizzare il segno chiocciola, @, prima del nome della funzione. L'esempio seguente crea un handle per la funzione sin e lo assegna alla variabile fhandle:

fhandle = @sin;

È possibile richiamare una funzione tramite il suo handle come si richiamerebbe la funzione richiamandone il nome. La sintassi è

fhandle(arg1, arg2, ...);

La funzione plot_fhandle, sotto riportata, riceve un handle di funzione e dati, genera i dati dell'asse y tramite l'handle della funzione, poi lo traccia:

function plot_fhandle(fhandle, data)
plot(data, fhandle(data))

Quando si richiama plot_fhandle con un handle verso la funzione sin e l'argomento sotto riportato, la valutazione risultante genera un grafico con onda sinusoidale:

plot_fhandle(@sin, -pi:0.01:pi)

Funzioni di funzioni

Una classe di funzioni, denominata "funzioni di funzioni", opera con le funzioni non lineari di una variabile scalare. Questo significa che una funzione opera su un'altra funzione. Le funzioni di funzioni comprendono

  • Individuazione degli zeri

  • Ottimizzazione

  • Quadratura

  • Equazioni differenziali ordinarie

MATLAB rappresenta la funzione non lineare tramite il file che la definisce. Ad esempio, qui di seguito viene riportata una versione semplificata della funzione humps contenuta nella cartella matlab/demos:

function y = humps(x)
y = 1./((x-.3).^2 + .01) + 1./((x-.9).^2 + .04) - 6;

Valutare questa funzione come insieme di punti nell'intervallo 0 ≤ x ≤ 1 con

x = 0:.002:1;
y = humps(x);

Quindi tracciare la funzione con

plot(x,y)

Il grafico mostra che la funzione presenta un minimo locale attorno a x = 0,6. La funzione fminsearch trova il minimizzatore, il valore di x in cui la funzione assume questo minimo. Il primo argomento verso fminsearch è un handle di funzione verso la funzione minimizzata, mentre il secondo argomento è un'approssimazione della posizione del minimo:

p = fminsearch(@humps,.5)
p =
    0.6370

Per valutare la funzione in corrispondenza del minimizzatore,

humps(p)

ans =
   11.2528

Gli analisti numerici utilizzano i termini quadratura e integrazione per distinguere tra l'approssimazione numerica dei numeri interi definiti e l'integrazione numerica di equazioni differenziali ordinarie. Le routine di MATLAB per la quadratura sono quad e quadl. La dichiarazione

Q = quadl(@humps,0,1)

calcola l'area sotto la curva, nel grafico, e genera

Q =
   29.8583

Il grafico, infine, mostra che la funzione non è mai pari a zero in questo intervallo. Se quindi si cerca uno zero con

z = fzero(@humps,.5)

se ne troverà uno esternamente all'intervallo:

z =
   -0.1316