[MATLAB] errore nell'uso di 'inline'

leadfoot
salve, sono innumerevoli i tentitavi di usare questa funzione con 'inline'. ottengo sempre quel messaggio di errore.


la funzione : F=|sin|^(24/9) * log(x) / (x^2+x+10) ;

Ho cambiato piu volte la sintassi, nn so dove sbaglio.


f =

Inline function:
f(x) = (abs(sin(x)).^(24/9).*log(x)./((x.^2) + x + 10)

>> y=f(x)
??? Error using ==> inlineeval
Error in inline expression ==> (abs(sin(x)).^(24/9).*log(x)./((x.^2) + x + 10)
??? Error: Incomplete or misformed expression or statement.

Error in ==> inline.subsref at 25
INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);

>>

grazie.

Risposte
apatriarca
Ma non è quella la sintassi per definire una funzione inline in matlab.. Un metodo potrebbe essere il seguente:
f = @(x) (abs(sin(x)).^(24/9).*log(x)./((x.^2) + x + 10)

Dai una occhiata nella documentazione di Matlab per ulteriori dettagli ed esempi. Non ho verificato che il codice della funzione è corretto in matlab. Se ci sono problemi guarda la documentazione che ti ho consigliato.

In futuro utilizza il tag code per inserire il codice e scrivi le formule in TeX.

leadfoot
"apatriarca":
Ma non è quella la sintassi per definire una funzione inline in matlab.. Un metodo potrebbe essere il seguente:
f = @(x) (abs(sin(x)).^(24/9).*log(x)./((x.^2) + x + 10)

Dai una occhiata nella documentazione di Matlab per ulteriori dettagli ed esempi. Non ho verificato che il codice della funzione è corretto in matlab. Se ci sono problemi guarda la documentazione che ti ho consigliato.

In futuro utilizza il tag code per inserire il codice e scrivi le formule in TeX.

Questo è la sintassi di inserimento.
Scusa le omissini ma sono veramente distrattone.
f=inline('(abs(sin(x)).^(24/9).*log(x)./((x.^2) + x + 10)')

apatriarca
Nel codice c'è una parentesi di troppo.

leadfoot
"apatriarca":
Nel codice c'è una parentesi di troppo.

infatti, sono in piu ma cmq mi accettava il comando.

f=inline('(abs(sin(x)).^(24/9).*log(x)./((x^2) + x + 10)')

f =

Inline function:
f(x) = (abs(sin(x)).^(24/9).*log(x)./((x^2) + x + 10)

>>

riscritta cosi:
f=inline('(abs(sin(x)).^(24/9)).*log(x)./((x^2) + x + 10)')
viene accettata lo stesso il comando.

ma appena faccio
y=f(x)
ho sempre il messaggio di errore:


??? Error using ==> inlineeval
Error in inline expression ==> (abs(sin(x)).^(24/9)).*log(x)./((x^2) + x + 10)
??? Error using ==> mpower
Matrix must be square.

Error in ==> inline.subsref at 25
INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);

apatriarca
L'errore mi sembra a questo punto abbastanza chiaro e non ha niente a che fare con l'uso di inline. Per poter elevare a potenza la matrice deve essere quadrata. Il problema è nell'espressione x^2 che avrebbe dovuto essere x.^2. Un'errore di distrazione suppongo.

P.S. Preferisco comunque per molte ragioni l'uso delle funzioni anonime. Innanzitutto perché quell'errore sarebbe stato generato alla creazione della funzione e non alla prima chiamate della stessa. E poi perché non mi piace scrivere la funzione in una stringa.

leadfoot
"apatriarca":
L'errore mi sembra a questo punto abbastanza chiaro e non ha niente a che fare con l'uso di inline. Per poter elevare a potenza la matrice deve essere quadrata. Il problema è nell'espressione x^2 che avrebbe dovuto essere x.^2. Un'errore di distrazione suppongo.

P.S. Preferisco comunque per molte ragioni l'uso delle funzioni anonime. Innanzitutto perché quell'errore sarebbe stato generato alla creazione della funzione e non alla prima chiamate della stessa. E poi perché non mi piace scrivere la funzione in una stringa.

ok, non solo distrazione :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.