# -*- coding: utf-8 -*-
"""
Created on Thu Mar 21 08:18:03 2024

@author: 2017
"""
import numpy as np

a = 0   #startverdi
b =  1   #np.pi   #sluttverdi
n = 100 #antall delintervaller
delta = (b-a)/n     #bredde til delintervallene

#funksjonen
def f(x):   
    return  4/(1+x**2)
# x**5
#2* np.exp(-x**2)
#4/(1+x**2 )  #4*np.sqrt(np.abs(1-x**2 ))    #np.sin(x)  #x**4    #2*x
#Lager et integral estimat ved å 
#starte med verdien s og tar n steg med bredde delta.
def int(s):
    sum = 0   
    x = s
    for i in range(n):
        sum = sum + f(x)  #legger til en funksjonsverdi
        x = x + delta   #oppdaterer verdien til variabelen
    sum = sum * delta   #ganger med intervallbredden 
    return sum    
vr = int(a)
hr = int(a+delta)
mp = int(a + delta/2)
kvart = int(a + delta/4)
trekvart = int(a + 3*delta/4)
print('venstre rektangel:', vr)    
print('høyre rektangel:  ', hr)  
print('trapes:           ', (vr + hr)/2  )  
print('midtpunkt:        ', mp )
print('Simpson:          ' , (vr + hr)/6 + 2*mp/3)
print('forfina:          ' , (7/90)*(vr + hr)   
  + (32/90)*(kvart + trekvart) + (12/90)*mp  )
print('pi                ', np.pi)
#Vi benytter at estimatet med Simpsons 
#metode med 2 doble intervaller er lik 
#(1/3)trapes + (2/3)midtpunkt med n intervaller.
#Simpsons metode gir eksakt svar på alle tredjegradspolynom.
#print('sqrt(pi): ',np.sqrt(np.pi))
#print('differansen: ', np.sqrt(np.pi)  - ((vr + hr)/6 + 2*mp/3 ))
#Forfina er en utviding av Simpsons metode til firdoble intervaller
#slik at vi får eksakt integral av alle femtegradspolynomer.
#Vektingen er da i 90 deler:  7, 32, 12, 32, 7.