Einführung in Mathematica XVII

Integrieren mit Zufallszahlen

© Jürgen Schnack, 2009/06/17, 
Verbesserungen vonThomas Luthe

Zweidimensionales Beispiel I

Use Green's theorem to find the area of a parametrically defined two-dimensional region:

x[t_]:=Cos[t]+1/7Cos[7t+Pi/3]; 
y[t_]:=Sin[t]+1/7Sin[7t]; 
ZDP1=ParametricPlot[{x[t], y[t]}, {t, 0, 2π}]

NIntegrate[x[t]D[y[t],t],{t,0,2π}]

Zweidimensionales Beispiel II

ZDBG=Graphics[{Blue,Opacity[0.1],
Rectangle[{-1.5,-1.5},{1.5,1.5}]}];

ZDLP1=ListPlot[Table[{RandomReal[{-1.5,1.5}],
RandomReal[{-1.5,1.5}]},
{n,1,(10^2)}],PlotRange->{{-1.5,1.5},{-1.5,1.5}},
AspectRatio->1,BaseStyle->{FontFamily->"Helvetica",FontSize->18}];

Show[ZDP1,ZDBG,ZDLP1]

Aber wie stellt man jetzt fest, ob ein Punkt innerhalb oder außerhalb liegt?
Ideen??? Für Lösungen gibt es "Echte-Programmierer-Punkte".

Die Idee: Durch jeden Punkt wird eine Horizontale gelegt, dann werden die Schnittpunkte der Horizontalen mit der Kurve berechnet. Der Punkt wird als innerhalb der Fläche gewertet, wenn die Anzahl der Schnittpunkte rechts (ebenso gut links) des Punktes ungerade ist. Probleme könnten dabei Punkte machen, in denen y'=0 ist. Das wurde hier jedoch nicht berücksichtigt, da die Chance darauf sehr gering ist und eine Überprüfung das Verfahren weiter verlangsamen würde.

NN =(10^3);
plist=Table[{RandomReal[{-1.5,1.5}],RandomReal[{-1.5,1.5}]},{n,1,NN}];
NGood=0;
For[i=1, i≤NN, i++, 
solutions=Solve[{y[t]==plist[[i, 2]], Im[t]==0}, t, InverseFunctions->True];
counter=0;
For[j=1, j≤Length[solutions], j++,
If[plist[[i, 1]]≤ x[t]/.solutions[[j]], counter++;];
];
If[Mod[counter,2]==1, NGood++;];];
fläche=NGood*9.0/NN