import numpy as np
import time


#gitterfinhet
potens = 6
n=10**potens

#hvor mange standardavvik over μ skal vi?
b=2

def summer_array(b,n):

    #gitter
    x=np.linspace(0,b,n+1)
    h=b/n 

    #sum av alle funksjonsverdier på gitteret
    f=np.sum(np.exp(-x**2/2))

    #sannsynlighet ved trapesmetoden
    return h*(2*f-1-np.exp(-b**2/2))/np.sqrt(8*np.pi)


def summer_for(b,n):

    #gitter
    h=b/n
    x=0
    f=np.exp(-x**2/2)

    #sum av alle funksjonsverdier på gitteret
    for i in range(n):
        x=(i+1)*h
        f=f+np.exp(-x**2/2)

    #sannsynlighet ved trapesmetoden
    return h*(2*f-1-np.exp(-b**2/2))/np.sqrt(8*np.pi)

#summering med array
st = time.time()
p = summer_array(b,n)
et = time.time()

print(f'Sannsynligheten for å havne mellom μ og {b} standardavvik ovenfor μ er {p}')
print(f'h=10^{potens} tok {et-st:.3f} sekunder med array')

#summering med for og additivt gitter
st = time.time()
p = summer_for(b,n)
et = time.time()

print(f'h=10^{potens} tok {et-st:.3f} sekunder med for-løkke')

