Innlevering 3 og 4
This commit is contained in:
parent
6da3bc27ad
commit
62633fa9fb
23
inf120stat.py
Normal file
23
inf120stat.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
from math import sqrt, isclose
|
||||||
|
|
||||||
|
def mean(l):
|
||||||
|
return sum(l)/len(l)
|
||||||
|
|
||||||
|
def std(l):
|
||||||
|
m = mean(l)
|
||||||
|
diffs = [(x-m)**2 for x in l]
|
||||||
|
return sqrt(sum(diffs)/len(diffs))
|
||||||
|
|
||||||
|
def test_mean():
|
||||||
|
l = [1.0, 2.0, 3.0, 4.0]
|
||||||
|
expected = 2.5
|
||||||
|
return isclose(mean(l), expected, abs_tol=0.001)
|
||||||
|
|
||||||
|
def test_std():
|
||||||
|
l = [1.0, 2.0, 3.0, 4.0]
|
||||||
|
expected = 1.11803
|
||||||
|
return isclose(std(l), expected, abs_tol=0.001)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
print('mean:', test_mean())
|
||||||
|
print('std:', test_std())
|
34
smitte.py
Normal file
34
smitte.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""Created on 23.10"""
|
||||||
|
__author__ = "Trygve B. Nomeland"
|
||||||
|
__email__ = "trygve.borte.nomeland@nmbu.no"
|
||||||
|
|
||||||
|
""""
|
||||||
|
SIR modell av en pandemi:
|
||||||
|
S (Susceptible) – folk som ikke er eller har vært syke og som kan smittes
|
||||||
|
I (Infectious) – folk som er syke og som kan smitte andre
|
||||||
|
R (Recoverd) – folk har vært syke og har blitt friske igjen. Modellen antar at disse ikke kan bli syke igjen.
|
||||||
|
_y betyr verdi fra forrige steg
|
||||||
|
"""
|
||||||
|
def updateSIR(s_y, i_y, r_y, b, k):
|
||||||
|
return {'s': s_y - b*s_y*i_y, 'i': i_y + b*s_y*i_y-k*i_y, 'r': r_y + k*i_y}
|
||||||
|
|
||||||
|
# Generator som kjører simulasjonen frem til "stop" verdien
|
||||||
|
def genSIR(s_0, i_0, r_0, stop, b=1/3, k=1/10,):
|
||||||
|
SIR = {'s': s_0, 'i': i_0, 'r': r_0}
|
||||||
|
yield SIR
|
||||||
|
n = 0
|
||||||
|
while n < stop:
|
||||||
|
n += 1
|
||||||
|
SIR = updateSIR(SIR.get('s'), SIR.get('i'), SIR.get('r'), b, k)
|
||||||
|
yield SIR
|
||||||
|
|
||||||
|
def main():
|
||||||
|
f = open('pan.csv', 'w')
|
||||||
|
f.write('Day,s@day,i@day,r@day\n')
|
||||||
|
for n, S in enumerate(genSIR(1, 10/(5*10**6), 0, stop=120)):
|
||||||
|
f.write(f'{n},{S.get('s'):.3e},{S.get('i'):.3e},{S.get('r'):.3e}\n')
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
51
stat_kalk.py
Normal file
51
stat_kalk.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import inf120stat as stat
|
||||||
|
|
||||||
|
def choose_action():
|
||||||
|
#returns number from 1 to 5
|
||||||
|
print("""
|
||||||
|
ESP meny:
|
||||||
|
1. Les inn verdier
|
||||||
|
2. Tøm verdi listen
|
||||||
|
3. Vis gjennomsnitt og standardavvik
|
||||||
|
4. List ut verdiene
|
||||||
|
5. Avslutt
|
||||||
|
Ditt valg:""")
|
||||||
|
i = int(input())
|
||||||
|
if i not in range(1,6): raise ValueError()
|
||||||
|
return i
|
||||||
|
|
||||||
|
def read_values(values):
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
values.append(float(input('Ny verdi (Enter = slutt):')))
|
||||||
|
except ValueError:
|
||||||
|
print('Verdier kan kunn være gyldige flyttall!')
|
||||||
|
break
|
||||||
|
return values
|
||||||
|
|
||||||
|
def print_statistics(values):
|
||||||
|
return(f'Antall verdier: {len(values)}, gjennomsnitt: {stat.mean(values):.2f}, standardavvik: {stat.std(values):.2f}')
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print('Starter Enkelt statistikk program (ESP)')
|
||||||
|
values = []
|
||||||
|
while True:
|
||||||
|
match choose_action():
|
||||||
|
case 1:
|
||||||
|
# Write numbers
|
||||||
|
read_values(values)
|
||||||
|
case 2:
|
||||||
|
values = []
|
||||||
|
case 3:
|
||||||
|
#mean, std
|
||||||
|
try:
|
||||||
|
print(print_statistics(values))
|
||||||
|
except ZeroDivisionError:
|
||||||
|
print('Tom liste!')
|
||||||
|
case 4:
|
||||||
|
print(values)
|
||||||
|
case 5:
|
||||||
|
exit('Hadebra :)')
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
Loading…
Reference in New Issue
Block a user