3

Umweltsystemmodellierung (Subject) / Termin 2 Hausaufgaben (Lesson)

Termin 2 Hausaufgaben

This lesson was created by Ak123.

Learn lesson

  • 1. Schreiben Sie eine R-Funktion, die, wenn man ihr einen Vektor von ganzen Zahlen übergibt, die Anzahl der ungeraden Zahlen in diesem Vektor ausgibt. Testen Sie Ihre Funktion mit dem Vektor c(3, 24, 6, 39, 123, 527, 40, 9 ungeradezahl <- function(x){y <- x[(x%%2)!=0]return(length(y))} ungeradezahl(c(3, 24, 6, 39, 123, 527, 40, 9))
  • 2. Ist die Summe von gleichverteilten Zufallsvariablen ebenfalls gleichverteilt? Wenn nein, welche Form hat die Verteilung dieser Summen? a) Ziehen Sie mit Hilfe der Funktion runif(150, 0, 1) 150 gleichverteilte Zufallszahlen zwischen 0 und 1. Stellen Sie die Verteilung mit Hilfe der Funktion hist als Histogramm dar. Lassen Sie den Code mehrfach laufen um ein Gefühl für die Variabilität im Zufallsergebnis zu bekommen. b) Addieren Sie nun 100 solcher Zufallsziehungen auf (d.h. 100 Vektoren mit je 150 Werten), und erstellen Sie ein Histogramm der Verteilung der Summen. Beschreiben Sie die Verteilung – wie unterscheidet sie sich von den Histogrammen in a)? Hinweis: Sie können entweder eine Matrix zum Zwischenspeichern der 100 Ziehungen anlegen, und daraus über colSums die Summen berechnen, oder Sie können die Vektoren direkt aufaddieren. a) myunif <- runif(150)hist(myunif) b) Version1: mit schleife und vectorsumofunifs <- myuniffor (i in 2:100){sumofunifs <- sumofunifs + runif(150)}hist(sumofunifs) # die Verteilung der Summen: weniger Streuung, annähernd Glockenkurve Version2: mit schleife und matrixmatrix.out <- matrix(nrow=100, ncol=150)for (i in 1:100){matrix.out[i, ] <- runif(150)}hist(colSums(matrix.out)) # die Verteilung der Summen: weniger Streuung, annähernd Glockenkurve
  • 3. Der Datensatz Baeume.csv enthält Umfang auf Brusthöhe (cm), Höhe (m) und Volumen (m³) einer Anzahl von Baumstämmen. a) Lesen Sie die Daten ein. Schreiben Sie eine Funktion, die nach der Formel für einen Zylinder das erwartete Volumen der Stämme berechnet. Beachten Sie die unterschiedlichen Einheiten! b) Wenden Sie die Funktion auf die Daten an. Plotten Sie das gemessene und erwartete Volumen jedes Baumes gegen die Baum-Nummer. Benutzen Sie verschiedene Farben für gemessene und erwartete Werte. Beschriften Sie die Achsen und fügen Sie der Grafik eine Legende hinzu. c) Schreiben Sie eine Funktion, die den Betrag der Differenz |D| zwischen gemessenem und erwartetem Volumen berechnet. Wenden Sie diese Funktion auf die Daten an. Berechnen Sie den Mittelwert, das Minimum und das Maximum von |D|. Hinweise: die Daten können über read.csv() eingelesen werden; stellen Sie dafür Ihr Arbeitsverzeichnis (working directory) richtig ein; versuchen Sie nicht, die Daten über Excel einzulesen. Volumen eines Zylinders = Grundfläche * Höhe Umfang eines Kreises = Durchmesser * π Kreisfläche = Radius² *π a)baeume <- read.csv("Baeume.csv") volumen <- function(umfang, hoehe){vol <- (umfang/(2*pi*100))^2*pi*hoehereturn(vol)} b)vol_model <- volumen(umfang=baeume$Umfang_cm, hoehe=baeume$Hoehe_m) plot(1:nrow(baeume), baeume$Volumen_m3, xlab="Baum Nr.", ylab="Volumen [m³]", pch=20)points(1:nrow(baeume), vol_model, col="red", pch=20)legend("topleft", legend=c("gemessen", "erwartet"), pch=20, col=c("black", "red")) c)vergleich <- function(gemessen, erwartet){diff_abs <- abs(gemessen-erwartet)return(diff_abs)} diff <- vergleich(gemessen=baeume$Volumen_m3, erwartet=vol_model)mean(diff)min(diff)max(diff)