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