2016-05-09 4 views
1

in Matlab, muss ich den symbolischen Gradienten einer Funktion mit f(x)x ein Vektor der Dimension berechnen 5.Matlab Gradienten

x=sym('x',[1,2,3,4,5]); 
c=[1 2 4 3 5 3 4 5 4 3 4 34 5 6]; 
d=[1 0 1 0 0 1 1 1 0 0 0 1 0 1]; 
f [email protected](x) sum(-0.5*log(x(1))+x(1)*0.5*(x(2+d)/x(1)-c).^2-log(exp(x(2+d).*c+x(4+d))./(exp(x(2)*c+x(4))+exp(x(3)*c+x(5))))) 
grad_f=gradient(f) 

Die Meldung des Fehlers ist: ''

Undefinierte Operator 'für Eingabeargumente vom Typ' function_handle '.

Fehler im Gradienten> parse_inputs (Zeile 146) f = f. ';

Fehler im Gradienten (Zeile 48) [f, ndim, loc, rflag] = parse_inputs (f, varargin);

Wissen Sie, wo der Fehler ist?

+0

Die Dokumente implizieren, dass die 'gradient' Funktion einen numerischen Vektor, nicht eine Funktion handle: http://www.mathworks.com/help/matlab/ref/gradient.html – Dan

+1

@Dan gibt es eine symbolische' Steigung ' – Yvon

+3

symbolischer' gradient' akzeptiert symbolische Funktion 'f' als Eingabe. Ihre Definition ist ein Funktions-Handle. Versuchen Sie, '@ (x)' http://www.mathworks.com/help/symbolic/gradient.html – Yvon

Antwort

0

Ich glaube, Sie die symbolc Variable angeben, müssen Sie die Steigung für berechnet werden wollen würde, und geben Sie f unterschiedlich (ein Blick auf das Beispiel haben): https://de.mathworks.com/help/symbolic/gradient.html

Sie geben f ohne Funktion Griffen , weil die symbolische Toolbox sich selbst darum kümmern wird.

auch einen Blick auf diese Frage haben: Matlab gradient and hessian computation for symbolic vector function


EDIT: Verdammt, ein wenig zu spät, nachdem Kommentar Yvons :-)

0

Ich suche nur bei der Fehlermeldung selbst hier. gradient mag keine Funktions-Handles als Eingabe.

Wenn ich Funktion definieren f als reines Symbol ohne @(x) im vorderen

f =sum(-0.5*log(x(1))+x(1)*0.5*(x(2+d)/x(1)-c).^2-log(exp(x(2+d).*c+x(4+d))./(exp(x(2)*c+x(4))+exp(x(3)*c+x(5)))))  

dann die Eingabe einer Steigung gibt mir eine 5x1-Array von symbolischen Ausdrücken.