Seminar Simulation stochastischer Modelle
7. Zwei Dimensionen in R (Film)
Das Programm von Seite 6 erweitert um Bildausgabe. Die fertigen Bilder wurden weiter unten zu einem Film zusammengefügt.
Quellcode in R
# Funktion für Brownsche Bewegung in 2D
# Kurven werden gleichzeitig gezeichnet
browns <- function(anzahl,schritte,p,alte,punkte) {
w<-0:359
# Array für aktuelle Position erzeugen
posx<-rep(0,schritte+1)
posy<-rep(0,schritte+1)
# Speicherarray erzeugen für die Zwischenwerte aller Grafen
lposx<-matrix(0,anzahl+1,schritte+1)
lposy<-matrix(0,anzahl+1,schritte+1)
# Schleife für die Schritte
zz<-1
while (zz<=schritte) {
nn<-1
# Dateiname
f<-sprintf("brown 2D %i.jpg",as.integer(zz))
print(f)
# Grafik öffnen
jpeg(file=f)
# Legende Zeichnen
plot(-p:p, -p:p, cex=.1, type="n",main="Brownsche Bewegung 2D",xlab="x",ylab="y")
# Schleife für die einzelnen Grafen
while (nn<=anzahl) {
# einen Winkel auswählen (gleichverteilt)
n<-sample(w,1)
# Entfernung nach Gauss Normalverteilt auswählen
# dadurch wird Epsilon automatisch quadratisch skaliert
# alternativ Entfernung in Epsilon und Zeit in Epsilon exponential
e<-rnorm(1,0,1)
# Winkel umrechnen in radial
m<-n[1]/180.0*pi
# Neue Position ermitteln
nposx<-posx[nn]+sin(m)*e
nposy<-posy[nn]+cos(m)*e
# alte Linien malen
if (alte>0)
{
lposx[nn,zz+1]<-nposx
lposy[nn,zz+1]<-nposy
xx<-1
while (xx<zz)
{
# debugausgabe der Koordinaten
# t<-sprintf("%f %f %f %f ",lposx[nn,xx],lposx[nn,xx+1],lposy[nn,xx],lposy[nn,xx+1])
# print(t)
lines(c(lposx[nn,xx],lposx[nn,xx+1]),c(lposy[nn,xx],lposy[nn,xx+1]),col="red")
xx<-xx+1
}
}
# Neue Linie zeichnen
if (punkte>0)
{
points(c(nposx),c(nposy))
}
else
{
lines(c(posx[nn],nposx),c(posy[nn],nposy),col="blue")
}
# Position für nächsten durchlauf speichern
posx[nn]<-nposx
posy[nn]<-nposy
# Ende innere Schleife
nn<-nn+1
}
# Grafik schliessen
dev.off()
# Ende äußere Schleife
zz<-zz+1
}
# ende
}
print ("browns(anzahl,schritte,skalierung,altelinien,punkte)")
Links
MBS REAL studio PDF Plugins - Nachhilfe in Andernach