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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
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()