# Code von Brooks Ferebee, erweitert von Franziska Wandtner, 2011, wandtner@math.uni-frankfurt.de ########################################################################## # Vergleich der zwei Approximationen aus der Vorlesung ########################################################################## rm(list=ls()) ########################################################################## #Graphikparameter werden gesetzt windows(width=11, height=7) par(cex.main=1.3,cex.axis=1.2,cex.lab=1.2,pch=18) par(font.main=1,mar=c(5,5,5,5)) ########################################################################## # Wahre Verteilung berechnen r <- 365 # Anzahl Listen (Tage) w<-array(1,dim=r) for (i in 2:r) w[i]<-w[i-1]*(r-i+1)/r ########################################################################## #Approximationen berechnen a<-array(1,dim=r) for (i in 2:r){a[i]<-exp(-(i-1)*i/(2*r))} s<-array(1,dim=r) for (i in 2:r){s[i]<-((1/(sqrt(1-i/r)))*exp(-r*(i/r+(1-i/r)*log(1-i/r))))} ########################################################################## #Hauptprogramm nn<-1:120 xlb<-"n" ylb<-"w(n) = P ( T > n )" mn<-"Approximation von w(n)" plot(nn,w[nn],t="l",xlab=xlb,ylab=ylb,main=mn) text(60,0.9,"w(n)",cex=1) readline("a(n) := exp(-(n-1)n/2r)") lines(nn,a[nn],col="red") text(60,0.8,expression(paste("a(n) :=", exp(- frac((n-1)*n,2*r)))),col="red",cex=1) readline("mit Stirling-Approximation s(n)") lines(nn,s[nn],col="blue") text(60,0.65, expression(paste("s(n) := ",frac(1,sqrt(1-n/r)) * exp(-r * eta(n/r)))),cex=1, col="blue") readline("f1(n) := a(n) - w(n)") f1<-a-w mn<-"Fehler der Approximationen" ylb<-"f(n) = Fehler" plot(nn,f1[nn],t="l",col="red",xlab=xlb,ylab=ylb,main=mn) text(80,0.005,"f1(n) := a(n) - w(n)",col="red",cex=1) readline("f2(n) := s(n) - w(n)") f2<-s-w lines(nn,f2[nn],col="blue") text(80,0.004,"f2(n) := s(n) - w(n)",col="blue",cex=1) readline("f1 / w") rf1<-f1/w mn<-"Relativer Fehler" plot(nn,rf1[nn],t="l",col="red",xlab=xlb,ylab=mn,main=mn) text(30,8,"Relativer Fehler: f1/w",col="red",cex=1) readline("f2 / w") rf2<-f2/w lines(nn,rf2[nn],col="blue") text(30,7,"Relativer Fehler: f2/w",col="blue",cex=1) ############################################################################# # ERGĂ„NZUNG: # Der absoluter und relative Fehler der Approximation s(n) ist nur sehr klein und daher in der Skalierung von oben gar nicht ablesbar. Hier ist eine kleinere Skalierung readline("Kleinere Skalierung: Absoluter Fehler s(n)-w(n)") mn<-"Kleinere Skalierung: Absoluter Fehler s(n) - w(n)" plot(nn,f2[nn],t="l",col="blue",xlab=xlb,ylab=ylb,main=mn) text(80,4e-06,"f2(n) := s(n) - w(n)",col="blue",cex=1) readline("Kleinere Skalierug: Relativer Fehler s/w") mn<-"Kleinere Skalierung: Relativer Fehler s/w" plot(nn,rf2[nn],t="l",col="blue",xlab=xlb,ylab=ylb,main=mn) text(20,6e-05,"Relativer Fehler: f2/w",col="blue",cex=1) ########################################################################## # Ende readline("Ende") graphics.off()