Pythagoras Python Programmeren (PyPy)

Vanaf het komende nummer gaan we aan de slag met een uitgebreide serie van artikelen over programmeren en de relatie tot wiskunde. Een aantal programma's zullen op de website van Pythagoras terug te vinden zijn. Maar je zult ook zelf aan de slag gaan. 

We hebben gekozen voor de programmeertaal Python, ... lees meer

Motivatie om te programmeren

Pythagoras is en blijft een wiskundetijdschrift voor jongeren. Maar met programmeren kun je toch weer andere dingen voor elkaar krijgen. Het geeft ook een goed inzicht in de wiskunde. Je bekijkt wiskunde vanaf een heel andere kant. We hopen dat je dat eveneens zult ervaren. Op deze site tref je de programma's aan die in de opeenvolgende artikelen zullen worden besproken. Tevens plaatsen we tips, vragen en antwoorden (FAQ), etc.
 

Pythagoras Python Programmeren (PyPy)

Vanaf het komende nummer gaan we aan de slag met een uitgebreide serie van artikelen over programmeren en de relatie tot wiskunde. Een aantal programma's zullen op de website van Pythagoras terug te vinden zijn. Maar je zult ook zelf aan de slag gaan.

We hebben gekozen voor de programmeertaal Python, ... lees meer


 

Wat heb je nodig?

We hebben Python getest op Linux, Windows 10 en Mac. Overal werkte Python uitstekend. Wij vinden Python het prettigst werken in een notebook-omgeving. In de praktijk werk je op een browser. Het beste kun je uitgaan van Anaconda, dan heb je alles in een, Python en de notebookomgeving Jupyter. Deze laatste kun je ook los van de rest installeren.
 

Jouw reactie!

Uiteraard zijn we geinteresseerd in jouw reactie. Laat weten wat je al doet op het gebied van programmeren. Wat je geleerd hebt en of je gebruik maakt van de programma's die wij beschikbaar stellen. Ook kun je aangeven wat je graag nog meer zou willen zien. Stuur je email naar [email protected]. Uiteraard zijn we ook te vinden in de social media (momenteel alleen Facebook).

 

Wie zijn wij?

Matthijs Coster

Matthijs werkt in het dagelijks leven als wiskundige bij het Ministerie van Defensie. Daarbij moet hij regelmatig wiskundige algoritmes programmeren.

Tevens is hij redacteur bij Pythagoras.

Derk Pik

Derk is verbonden aan de UvA als docentbegeleider. Tot voor kort was hij tevens wiskundedocent aan een school voor middelbaar onderwijs. Hij stimuleerde daar zijn leerlingen om gebruik te maken van programmeren.

Bovendien was hij hoofdredacteur van Pythagoras.

 

Kom je er uit?

Bij ons werkte het direct! Waren wij geluksvogels? Het is niet alleen het installeren van Python. Dan volgen ook nog Anaconda, TKinter (bij ons was dit al geinstalleerd), SymPy, en mogelijk ook nog andere pakketten. Laat weten hoe de installatie verliep.

 

Programma: FibonaCci

# Met dit programma bereken je
# Fibonacci getallen
HERH = 31
a = 0
b = 1
print(0,a)
print(1,b)
for i in range(2,HERH):
    c = a + b
    a = b
    b = c
    print(i,b)
print("Klaar")
 

Programma: Driehoek van PasCal

# Met dit programma bereken je ...
#        ... de driehoek van Pascal
STOP = 11
Pascal = []
for i in range(0,STOP):
    Pascal.append([])
    for j in range(0,i+3):
        Pascal[i].append(0)
Pascal[0][1] = 1
print(Pascal[0])
for i in range(1,STOP):
    for j in range(1,i+2):
        Pascal[i][j] = 
		Pascal[i-1][j] + 
		Pascal[i-1][j-1]
    print(Pascal[i])

Enkele programma's om de software te testen

Programma waarmee je de versie van Python kunt bekijken

# Voorbeeldprogramma 1
# Introductie: controleer of je de juiste versie van Python gebruikt.
import sys
sys.version_info

Uitvoer: sys.version_info(major=a, minor=b, micro=c, releaselevel=d, serial=e)
Prettig zou zijn als op de plaats van a een 3 staat.

Programma waarmee je kunt testen of tkinter is geinstalleerd

# Voorbeeldprogramma 2
# Controleren of Tkinter werkt:
from tkinter import *

root = Tk()

w = Label(root, text="\n   Dit is een dialoogvenster!   \n")
w.pack()

root.mainloop()

Als het goed is verschijnt er midden op het scherm een dialoogvenster met de tekst Dit is een dialoogvenster!

Programma waarmee je grafieken kunt tekenen

# Voorbeeldprogramma 3
import numpy as np
import matplotlib.pyplot as plt
from math import pi as pi

x = np.arange(-2*pi, 2*pi, 0.1);
y = np.sin(x)
plt.plot(x, y)

Krijg je als uitvoer iets als <matplotlib.lines.Line2D at 0x7fea71bc97f0>? Probeer eens Shift+Enter!

Programma waarmee je getallen kunt factoriseren

# Voorbeeldprogramma 4
# Ontbinden van getallen in factoren
# Het pakket sympy
# We testen of het factoriseerprogramma werkt

from sympy import factorint
# Voer een positief geheel getal in
GETAL = 19612018
# En ontbindt dit getal in factoren
print(factorint(GETAL))
# Uiteraard kun je zelf aan GETAL een andere waarde toekennen...

Code behorend bij PriemraCen (zie artikel)

#Programma horende bij de tekst "Priemracen"
import sympy
import time

team1 = 0
teamk = 0
maxT1 = 0
maxTk = 0
N = 2000000
p = 2
Eq = []
T1 = []
K = 4
t0 = time.process_time()
for j in range(N):
    p = sympy.nextprime(p)
    if p % K == 1:
        team1 += 1
    else:
        teamk += 1
    if team1 == teamk:
        Eq.append(p)
    if team1 > teamk:
        T1.append(p)
        if maxT1 < team1 - teamk:
            maxT1 = team1 - teamk
    else:
        if maxTk < teamk - team1:
            maxTk = teamk - team1
t1 = time.process_time()
print("Gelijk spel:", len(Eq))
print("Maximale winst Team 1:", maxT1)
print("Maximale winst Team ", K-1, ":", maxTk)
print("Team1 wint: ", len(T1))
print("priem", N, p)
print("Tijd:", t1-t0)
print("Ready")
#print(T1)

 

T1 = []
N = 50
p = 2
for j in range(N):
    p = sympy.nextprime(p)
    if p % 4 == 1:
        T1.append(p)
lt1 = len(T1)
plt1 = 2^lt1
print(lt1, T1)

 

for n in range(plt1):
    k = n
    cnt = 0
    P = 1
    while k > 0:
        if k % 2 == 1:
            P *= T1[cnt]
        k = k // 2
        cnt += 1
    M = P * P + 4
    MP = sympy.factorint(M)
    for mp in MP:
        if mp % 4 == 3:
            print ("mp", mp)
            print(n, P, MP)
print("Ready")

 

def maak_priemrij(n):
    # Deze functie genereert alle priemgetallen kleiner of gelijk aan n
    if n < 2:
        return []
    rij= list(range(2, n+1))
    priemrij = []
    pr = 1
    while pr <= n**(1/2):
        pr = rij.pop(0)
        priemrij.insert(len(priemrij), pr)
        rij = list(x for x in rij if (x % pr != 0))   
    return(priemrij + rij)

G = 1000000
priemrij = maak_priemrij(G)
priemrij1 = list(x for x in priemrij if (x % 4 == 1))
priemrij3 = list(x for x in priemrij if (x % 4 == 3))

 

def alb(rij, n):
    return(len(list(x for x in rij if (x <= n))))

rij = [1,3,4,5,6]
alb(rij, 6)

 

import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = (15, 9)

def maak_plot(priemrij1, priemrij3, N):
    x = list(range(0, N))
    y1 = list(range(0, N))
    y3 = list(range(0, N))
    for j in range(0, N):
        y1[j] = alb(priemrij1, j)
        y3[j] = alb(priemrij3, j)
    plt.plot(x, y1, label=' van de vorm $4n+1$')
    plt.plot(x, y3, label=' van de vorm $4n+3$')
    plt.title('Aantal priemgetallen kleiner of gelijk aan $x$')
    plt.legend()
    plt.show()
    return

N = 100
maak_plot(priemrij1, priemrij3, N)

 

# Programma 5b: Dirichlet deel 2
N = 1000
maak_plot(priemrij1, priemrij3, N)

 

N = 100000
x = list(range(0, N))
y1 = list(range(0, N))
y3 = list(range(0, N))
y = list(range(0, N))
for j in range(0, N):
    y1[j] = alb(priemrij1, j)
    y3[j] = alb(priemrij3, j)
    y[j] = y3[j] - y1[j]
plt.plot(x, y, label='aantal van de vorm $4n+3$ - aantal de vorm $4n+1$')
plt.title('Verschil in aantal kleiner dan $x$')
plt.legend()
plt.show()