Facebook
From Lasse Matias Dragsjø, 2 Years ago, written in Python.
Embed
Download Paste or View Raw
Hits: 29
  1. import numpy as np # numpy importeres her
  2. from matplotlib import pyplot as plt # pyplot som plt importeres her
  3. import math # math importeres her
  4.  
  5. data = np.loadtxt('waterHeight.txt',skiprows = 1) # Laster inn dataen fra "waterHeight", og hopper over den første
  6. # raden.
  7. Time = data[:,0] # "Time" listen hentes ut her
  8. WaterHeight = data [:,1] # "WaterHeight" listen hentes ut her
  9.  
  10. N = 277 # Det er 277 målinger
  11. t0 = 0 # Starttiden er 0 sekunder
  12. tSlutt = 276 # Sluttiden er 276 sekunder
  13. h = (tSlutt - t0) / (N - 1) # Steglengden er (276 - 0) / (277 - 1) = 276 / 276 = 1
  14.  
  15. for x in range(N): # For-løkke som kjøres N antall ganger
  16.     WaterHeight[x] = -WaterHeight[x] + 21.8 - 5.7 + 21.8
  17. # Her snus datasettet opp ned, og det løftes med 21.8cm, til hvor høyt vannet var ved staten av da forsøket ble
  18. # gjort. Slik modellerte jeg hva avstanden mellom denne vannhøyden og sensoren var, som var 5.7cm. Så løftet jeg
  19. # datasettet opp igjen med 21.8, slik at den kunne vise den reelle vannhøyden
  20.  
  21. plt.plot(Time, WaterHeight, label = "Data") # Disse tallverdiene plottes inn til leseren, og grafens navn settes
  22. # til "Data"
  23.  
  24. Ap = ((1/100/2)**2)*math.pi # Regner ut arealet av proppen, der proppens diameter er 1cm
  25. A = ((25.5/100/2)**2)*math.pi # Regner ut arealet av grunn/topp-flaten, der flatens diameter er 25.5cm
  26. k0 = 100/3 # Konstanten k0 settes til 100/3, altså hundre tredeler
  27. k = k0 * (Ap / A) # Regner ut k til bruk for eulermetoden
  28.  
  29. T = np.zeros(N) # En liste av "T" (Time) lages her
  30. W = np.zeros(N) # En liste av "W" (WaterHeight) lages her
  31. Ti = np.zeros(N) # En liste av "Ti" (TimeIncrease) lages her
  32. Wi = np.zeros(N) # En liste av "Wi" (WaterHeightIncrease) lages her
  33. Td = np.zeros(N) # En liste av "Td" (TimeDouble) lages her
  34. Wd = np.zeros(N) # En liste av "Wd" (WaterHeightDouble) lages her
  35.  
  36. TimeListe = [T, Ti, Td] # TimeListe settes til T, Ti, og Td
  37. WaterHeightListe = [W, Wi, Wd] #WaterHeightListe settes til W, Wi, og Wd
  38. kListe = [0, 0.4, 0.4] # Dette settes inn, for i den andre og den tredje beregningen er det en konstant tilførsel
  39. # av vann (ki), som står for konstantIncrease. Denne konstanten, etter modellering, settes til 0.4
  40. multiplyListe = [1, 1, 2] # Dette settes inn, for i den tredje beregningen er det to hull istedenfor kun ett.
  41. # Denne konstanten (kd), som står for konstantDouble, settes til 2
  42. tMove = [37, 37+60, 37+60*2] # Denne listen brukes for å flytte de tre beregnede grafene ett gitt mengde til høyre
  43. label = ["Normal", "Increase", "Double"] # Denne listen brukes for å navngi de ulike grafene
  44.  
  45. for z in range(3): # For-løkke som kjøres 3 ganger
  46.     wStart = [21.8, W[60], Wi[60]] # Disse er for å justere startverdien av grafene, til bruk for eulermetoden
  47.     w = WaterHeightListe[z] # w her er alle de tre verdiene for WaterHeight
  48.     t = TimeListe[z] # t her er alle de tre verdiene for Time
  49.     w[0] = wStart[z] # Den første verdien av "W" er 21.8cm, og de andre verdiene kommer fra de forrige grafene
  50.     t[0] = 0 # Den første verdien av "T" er 0s. De andre verdiene settes også til 0, men endres senere i koden
  51.     for i in range(N-1): # For-løkke som kjøres N-1 antall ganger
  52.         w[i + 1] = w[i] - k*(w[i]**0.5) * h * multiplyListe[z] + kListe[z] # Eulremetoden med diferentiallikningen
  53.         # for tømming av tank, som den deriverte av w, i tillegg til multiplyListe og kListe.
  54.         t[i + 1] = t[i] + h # Eulermetoden med tiden
  55.     for x in range(N): # For-løkke som kjøres N antall ganger
  56.         t[x] = t[x] + tMove[z] # Alle grafene flyttes til høyre med 37s, andre graf flyttes ytterligere 60s til
  57.         # høyre, og tredge graf flyttes ytterligere 120s til høyre. Slik flyttes grafene til der de er relevante
  58.         # å bruke
  59.     plt.plot(t, w, label = label[z]) # Den kalkulerte verdien, altså vannstanden i forhold til tiden, plottes.
  60.     # Navnet til grafene blir gitt her
  61. plt.xlabel("Tid [Sekunder (s)]") # Navngir x-aksen som "Tid [Sekunder (s)]"
  62. plt.ylabel("Vannhøyde [Høyde (h)]") # Navngir y-aksen som "Vannhøyde [Høyde (h)]"
  63. plt.legend() # Viser frem alle navngivelsene til grafene