Følger og rekker#

Følger#

For å finna ledd i talfølger kan ein bruka ekplisitte formlar, eller finna leddet rekursivt. Me skal sjå på døme på korleis me kan gjera begge deler, både for aritmetiske og geometriske følger.

Eksplisitt#

Gitt den aritmetiske talfølga

\[3, 7, 11, 15, \ldots\]

Her er det første leddet \(a_1 =3\) og differansen mellom kvart ledd er \(d=4\). Dermed vil

\[a_n = a_1 + d(n-1)\]

Denne eksplisitte formelen for det n-te leddet kan me t.d. definera som ein funksjon i python:

def a(n):
    return 3 + 4*(n - 1)

print(a(4))
15

Denne funksjonen kan me bruka for å skriva ut dei ti første ledda:

for i in range(1, 11):
    print(a(i), end = ", ")    # end = "\n" (linjeskift) er standarden

print("...")
3, 7, 11, 15, 19, 23, 27, 31, 35, 39, ...

Rekursiv#

Sidan følga i dømet overt er ei aritmetisk følge kan me finna eit ledd ved å legga til differansen til leddet før, altså

\[a_n = a_{n-1} + d\]

For å finna det n-te leddet her må me då starta med \(a_1\) og jobba oss fram til \(a_n\).

def a(n): 
    if n == 1:
        return 3                # det første leddet, a_1
    else:
        return a(n-1) + 4       # leddet før + differansen

print(a(4))
15

Skriv ut dei ti første ledda:

for i in range(1, 11):
    print(a(i), end = ", ")    

print("...")
3, 7, 11, 15, 19, 23, 27, 31, 35, 39, ...

Fibonacci#

Somme talfølger kan vera krevande å finna eksplisitte uttrykk for. Eit døme på dette kan vera Fibonacci-talfølga

\[1, 1, 2, 3, 5, 8, 13, \ldots\]

der kvart ledd er summen av dei to førre ledda. Altså at \(a_n = a_{n-1} + a_{n-2}\).

Å finna ledda rekursivt vert dermed mykje enklare enn å finna ein eksplisitt formel:

def F(n):
    if n == 1 or n == 2:
        return 1            # dei to første ledda er 1
    else:
        return F(n-1) + F(n-2)

for i in range(1, 16):
    print(F(i), end = ", ")

print("...")
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, ...

Følger og arrays#

Viss me er interessert i å lagra alle ledda i ei følge kan det vera greit å bruka arrays (frå NumPy-biblioteket).

Me ser igjen på den aritmetiske følga

\[3, 7, 11, 15, \ldots\]
import numpy as np

a = np.array([3, 7, 11, 15])

for i in range(6):
    a = np.append(a, a[-1] + 4) 

print(a)
[ 3  7 11 15 19 23 27 31 35 39]

np.append brukar me for å legga til eit nytt element i arrayen.

a[-1] gjev oss det siste leddet i arrayen.

Ser me på Fibonacci-dømet kan me gjera det same her:

fib = np.array([1, 1])

for i in range(10):
    fib = np.append(fib, fib[-1] + fib[-2])
    
print(fib)
[  1   1   2   3   5   8  13  21  34  55  89 144]

Å bruka arrays kan vera ein føremon når me skal vidare til rekker. I tillegg kan me enkelt laga enkle talfølger ved hjelp av NumPy, til dømes dei naturlege tala:

n = np.arange(1, 11)

print(n)
[ 1  2  3  4  5  6  7  8  9 10]

Me kan enkelt summera ledda i arrayen (her: dei 10 første naturlege tala)

s = n.sum()

print(s)
55

I tillegg kan me summera ledd for ledd og få ei liste med kumulative summar:

s2 = n.cumsum()

print(f"ledd: {n} \nsum:  {s2}")
ledd: [ 1  2  3  4  5  6  7  8  9 10] 
sum:  [ 1  3  6 10 15 21 28 36 45 55]