Advertisement
MHorikx

M&M schatten

Dec 14th, 2018
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Thu Dec 13 14:21:46 2018
  4.  
  5. @author: mmlho
  6. """
  7.  
  8. import numpy as np
  9. import sympy as sp
  10. import matplotlib.pyplot as plt
  11.  
  12. weightPerTen = np.array([23.7,
  13. 21.7,
  14. 22.8,
  15. 22.5,
  16. 25.3,
  17. 20.9,
  18. 22.5,
  19. 22.4,
  20. 21.8,
  21. 23.4])
  22.  
  23. weightPerTenSig = 0.1 # meetonzekerheid van de weegschaal was 0.1 gram
  24.  
  25. avweight = (np.sum(weightPerTen))/(10*len(weightPerTen)) #gemiddelde
  26. weightSig = weightPerTenSig/np.sqrt((10**2*len(weightPerTen)))
  27. """
  28. Als de onzekerheid op een meting van 10 pinda-M&M's 0.1 is, dan geldt 0.1 = sqrt(10*sigma**2) = sqrt(10)*sigma.
  29. Aangezien elke meting exact hetzelfde aantal pinda's en dezelfde onzekerheid heeft, geldt dit ook voor de sigma van een willekeurige pinda-M&M,
  30. gezien over alle metingen. De SDOM is dan gelijk aan sigma/sqrt(100), want er zijn 100 pinda's gewogen in totaal. Dus SDOM = 0.1/sqrt(1000).
  31. """
  32. print('Gemiddeld gewicht van een pinda-M&M is {:.3f} +/- {:.3f} gram'.format(avweight, weightSig))
  33.  
  34. height = 9
  35. diameterTop = 24.8
  36. diameterBottom = 18.4
  37. rim = 0.7
  38. lenSig = 0.2 # alle bovenstaande meetwaarden zijn met meetlint gemeten, en hebben vanwege de nauwkeurigheid van het lint en vanwege het aflezen een onzekerheid van 2 mm
  39. radiusTop = diameterTop/2
  40. radiusBottom = diameterBottom/2
  41.  
  42. """
  43. Aangezien het verschil in de straal boven en onder (24.8-18.4)/2 = 3.4 cm is, en de hoogte 9 cm is, zou de zijde van de kom, als het om een perfect vlakke, schuine zijde gaat,
  44. sqrt(3.4**2 + 9**2) = 9.62 cm zijn. Er is 9.7 cm gemeten. Dat verschilt niet al te veel. We nemen dus gewoon aan dat de zijde niet gekromd is. De rand is 0.7 cm dik.
  45. Het volume van de kom rekenen we uit als verschil tussen twee geroteerde trapeziums. Die rekenen we uit met integralen. We nemen de buitenwand, de bovenkant
  46. en de onderkant van de kom als grenzen voor de ene trapezium, en de binnenwand, de bovenkant en de bodem aan de binnenkant van de kom als grenzen. Het verschil daartussen
  47. is precies de inhoud van de kom, in de letterlijke zin: de ruimte die gevuld is met materiaal (niet het volume wat opgevuld kan worden).
  48. """
  49.  
  50. x = sp.Symbol('x')
  51. outerEdge = radiusTop - x*(radiusTop - radiusBottom)/height
  52. innerEdge = radiusTop - rim - x*(radiusTop - radiusBottom)/height
  53. volumefOuter = sp.integrate(outerEdge**2, x)
  54. volumefInner = sp.integrate(innerEdge**2, x)
  55. volume = np.pi*(volumefOuter.subs(x, height) - volumefOuter.subs(x, 0) - (volumefInner.subs(x, height - rim) - volumefInner.subs(x, 0)))
  56. volumesig = 'TBA' # neem dit iets groter dan de propagatie zoals hij nu zou zijn, ivm het feit dat de wand niet echt gekromd is
  57. print('Het volume van de rand van de bak is {:.1f} cm^3'.format(volume))
  58.  
  59. weightFilled = 3851.3
  60. weightFilledSig = 0.1 # zoals gemeten door Peter van Capel
  61.  
  62. density = 2.4
  63. denisitySig = 0.1 # voor de dichtheid van porcelein was te vinden dat het ongeveer 2.3-2.5 g/cm^3 was, dus 2.4 +/- 0.1
  64.  
  65. weightEmpty = density*volume
  66. weightEmptySig = 'TBA'
  67.  
  68. peanutNumber = (weightFilled - weightEmpty)/avweight # afgeschat aantal M&M's
  69. print('Er zitten ongeveer {:d} pinda-M&Ms in de bak'.format(int(peanutNumber)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement