Forsiden - Universitetet i Oslo



Flervalg1.1: 11.2: 11.3: 31.4: 31.5: 21.6: 31.7: 41.8: 11.9: 31.10: 1Oppgave 1.11 Hva skrives ut? Riktig svar:-1 15Mange hadde glemt hva exec gj?r, og ble forvirret av at en multiline-string brukes til noe annet enn en kommentar. Det er bare to poeng p? oppgaven, s? det er litt vanskelig ? gradere svarene:2 poeng: Helt eller nesten riktig svar, f.eks. to tall skrives ut men ett av dem er feil1 poeng: Elementer av riktig, f.eks skriver to tall men begge er feil, eller gir en rimelig forklaring p? at feilmeldingen “Something wrong in formula” skrives ut. Feilmeldingen “Missing command line…” og de fleste andre feilmeldinger b?r gi 0 poeng.Oppgave 1.12 Hva skrives ut?Riktig svar:4 1.00Denne er ogs? litt enten-eller, og det er bare 2 poeng tilgjengelig:2 poeng: helt riktig svar, evt feil antall desimaler eller noe annet bagatellmessig1 poeng: nesten riktig, f.eks. riktig utskrift av lengden men feil verdiOppgave 2.1 Funksjon av to variable Riktig svar:def f(x,y): return 4*x**3*y-2*x*y3 poeng for helt riktig med bare ubetydelige skrivefeil2 poeng: riktig, men evt med sm? syntaksfeil1 poeng: noe riktig men st?rre manglerAlle svar med feil argumenter eller som mangler returverdi etc. b?r f? null poeng. Hvis alt er riktig men resultatet skrives ut i stedet for ? returneres kan vi gi ett poeng. Oppgave 2.2 Numerisk derivasjonRiktig svar:import numpy as npdef midpoint(f, x, h): f_x = f(x) f_der = (f(x + h) - f(x - h))/(2*h) return f_x, f_derdef f(x):return np.cos(x)midpoint(f, 0, 0.001)5 poeng: helt riktig eller bare ubetydelige feil4 poeng: riktig, men sm? syntaksfeil3 poeng: stort sett riktig, men noe st?rre feil, f.eks. feil i formel etc1-2 poeng: elementer av riktig, men mye rot, f.eks feil bruk av f inne i funksjon etcEtt poeng trekk for manglende kall p??funksjonen, siden det sp?rres om i oppgaven. Dvs maks 4 poeng for helt riktig funksjon men manglende kall. Oppgave 2.3 Implementasjon av en sumRiktig svar:import numpy as npfrom math import factorialdef cos_approx(x,n): s = 0 for i in range(n+1): s += (-1)**i * x**(2*i)/(2*factorial(i)) return s5 poeng for helt riktig eller bare helt ubetydelige feil4 poeng for litt st?rre syntaksfeil 2-3 poeng: en del feil, men i hovedsak riktig struktur p? hvordan en sum beregnes1 poeng: Noen f? riktige elementer, f.eks kan en for-l?kke som er helt feil, men som oppdaterer en variabel som deretter returneres gi 1 poeng Oppgave 2.4 lesing av filconstants = { }with open('constants.txt') as infile: infile.readline() infile.readline() for line in infile: w = line.split() name = ' '.join(w[:2]) constants[name] = (float(w[2]),w[3])Her godtar vi ulike m?ter ? lese en fil p?. Det var en del sp?rsm?l p? eksamen, for mange ble forvirret av hintet og spurte om det var n?dvendig ? bruke det. Hensikten med hintet var selvf?lgelig at man kunne bruke split som vanlig, og deretter sl? sammen de to f?rste verdiene p? hver linje til en streng, som blir n?kkel i dictionary. Det er mulig ? l?se oppgaven uten dette ogs?, og for eksempel l?sning a la line[:xx] hvor man har telt tegn b?r gi bortimot full score. 6 poeng: helt riktig eller bare ubetydelige feil. L?sninger hvor navnet p??konstanten lages med line[:xx] og resten av linjen deles med split b?r gi full score hvis man ogs??har brukt strip() p? navnet. 4-5 poeng: bare sm? feil. F.eks. en l?sning som virker, men som bruker streng-indeksering p??hele linjen synes jeg er en litt knotete l?sning og kan f? 5 poeng hvis strip() er brukt riktig og 4 poeng uten strip()2-3 poeng: En del riktig, men litt st?rre feil, hvor n?kler i dictionary blir feil, verdien ikker er tuppel eller liste, etc. Riktig ?pning av fil og linjen “for line in …:” kan gi 2 poeng hvis det meste av innholdet i for-l?kken er feil. 1 poeng: Noen f? riktige elementer, for eksempel riktig ?pning av fil. Oppgave 2.5 Dictionary og sumRiktig svar:def poly_eval(p,x): s = 0 for i in p: s += p[i]*x**i return sTilsvarende varianter som bruker sum() o.l. b?r ogs? gis full score. 5 poeng: helt riktig eller bare ubetydelige feil4 poeng: stort sett riktig, men litt mer betydelige syntaks-feil2-3 poeng: st?rre feil, men har skj?nt noe av poenget i hvordan polynomet evalueres. En for-l?kke og sum-variabel b?r v?re p? plass, el liknende l?sning1 poeng: stort sett feil, men noen riktige elementer Oppgave 2.6 Derivasjon av polynomRiktig svar:def poly_diff(p): dp = {} for i in p: if i != 0: dp[i-1] = i*p[i] return dpDenne er vanskeligere enn de forrige, men har v?rt gjennomg?tt i detalj i kurset s? mange b?r ha f?tt den til. Formelen var ogs? gitt i oppgaven, s? den m?tte bare oversettes til kode. 5 poeng: helt eller nesten riktig4 poeng: stort sett riktig, syntaks- eller andre sm? feil. Hvis f.eks alt er 100% riktig men konstantleddet ikke er h?ndter kan det gis 4 poeng. 2-3 poeng: noe riktig, men feil av betydning. F.eks. l?sninger som implementerer nogenlunde riktig formel men som ikke returnerer en dict.1 poeng: det meste feil, elementer av riktig for-l?kke eller liknende.Oppgave 3.1 Ideelle gasserOppgave a)import numpy as npimport matplotlib.pyplot as plttrykk = [100, 200, 300, 400, 500, 600, 700, 800, 900]N2 = [0.95, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7]H2 = [1.05, 1.1, 1.15, 1.20, 1.25, 1.30, 1.35, 1.40, 1.45]# Regresjonreg_H2 = np.polyfit(trykk,H2,1)reg_N2 = np.polyfit(trykk,N2,1)def f_H2(x): return reg_H2[0]*x + reg_H2[1]def f_N2(x): return reg_N2[0]*x + reg_N2[1]2 poeng: Utf?rt regresjon og lagd funksjoner.1 poeng: Har med enten regresjon eller funksjoner. Eventuelt sm?feil i disse operasjonene.Oppgave b)def f(x): return 0.00050*x - 0.18def fder(): return 0.00050def newtons_metode(f, fder, a, tol = 1E-5, N = 1000): i = 0 while abs(f(a)) > tol and i <= N: a = a - f(a)/fder() i += 1 return anullpunkt = newtons_metode(f,fder,300)print("Z er like for de to gassene n?r trykket er:", nullpunkt, "bar.")6 poeng: helt riktig eller bare ubetydelige feil5 poeng: riktig, men sm? syntaksfeil3-4 poeng: feil i funksjoner eller sm? feil i algoritmen. Eventuelt ikke Newtons metode som funksjon.1-2 poeng: Noe riktig programmering, men kandidaten viser manglende forst?else av algoritmen eller probleml?sningsstrategien.Oppgave 3.2 Ideelle gasser – diskusjonOppgave a)Interpolasjon brukes kun for ? tilpasse en funksjoner mellom kjente punkter. Dette gj?r at vi ikke kan bruke interpolerte funksjoner til ? forutsi datapunkter utenfor datasettet (ekstrapolering). T = 1200 er utenfor datasettet, og interpolering fungerer derfor ikke her.1 poeng: Presis beskrivelse av interpolasjon og direkte beskrivelse av hvorfor det ikke kan brukes.Oppgave b)Newtons metode kan la v?re ? konvergere f.eks. hvis startverdien er slik at metoden n?r et ekstremalpunkt for ? komme til nullpunktet. Metoden kan ogs? aldri gi presist nok svar til ? n? den gitte toleransen. Dette kan vi l?se ved ? inkludere et maksimum antall iterasjoner N.1 poeng: Beskrivelse av et problem og l?sning med antall iterasjoner.Oppgave 3.3 Titreringimport numpy as npimport matplotlib.pyplot as pltdata = np.loadtxt('titrering.txt', skiprows = 1, delimiter = ',')volum = data[:,0]pH1 = data[:,1]pH2 = data[:,2]pH3 = data[:,3]N = len(volum)pH = [ ]for i in range(N): snitt = (pH1[i] + pH2[i] + pH3[i])/3 pH.append(snitt) plt.plot(volum,pH)plt.xlabel('Tilsatt volum NaOH (mL)')plt.ylabel('pH')plt.show()4 poeng: Leser fil og legger dataene i lister/arrayer. Plotter og regner snitt riktig.3 poeng: Leser fil og legger dataene i lister/arrayer. Plotter eller regner snitt riktig.2 poeng: Leser fil og legger dataene i lister/arrayer.1 poeng: Lest fil eller gjort en annen riktig operasjon.Oppgave 3.5 DifferensiallikningerOppgave a)Vi benytter tiln?rming til den deriverte gjennom framoverdifferansen av funksjonsverdiene:f'x≈ fx+dx-f(x)dxVi er interesserte i funksjonsverdien ved neste tidssteg, fx+dx. Da f?r vi:f'x?dx≈fx+dx-f(x)fx+dx≈fx+f'x?dxSom er utgangspunktet for Eulers metode (Forward Euler).2 poeng: Presis og god forklaring.1 poeng: Noe upresist, men riktig konsept.Oppgave b)BE tar utgangspunkt i bakoverdifferansen fra den numeriske deriverterte slik at den benytter den deriverte ved samme tidssteg, x + dx, som funksjonsverdien vi skal finne. Dette kalles derfor en implisitt metode.1 poeng: Forklaring som har med at metoden bruker samme tidssteg i funksjonsverdien og funksjonsverdien til den deriverte.Oppgave c)BE er spesielt nyttig n?r vi har med dynamiske systemer over lengre tid ? gj?re. BE er nemlig mer numerisk stabil for dynamiske systemer selv ved relativt store tidssteg.1 poeng: Forklaring som handler om tid og/eller numerisk stabilitet ved store tidssteg.Oppgave 3.5 Rateloverimport numpy as npimport matplotlib.pyplot as plt# Konstanterk0 = 0.003627kH = 7106.41H = 1.26E-7# Tidsparameteret0 = 0tid_slutt = 600 # Tid i minutterdt = 1E-3N = int((tid_slutt-t0)/dt)# ArrayerA = np.zeros(N+1)S = np.zeros(N+1)t = np.zeros(N+1)# Ratelovenedef dA(A): return -(k0 + kH*H)*Adef dS(A): return (k0 + kH*H)*A# Forward Eulerdef euler(A0, S0): A[0] = A0 S[0] = S0 for i in range(N): A[i+1] = A[i] + dA(A[i])*dt S[i+1] = S[i] + dS(A[i])*dt t[i+1] = t[i] + dt return A, S, tA, S, t = euler(1, 0)plt.plot(t,S, t,A)plt.xlabel('Tid (s)')plt.ylabel('Konsentrasjon (mol/L)')plt.show()7-8 poeng: Alt riktig. Hovedideene er p? plass. Rom for sm? syntaksfeil. Funksjon for Eulers metode er ikke p?krevd.5-6 poeng: Hovedideene og algoritmen stemmer. Noe feil i enten algoritmen, arrayene eller tidsparameterne.3-4 poeng: En del programmeringsteknisk riktig, men feil som viser lavere forst?else av problemstillingen og/eller algoritmen.1-2 poeng: Noen initialbetingelser, arrayer og parametere er riktig. Mangler eller har ganske mangelfull algoritme og ratelover. Oppgave 3.5: Tilfeldige systemerx = np.zeros(N)y = np.zeros(N)retning = np.random.randint(1,5) elif retning == 3: x[i+1] = x[i] y[i+1] = y[i] + 1 elif retning == 4: x[i+1] = x[i] y[i+1] = y[i] – 12 poeng: Genererer tilfeldig tall og arrayer med N elementer. Riktig justering av posisjon.1 poeng: Feil i enten posisjon, generering av tilfeldige tall eller array-initiering. ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download