2017-03-08 5 views
1

Ich habe einen Ausdruck, ich möchte 0 sein, wenn die Summe der beiden Variablen gerade ist, und eine Funktion, wenn die Summe ungerade ist. Ich versuchte dies:Erstellen stückweise anonyme Funktion Matlab

fmn = @(m,n) (mod(m+n,2)~=0)*16*m*n/(pi^2*(m^2-n^2)^2); 

Mein Problem ist, dass, wenn ich dies tun für m = n, dann bekomme ich NaN statt 0 Wie kann ich dieses Problem lösen geben 0 foro so etwas?

Antwort

4

Die 1/(m^2-n^2) erzeugt die NaN, die Ihre Funktion korrumpiert. Um dies zu umgehen, können Sie eine kleine Endlichkeit auf den Nenner addieren (dh Epsilon-Maschine):

fmn = @(m,n) (mod(m+n,2)~=0)*16*m*n/(pi^2*((m^2-n^2)^2 + eps())); 

oder einen Begriff haben, die nur Nicht-Null ist, wenn m und n ausreichend nahe:

fmn = @(m,n) (mod(m+n,2)~=0)*16*m*n/(pi^2*((m^2-n^2)^2 + abs(m-n)<=eps(m))); 
+0

Danke. Dachte nicht einmal, das zu tun – yankeefan11