2016-09-06 7 views
1

Ich versuche, eine anonyme, 2-Variable Funktion zusammenzufassen, indem Sie es sich selbst hinzufügen (etwas wie + = Operator in C oder Java). Der Beispielcode ist wie folgt:Summe der anonymen Funktionen in Octave

f = @(x, y) 0; 
for iter = 1: 10 
    a = @(x) x^2; 
    b = @(y) cos(y); 
    c = @(x, y) a(x) + b(y); 
    f = @(x, y) f(x, y) + c(x, y); 
end 

Ist es möglich, es so zu tun, oder die Syntax ist schlecht? Gibt es einen effizienteren oder vernünftigeren Weg dies zu tun? Ty im Voraus!

Antwort

1

Es ist ziemlich üblich, anonyme Funktionen zu haben, die auf anderen anonymen Funktionen basieren. Es sieht aus wie f ist das Ergebnis einer Summe von anderen anonymen Funktionen, so f sollte gut und gut zu verwenden, sobald Sie diese Aussage in Ihrer Schleife erreichen. Der Code, den Sie geschrieben haben, verwendet jedoch keine der resultierenden anonymen Funktionen, nachdem Sie sie erstellt haben. Ich würde auch empfehlen, elementweise Operationen zu verwenden, um sicherzustellen, dass mehrere Eingaben (z. B. Matrizen/Vektoren) enthalten sein können.

Deshalb:

f = @(x, y) 0; 
for iter = 1: 10 
    a = @(x) x.^2; % Change 
    b = @(y) cos(y); 
    c = @(x, y) a(x) + b(y); 
    f = @(x, y) f(x, y) + c(x, y); 
end 

Hier ist ein kleines reproduzierbares Beispiel zeigt, was die Kette von Aussagen wie bei einer Iteration aussehen würde, dann die resultierende endgültige Funktion f am Ende mit:

>> f = @(x,y) 0 
f = 

@(x, y) 0 

>> a = @(x) x.^2 
a = 

@(x) x .^ 2 

>> b = @(y) cos(y) 
b = 

@(y) cos (y) 

>> c = @(x, y) a(x) + b(y) 
c = 

@(x, y) a (x) + b (y) 

>> f = @(x, y) f(x, y) + c(x, y) 
f = 

@(x, y) f (x, y) + c (x, y) 

>> f(0.5, 7) 
ans = 1.0039 
>> 
Verwandte Themen