Umweltsystemmodellierung (Fach) / Termin 3 Tutoratsaufgaben (Lektion)
In dieser Lektion befinden sich 3 Karteikarten
Termin 3 Tutoratsaufgaben
Diese Lektion wurde von Ak123 erstellt.
- siehe Abbildung T3/T 1. Numerisches Modell: konstanter Input a) Schreiben Sie in R eine Befehlsfolge (noch nicht als Funktion!), die für gegebene Werte von k [1/d] und I [mm], einen gegebenen Anfangswert des Speicherinhalts s0 [mm] und eine Zahl von Zeitschritten t [d] die Zeitreihen von Abfluss und Speicherinhalt berechnet. Benutzen Sie die Werte I=15, k=0.6, s0=20 und t=100. Plotten Sie Abfluss und Speicher gegen die Zeit. b) Schreiben Sie nun denselben Code als R-Funktion, die als Argumente die vier Variablen I, k, s0, und t bekommt und einen Data Frame mit den Zeitreihen von Speicher und Abfluss ausgibt. Probieren Sie die Funktion mit verschiedenen Werten von I und s0 aus. Wichtiger Hinweis: Schreiben Sie das Modell entsprechend der oben genannten Formel in der Form, dass auf die Werte St-1 des Speichers aus dem vorherigen Zeitschritt zugegriffen wird. Damit unterscheidet sich das Modell vom Beispiel aus der Vorlesung in der Struktur des Codes, jedoch nicht inhaltlich (mit der kleinen Ausnahme, dass St hier den Speicherinhalt zum Ende des Zeitschrittes t bezeichnet). Beachten Sie, dass in diesem Fall die for-Schleife erst ab dem Schritt t=2 beginnen sollte. a)input <- 15s0 <- 20k <- 0.6schritte <- 100speicher <- numeric(schritte)abfluss <- numeric(schritte)abfluss[1] <- k*(s0+input)speicher[1] <- s0+input-abfluss[1]for (i in 2:schritte){abfluss[i] <- k*(speicher[i-1]+input)speicher[i] <- speicher[i-1]+input-abfluss[i]} # Plotten der Ergebnisse:plot(1:schritte, speicher, type="l", xlab="Tag", ylab="Speicherinhalt [mm]")plot(1:schritte, abfluss, type="l", xlab="Tag", ylab="Abfluss [mm/d]") # b) Selber Code als Funktionspeicher1<-function(input, s0, k, schritte){speicher <- numeric(schritte)abfluss <- numeric(schritte)abfluss[1] <- k*(s0+input)speicher[1] <- s0+input-abfluss[1]for (i in 2:schritte){abfluss[i] <- k*(speicher[i-1]+input)speicher[i] <- speicher[i-1]+input-abfluss[i]}return(data.frame(Speicher=speicher, Abfluss=abfluss))} zeit <- 100 # Zahl der Zeitschritte, über die simuliert wirds_anfang <- 20 # Anfangswert des Speicherinhalts# Aufrufen der Funktion:sim1 <- speicher1(input=15, s0=s_anfang, k=0.6, schritte=zeit) # Plotten der Ergebnisse:# Speicherinhalt:plot(1:zeit, sim1$Speicher, type="l", xlab="Tag", ylab="Speicherinhalt [mm]") # Ohne Anfangswert# Abfluss:plot(1:zeit, sim1$Abfluss, type="l", xlab="Tag", ylab="Abfluss [mm/d]")
- 2. Numerisches Modell: Variabler Input a) Ersetzen Sie in der Funktion aus Aufgabe 1 den konstanten Input durch einen Vektor von Niederschlagswerten. In jedem Zeitschritt sollen Abfluss und Speicher mit dem InputWert dieses Zeitschritts berechnet werden. b) Lesen Sie den Datensatz "Carnation_Creek_Daten.csv" ein. Stellen Sie für die ersten 100 Zeilen des Datensatzes den täglichen Niederschlag (Spalte „nied“) grafisch dar (Benutzen Sie die Option type="h" für den plot-Befehl). Berechnen Sie mit der Funktion aus a) die für diese Niederschlagsdaten vorhergesagten Zeitreihen von Speicher und Abfluss (mit s0=20 und k=0.6). Plotten Sie den zeitlichen Verlauf von Speicherinhalt und Abfluss. a)speicher2<-function(input, s0, k, schritte){speicher <- numeric(schritte)abfluss <- numeric(schritte)abfluss[1] <- k*(s0+input[1])speicher[1] <- s0+input[1]-abfluss[1]for (i in 2:schritte){abfluss[i] <- k*(speicher[i-1]+input[i])speicher[i] <- speicher[i-1]+input[i]-abfluss[i]}return(data.frame(Speicher=speicher, Abfluss=abfluss))} b)# Einlesen der Niederschlagsdatencarnation <- read.csv("Carnation_Creek_Daten.csv") # Grafik des Niederschlags für den Zeitraum 1.8.2007 bis 31.7.2008:tage <- as.Date(carnation$zeit, format = "%d.%m.%Y") # Sage R, welches Format die Zeitangaben habenplot(tage[1:100], carnation$nied[1:100], xlab="Datum", ylab="Niederschlag [mm/d]", type="h", col="blue", lwd=1.5) # Anwendung des Modells auf die Daten:nieders <- carnation$nied[1:100]sim2 <- speicher2(input=nieders, s0=20, k=0.6, schritte=length(nieders)) # Grafik des Modelloutputs:par(mfrow=c(2,1))plot(tage[1:100], sim2$Speicher, xlab="Datum", ylab="Speicher [mm]", type="l", col="orange")plot(tage[1:100], sim2$Abfluss, xlab="Datum", ylab="Abfluss [mm/d]", type="l", col="red")par(mfrow=c(1,1))
- 3. Vergleich von gemessenem und vorhergesagtem Abfluss a) Plotten Sie in einer Grafik in verschiedenen Farben den zeitlichen Verlauf von gemessenem (Spalte „qbeo“) und modelliertem Abfluss für den Zeitraum aus Aufgabe 2. b) Schreiben Sie eine Funktion, die für gegebene Vektoren von täglichen gemessenen und modellierten Abflussdaten den mittleren quadrierten Fehler (MQF) nach der folgenden Formel berechnet: MQF=^t∑ °i=1 (Ai(Modell)−Ai(Daten))2 t t : Zahl der Tage Ai : Abfluss am Tag i Wenden Sie diese Funktion auf die Daten aus Aufgabe 2 an. a) Grafischer Vergleichplot(tage[1:100], carnation$qbeo[1:100], xlab="Datum", ylab="Abfluss [mm/d]",type="l",col="black",las=1, lwd=2)lines(tage[1:100], sim2$Abfluss, col="red", lwd=2)legend("topright",legend=c("Daten","Modell"),lty=1,col=c("black","red")) b) Berechnung des mittleren quadrierten Fehlers # Funktion für den mittleren quadrierten Fehler:mqf <- function(mod, data){fehler <- mean((mod-data)^2)return(fehler)} # Anwendung der Funktion auf die Daten:mqf(mod=sim2$Abfluss, data=carnation$qbeo[1:100])
