[NumAn] Project2: demonstratie van een convergentiekaart

2238 days ago by Niels.Neirynck

import matplotlib.pyplot as plt import numpy as np import math 
       
def linspace(a, b, n): n += 1 for t in range(1, n): yield float(a + (b - a)*(t/n)) #deel het internval [0 1] in 9 stukjes rangex = list(linspace(0.0, 1.0, 9)) print 'x range:', rangex #deel het internval [-4, 2] in 15 stukjes rangey = list(linspace(-4.0, 2.0, 15)) print 'y range:', rangey 
       
x range: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
y range: [-3.625, -3.25, -2.875, -2.5, -2.125, -1.75, -1.375, -1.0,
-0.625, -0.25, 0.125, 0.5, 0.875, 1.25, 1.625]
x range: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
y range: [-3.625, -3.25, -2.875, -2.5, -2.125, -1.75, -1.375, -1.0, -0.625, -0.25, 0.125, 0.5, 0.875, 1.25, 1.625]
#maak lege matrix aan: m = [[0 for _ in range(len(rangex))] for _ in range(len(rangey))] print(m) 
       
[[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0,
0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0,
0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0,
0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0,
0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0,
0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0,
0]]
[[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]]
#vul voor elke x en y een willekeurige waarde in (dit vervang je door een getalrepresentatie van het nulpunt) import random for x_index, x in enumerate(rangex): for y_index, y in enumerate(rangey): #complex getal: x + I*y m[y_index][x_index] = random.randint(0, 3) #hier vul je een getalrepresentatie in van het gevonden nulpunt voor de startwaarde. print(m) 
       
[[0, 2, 2, 0, 1, 2, 3, 1, 2], [0, 0, 1, 1, 2, 0, 2, 3, 2], [2, 1, 2, 3,
0, 1, 1, 3, 0], [1, 3, 0, 1, 0, 2, 1, 2, 2], [3, 0, 2, 0, 2, 1, 2, 0,
0], [0, 0, 1, 1, 3, 2, 2, 0, 1], [0, 1, 0, 2, 3, 0, 3, 1, 1], [0, 1, 2,
0, 2, 1, 2, 0, 3], [2, 2, 3, 0, 2, 3, 2, 1, 1], [3, 2, 2, 2, 0, 3, 0, 0,
0], [1, 2, 3, 0, 3, 2, 0, 1, 2], [2, 3, 1, 3, 0, 0, 1, 3, 2], [3, 2, 0,
3, 3, 1, 1, 0, 2], [2, 2, 1, 3, 3, 3, 3, 3, 3], [1, 0, 0, 0, 3, 1, 2, 2,
2]]
[[0, 2, 2, 0, 1, 2, 3, 1, 2], [0, 0, 1, 1, 2, 0, 2, 3, 2], [2, 1, 2, 3, 0, 1, 1, 3, 0], [1, 3, 0, 1, 0, 2, 1, 2, 2], [3, 0, 2, 0, 2, 1, 2, 0, 0], [0, 0, 1, 1, 3, 2, 2, 0, 1], [0, 1, 0, 2, 3, 0, 3, 1, 1], [0, 1, 2, 0, 2, 1, 2, 0, 3], [2, 2, 3, 0, 2, 3, 2, 1, 1], [3, 2, 2, 2, 0, 3, 0, 0, 0], [1, 2, 3, 0, 3, 2, 0, 1, 2], [2, 3, 1, 3, 0, 0, 1, 3, 2], [3, 2, 0, 3, 3, 1, 1, 0, 2], [2, 2, 1, 3, 3, 3, 3, 3, 3], [1, 0, 0, 0, 3, 1, 2, 2, 2]]
#plotten van de kaart: def roundlist(inputlist, r=4): #rond een volledige lijst af op 'r' cijfers na de komma. return [str(round(x, r)) for x in inputlist] def transform(inputlist, value): # zet een getal om naar de indexvoorstelling in een lijst return (len(inputlist) - 1)*(inputlist[0] - value)/(inputlist[0] - inputlist[-1]) plt.matshow(m) tickstep = 2 #verhoog dit om het aantal 'ticks' op de plot te verminderen plt.xticks(list(range(len(rangex)))[::tickstep], roundlist(rangex, r=5)[::tickstep], rotation='vertical', fontsize=7) plt.yticks(list(range(len(rangey)))[::tickstep], roundlist(rangey, r=5)[::tickstep], rotation='horizontal', fontsize=7) #plotten van de nulpunten (hier willekeurig gekozen) nulpunten = [0.2 - I*3.0, 0.1 + I*0.9, 0.5 -I] for point in nulpunten: for color, width in zip(('white', 'black'), (5, 2)): plt.plot(transform(rangex, point.real()), transform(rangey, point.imag()), marker='x', color=color, markersize=15, markeredgewidth=width) #het opslaan naar een bestand doet de figuur verschijnen in sage plt.savefig('test.png')