2016-07-13 20 views
1

Ich schreibe ein Matlab-Skript, das die wiederholte Generierung von Zufallszahlen erfordert. Ich stoße auf ein Problem, bei dem, wenn ich meine Zufallsgeneratorfunktion als Parameter an eine andere Funktion übergebe, diese innerhalb der Funktion, an die sie übergeben wird, nur einmal ausgewertet wird. HierFunktion als Parameter übergeben bewertet nicht mehr als einmal Matlab

ist einige Beispiel-Code:

Das ist meine Datei ist randgen.m:

function number = randgen() 
    'HELLO WORLD' 
    number = rand(1); 
end 

Hier ist meine Datei problemtester.m:

function arr = problemtester(rgen) 
firstrand = rgen(); 
for i = 1:1000 
    arr(i) = rgen(); 
end 

Wenn ich den Befehl

x = problemtester(randgen);

HELLO WORLD wird einmal gedruckt, und x ist mit 1000 Kopien der gleichen Zufallszahl gefüllt, so dass die Funktion nur einmal ausgewertet werden muss, obwohl die Schleife 1000 Mal ausgeführt wurde. Warum wird diese Funktion nur einmal ausgewertet, trotz wiederholter Aufrufe, und noch wichtiger, wie kann ich sie bei jeder Schleifeniteration aufrufen?

+1

Ich denke, Sie mischen Variablen und Funktionsnamen. –

+0

das wäre sinnvoll, aber warum verhält es sich beim ersten Mal wie eine Funktion, sondern bei allen zukünftigen Iterationen als Variable? – nosyarg

Antwort

4

die Funktion mit

x = problemtester(randgen) 

MATLAB Durch den Aufruf wird zunächst randgen bewerten, da dies eine Funktion ist (und ist aufrufbar ohne Parameter). Zu dieser Zeit wird HELLO WORLD gedruckt. Der Rückgabewert dieses Funktionsaufrufs wird dann an problemtester übergeben, wodurch dieser Wert ein Wert 1000 mal in arr gespeichert wird und das zurückgibt.

Um problemtester Aufruf der Funktion randgen zu machen, müssen Sie eine function handle liefern, die MATLAB entspricht Zeiger zu funktionieren.

Dies druckt HELLO WORLD tausend Mal und gibt einen schönen Zufallsvektor zurück.

+0

Hat super funktioniert! Vielen Dank! – nosyarg

Verwandte Themen