Hallo Jeany,
Aber schon beim zweiten habe ich so meine Schwierigkeiten.
2) los=If[#<p,0,1]&/@RandomReal[{0,1},LosG]
Was genau bedeutet das Zeichen #? In der Hilfe steht das erste Argument?
Ist mit dem ersten Argument der hintere Teil "&/@..." gemeint? Ist das
so eine übliche Schreibform?
Ja, das ist eine übliche Schreibform für 3 Dinge:
(1) eine Argumentstelle: #
(2) die Definition einer reinen Funktion: & (das unbenannte ("reine")
Argument ist im Fall #)
(3) das Map[] Kommando: /@
Eine gute Idee, um zu schauen, was passiert, ist der Input mit Symbolen,
die nicht evaluieren:
In[1]:= f[a, #, c]& /@ {b1, b2, b3, b4}
Out[1]= {f[a, b1, c], f[a, b2, c], f[a, b3, c], f[a, b4, c]}
In[2]:= Map[f[a, #, c]&, {b1, b2, b3, b4}]
Out[2]= {f[a, b1, c], f[a, b2, c], f[a, b3, c], f[a, b4, c]}
In[3]:= f[a, #, c] & /@ {{b11, b12}, {b21, b22}, {b31, b32}}
Out[3]= {f[a, {b11, b12}, c], f[a, {b21, b22}, c], f[a, {b31, b32}, c]}
In[5]:= f[a, #, c] & /@ Table[{}, {5}]
Out[5]= {f[a, {}, c], f[a, {}, c], f[a, {}, c], f[a, {}, c], f[a, {}, c]}
f[a,#,c]& wird über die Liste gezogen, auf die Liste abgebildet oder auf
jedes einzelne Element der Liste angewendet. Das kann freier gehandhabt
werden:
In[6]:= f[a, #, # + #/2] & /@ Range[7]
Out[6]= {f[a, 1, 3/2], f[a, 2, 3], f[a, 3, 9/2], f[a, 4, 6], f[a, 5,
15/2], f[a, 6, 9], f[a, 7, 21/2]}
Was passiert, wenn es falsch geschrieben wird?
In[7]:= f[a, #, c] /@ {b1, b2, b3, b4}
Out[7]= {f[a, #1, c][b1], f[a, #1, c][b2], f[a, #1, c][b3], f[a, #1,
c][b4]}
Klar, die b's sind nicht als Argumente in die "Funktion" f hineingekommen,
die bzgl. ihrem unbenannten Argument nicht als Funktion definiert war.
Wenn man es mit mehreren Argumenten zu tun hat:
In[11]:= f[a, #2, #1] & @@@ {{b11, b12}, {b21, b22}, {b31, b32}}
Out[11]= {f[a, b12, b11], f[a, b22, b21], f[a, b32, b31]}
Dabei wurde kein Map, sondern das Apply verwendet, die b's sind vertauscht.
Hier sind noch mehr Beispiele
http://reference.wolfram.com/language/ref/Slot.html
http://reference.wolfram.com/language/ref/Function.html
Habe ich nämlich vorher noch nie gesehen.
Dann schau' in das virtuelle Buch
http://reference.wolfram.com/language/tutorial/VirtualBookOverview.html
Die nächste Frage, die sich mir stellt ist, ob die unter 1) erzeugten 80
Zz mit dem Befehl 2) unten übereinstimmen sollen?
Antwort nein. Befehl 1) und 2) erzeugen die Zufallszahlen, die sie
verwenden, jeweils von Neuem.
Sprich wenn oben z.B eine 0,002 herausgekommen ist, dann soll unter 2)
eine 0 geliefert werden? Ich habe beide Ergebnisse Outputs ( 1) und 2))
verglichen und eben nicht die erwarteten Ergebnisse unter 2)erhalten?
Somit meine Frage, werden unter 2) neue ZV erzeugt?
Genau so ist es.
Dann ist es klar, dass die Ergebnisse nicht mit 1) übereinstimmen können.
Korrekt.
Hätte jetzt aber gedacht dass das Zeichen # sich auf den letzten Output
bezieht?
Nein, auf den letzten Output bezieht sich das % Zeichen:
In[13]:= Sqrt[3 3 3 3 3 3 3 3]
Out[13]= 81
In[14]:= %^2
Out[14]= 6561
In[15]:= 3^8
Out[15]= 6561
http://reference.wolfram.com/language/ref/Out.html
Gruss
Udo.
_______________________________________________
DMUG Deutschsprachiges Mathematica-Forum demug@XXXXXXX.ch
http://www.mathematica.ch/mailman/listinfo/demug
Archiv: http://www.mathematica.ch/archiv.html