Herons metode er en metode for å finne tilnærmingsverdien til \(\sqrt{n}\) når \(n \in\mathbb{N} \). Idéen handler om å gjøre om et rektangel med sidelengder \(1\) og \(n\) (slik at arealet er \(n\)), til et nytt rektangel med areal \(n\) som ser «mer kvadratisk ut».

Under er en kort video som illusrerer hvordan man, etter bare tre steg i algoritmen, raskt kan approksimere \(\sqrt{2}\) til \(\frac{577}{408}\approx 1.4142156 \). Denne approksimasjonen er omtrent \(0.00015\%\) unna den riktige verdien til \(\sqrt{2}\).

Her har vi skrevet en kode som produserer løsningsforslag til Herons metode. Prøv koden for å se utregningene fra videoen over, til å finne de neste approksimasjonene til \(\sqrt{2}\) eller til å approksimere andre kvadratrøtter.

Vis kode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import numpy as np


def forkort(a, b):
    p = int(a/np.gcd(a, b))
    q = int(b/np.gcd(a, b))
    return [p, q]


def herons(p, X, Y):
    # regner ut neste x-verdi
    Xtemp = [X[-1][0]*Y[-1][1]+X[-1][1]*Y[-1][0], 
            2 * X[-1][1]*Y[-1][1]]  
    # forkorter teller og nevner i Xtemp og lagrer i X
    X.append(forkort(Xtemp[0], Xtemp[1])) 
    # regner ut neste y-verdi
    Ytemp = [p*X[-1][1], X[-1][0]]
    # forkorter teller og nevner i Ytemp og lagrer i Y
    Y.append(forkort(Ytemp[0], Ytemp[1]))


def heron_losning(p, n):
    X = [[p, 1]]  # samler x_i verdiene som [teller,nevner]
    Y = [[1, 1]]  # samler y_i verdiene som [teller,nevner]
    i = 1
    print(
        f"Approksimasjonene til kvadratroten av {p} etter {n} iterasjoner er:")
    while i <= n:
        herons(p, X, Y)
        print(
            f"x_{i} = ({X[-2][0]}/{X[-2][1]} + {Y[-2][0]}/{Y[-2][1]})/2 
                    = {X[-1][0]}/{X[-1][1]}")
        i += 1

Prøv koden