--------------- # Aufgabe 1 # --------------- # 1a) Man findet: s_n = n^2 # # Beweis mit Induktion: s_1 = 1^1 = 2*1 - 1 ist ok. # Schluss von n auf n+1: # # s_{n+1} = s_n + 2n+1 # = n^2 + 2n +1 # = (n+1)^2 # 1b) Machen wir etwa so: n = 100 nn = 1:n x = 2*nn - 1 x # 1c) s = cumsum(x) s # 1d) vec = rep(0,n) summe = 0 for(k in 1:n) { summe = summe + (2*k-1) vec[k] = summe } vec s # ok, ist identisch # 1e) zeit = Sys.time() zeit zeit = Sys.time() - zeit zeit # ok, ist genau das, was wir brauchen n = 4000000 # redo (1c): zeit = Sys.time() nn = 1:n x = 2*nn - 1 s = cumsum(x) zeit = Sys.time() - zeit zeit # etwa 0.16 Sekunden # redo (1d): zeit = Sys.time() vec = rep(0,n) summe = 0 for(k in 1:n) { summe = summe + (2*k-1) vec[k] = summe } zeit = Sys.time() - zeit zeit # etwa 11.33 Sekunden mit der alten R-Version 3.0.3 # etwa 0.54 Sekunden mit der aktuellen R-Version 3.4.0, # so this is a major improvement removing a not completely # unsignificant weakness of R!! # quick check: vec[n] s[n] s[n]-vec[n] # ok, ist beides dasselbe --------------- # Aufgabe 2 # --------------- ??rank # das englische Wort fuer "Rang" # -> in dem Matrix-package gibt es einen rankMatrix Befehl, # wir installieren und laden das Matrix package: # installieren ueber Menue-Tab Packages->InstallPackage(s), # dann einen Server-Ort, etwa Germany(Muenster) auswaehlen, # dann erscheint eine Liste mit Paketen, aus der man dann # das gewuenschte Paket auswaehlen kann. # Installieren muss man nur einmal, wenn man ein Paket aber in # einer R-Session benutzen moechte, muss man es bei jeder neuen # Session neu laden; laden geht etwa mit dem require()-Befehl: require(Matrix) # Bitte beachten Sie: In der aktuellen R-Version 3.4.0 ist das # Matrix package aufgrund seiner Wichtigkeit automatisch vor- # installiert, man kann direkt require(Matrix) eingeben und dann # das package benutzen. In aelteren R-Versionen muss das package # erst installiert werden wie oben beschrieben. Wenn man nicht # weiss, ob ein package schon installiert ist oder nicht, kann man # einfach require(packagename) eingeben und erhaelt dann gegebenen- # falls eine Fehler- oder Warning-message "there is no package # called 'packagename'". n = 50 m = 500 a = runif(n*m,min=1,max=2) A = matrix(a,ncol=n,nrow=m) head(A) # die ersten 6 Zeilen tail(A) # die letzten 6 Zeilen rankMatrix(A) # etwas mehr als nur einfach eine Zahl res = rankMatrix(A) names(res) # ok.. mode(res) # some info res[1] # also nehmen wir das.. # 1000 Realisierungen: M = 1000 # wir schreiben den Rang(A) jeder Realisierung A in einen # Vektor rangA der Laenge 1000: rangA = rep(0,M) # initialisieren mit 1000 Nullen for(i in 1:M) { a = runif(n*m,min=1,max=2) A = matrix(a,ncol=n,nrow=m) res = rankMatrix(A) rangA[i] = res[1] } # dauert ein paar Sekunden.. plot(rangA) # alles 50 # numerical check: test = ifelse(rangA==50,1,0) # testet Element-weise sum(test) # 1000 mal true --------------- # Aufgabe 3 # --------------- # das ist die Aufgabe 2b vom Uebungsblatt 2: # das linprog-Paket ist bereits installiert, wir muessen # es nur noch laden, etwa mit dem require()-Befehl: require(linprog) # wir muessen das LOP auf Standardform Ax<=b bringen: # 1 x + 2 y <= 6 ist ok so # 2 x + y <= 6 ist ok so # x + 3 y >= 3 formen wir um zu # - x - 3 y <= -3 # # Damit: c = c(1,1) # da F(x,y) = 1*x+1*y -> max/min b = c(6,6,-3) v1 = c(1,2) v2 = c(2,1) v3 = c(-1,-3) A = rbind(v1,v2,v3) A # zur besseren Uebersicht schreiben wir das Resultat der # solveLP()-Funktion in eine Variable resmax fuer das # Maximum und resmin fuer das Minimum: resmax = solveLP(c,b,A,maximum=TRUE) names(resmax) resmax$opt # das ist das Maximum = 4, ist ok resmax$solution # das sind die x,y, also = (2,2), ist ok resmin = solveLP(c,b,A,maximum=FALSE) names(resmin) resmin$opt # das ist das Minimum = 1, ist ok resmin$solution # das sind die x,y, also = (0,1), ist ok