Programmering og numerisk integrasjon

Programmering og numerisk integrasjon

Funksjonen ff er gitt ved

f(x)=32xf(x) = 3^{2x}

Programmet nedenfor beregner arealet avgrenset av grafen til ff, xx-aksen og linjene x=0x = 0 og x=2x = 2 ved hjelp av to ulike metoder.

start = 0
slutt = 2
n = 100

dx = (slutt-start)/n

def f(x):
    return 3**(2*x)

def areal_til_hoyre():
    areal = 0
    for i in range(n):
        x = start + i*dx
        areal = areal + f(x)*dx
    return areal

def areal_til_venstre():
    areal = 0
    for i in range(1, n+1):
        x = start + i*dx
        areal = areal + f(x)*dx
    return areal

print(areal_til_hoyre())
print(areal_til_venstre())

Forklar hvorfor den ene metoden vil gi en litt for høy verdi for arealet, og den andre metoden en litt for lav verdi.

Lag et program som beregner arealet mer nøyaktig uten å dele det opp i flere deler. Ta utgangspunkt i koden nedenfor, og skriv ferdig funksjonen «bedre_metode()». Hvis du programmerer i et annet programmeringsspråk enn Python, må du først skrive en kode som samsvarer med koden nedenfor i språket du bruker.

Husk å legge ved skjermbilde av programmet du lager, og resultatet du får når du kjører programmet.

start = 0
slutt = 2
n = 100

dx = (slutt-start)/n

def f(x):
    return 3** (2*x)

def bedre_metode():
    areal = 0
    
    #Skriv ny kode her
    
    return areal
    
print(bedre_metode())
Fasit

areal_til_hoyre bruker venstre endepunkter (for lav), areal_til_venstre bruker høyre endepunkter (for høy)

Trapesmetode: (f(x) + f(x+dx)) / 2 * dx

Løsningsforslag

Funksjonen f(x)=32x=9xf(x) = 3^{2x} = 9^x er strengt stigende på [0,2][0, 2].

For en stigende funksjon gjelder:

  • areal_til_hoyre() bruker venstre endepunkt (x=0,Δx,2Δx,x = 0, \Delta x, 2\Delta x, \ldots) i hvert delintervall. Venstre endepunkt gir den minste funksjonsverdien → summerer for lav verdi.
  • areal_til_venstre() bruker høyre endepunkt (x=Δx,2Δx,,2x = \Delta x, 2\Delta x, \ldots, 2). Høyre endepunkt gir den største funksjonsverdien → summerer for høy verdi.

Det faktiske arealet (nøyaktig) er 029xdx=921ln936,4\displaystyle\int_0^2 9^x \, \mathrm{d}x = \frac{9^2-1}{\ln 9} \approx 36{,}4.

En bedre metode er trapesmetoden: vi bruker gjennomsnittet av funksjonsverdiene i begge endepunktene av hvert delintervall.

start = 0
slutt = 2
n = 100

dx = (slutt-start)/n

def f(x):
    return 3**(2*x)

def bedre_metode():
    areal = 0
    for i in range(n):
        x = start + i*dx
        areal = areal + (f(x) + f(x + dx)) / 2 * dx
    return areal

print(bedre_metode())

Trapesmetoden gir 36,415\approx 36{,}415, som er svært nær den eksakte verdien 36,410\approx 36{,}410.

Sensorveiledning

Kandidaten må begrunne svaret godt for å få full uttelling. En mangelfull eller upresis forklaring kan gi 1 poeng.

Kandidater som kun endrer verdien for nn får ingen uttelling. Program med riktig strategi, men feil svar kan gi 1 poeng.