2016-12-02 3 views
5

Ich habe eine anonyme Funktion Griff wie folgt aus:Plot eine anonyme Funktion ohne explizite Variablennamen

f = @(x,y)sqr(x)+sqr(y) 

Dies ist eine Kugel mit den beiden Variablen x und y. Es scheint zu funktionieren, da ich so etwas wie

f(2,3) 

und MATLAB gibt mir das richtige Ergebnis ans = 13 aufrufen können.

Im letzten Schritt möchte ich diese Funktion von sagen wir mal -7 bis 7 für beide x und y plotten. Also rufe ich

fmesh(f,[-7 7]) 

und die richtige Figur erscheint. So weit, ist es gut.

Aus irgendwelchen Gründen, die ich will nicht hier angeben, möchte ich nun die Funktion Griff diese bearbeiten:

f = @(x)sqr(x(1))+sqr(x(2)) 

Dies ist die gleiche Kugel sein sollte, aber diesmal mit den zwei Variablen x(1) und x(2). Da die Funktion will nun ein Array als Argument, das ich den Testanruf bearbeiten

f([2,3]) 

und es gibt mir immer noch das richtige Ergebnis ans = 13.

Aber hier ist das Problem: Wie plotten Sie die Funktion, die ein Array als Argument will? Derselbe Mesh-Befehl wie zuvor schlägt natürlich fehl, da [-7,7] die falsche Dimension hat. Das gleiche gilt für [[-7 7] [-7 7]] und [[-7 7];[-7 7]].

Wie kann ich ein funktionierendes Plot von diesem neuen Funktionshandle bekommen? Vielen Dank im Voraus!

+1

Sie das nicht wirklich tun können, wäre. Sie könnten 'f' in eine andere anonyme Funktion einfügen, die zwei Eingaben akzeptiert und eine erzeugt:' g = @ (x, y) f ([x, y]) ' – Suever

Antwort

4

Sie können fmesh nicht erhalten, um die Werte x und y als ein Array zu übergeben, wie Sie es erwarten. Was Sie können tun ist, um Ihre anonyme Funktion f innerhalb einer anderen anonymen Funktion, die einfach die Eingabe neu anordnet.

g = @(x,y)f([x, y]); 
fmesh(g, [-7 7]) 

Eine allgemeinere Lösung, die alle Eingaben nimmt und setzt sie in ein Array

g = @(varargin)f([varargin{:}])