Un handle di funzione può essere utilizzato per chiamare una funzione, ad es.Perché è necessaria la funzione MatLab "feval"?
f = @sin;
val = f(1.0);
quindi perché è mai necessario "feval"?
val = feval(f, 1.0);
Quando è utile?
Un handle di funzione può essere utilizzato per chiamare una funzione, ad es.Perché è necessaria la funzione MatLab "feval"?
f = @sin;
val = f(1.0);
quindi perché è mai necessario "feval"?
val = feval(f, 1.0);
Quando è utile?
Per feval
, il primo argomento può essere una stringa tra virgolette, che offre maggiore flessibilità di un handle di funzione. Potresti fare cose come avere funzioni con un nome base seguito da un indice come in fn1
, fn2
, fn3
, e quindi richiamarle dinamicamente usando feval(['fn', num2str(k)], x, y, z);
.
Grazie, mi chiedo se qualche altro linguaggio come Python supporti nomi di funzioni generati dinamicamente? –
Sì, altri linguaggi hanno meccanismi ancora più sofisticati. Puoi leggere sull'introspezione. Cerca anche "messaggi" in Objective-C. –
Vorrei aggiungere che, storicamente, TMW ha promosso un passaggio dai metodi 'eval' a quelli 'controllati' come gli handle @function. In altre parole, il costrutto di cui sopra è facilmente implementabile con gli handle di @function, ma potrebbe ancora essere utilizzato in codice legacy o per abitudine. – Oleg
Fino Release 14 (MATLAB 7), è stato il feval modo per valutare un manico funzione di ... o per valutare le funzioni quando sono specificati con il loro nome.
Fonte: Mental model for feval()
.
Grazie Oleg, ha molto senso. Anche un altro articolo del blog menzionato nei commenti: [Altro su eval] (http://blogs.mathworks.com/loren/2006/01/04/more-in-eval/) –
Come nota a margine, in 5 anni con MATLAB I potrebbe aver usato feval solo una volta. – Oleg
hai ottenuto il decimo voto :-) bella risposta! – Shai
Non necessariamente si sa sempre quale funzione dovrebbe essere utilizzata; ci sono molti esempi
ecco un esempio sciocco: let, in un file di testo dopo ogni numero, vengono rappresentate diverse parole che possono essere valutate come una funzione matematica, come, media, min, max, quadrato e il compito è calcolare il risultato dopo ogni tipo,
2,square,2,power,4,log,10 ...
e si desidera scrivere un programma per passare attraverso questo testo e calcolare il risultato finale ...
un altro esempio è, per esempio, voglio definire un funzione di trama con funzione di input dell'utente gestire f, quindi deve essere in un modo flessibile ...
[email protected](f,x) plot(f(x))
In entrambi i casi è ancora possibile utilizzare i quadratini di funzione. – Oleg
Trovo che faciliti la lettura del codice, poiché le parentesi vengono utilizzate sia per l'indicizzazione che per l'invocazione di funzione. L'uso di 'feval' rende chiaro ciò che stiamo facendo. – Amro