added ex24
This commit is contained in:
parent
99aa707873
commit
ff5eeb66b4
64
exam/ex24/main.py
Normal file
64
exam/ex24/main.py
Normal file
|
@ -0,0 +1,64 @@
|
|||
import sys
|
||||
sys.path.append("../../")
|
||||
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.animation as animation
|
||||
|
||||
from util.io import readvalue
|
||||
|
||||
def positive_int(s):
|
||||
i = int(s)
|
||||
if(not i > 0):
|
||||
raise ValueError("{} <= 0".format(i))
|
||||
return i
|
||||
|
||||
def prepare_A(n):
|
||||
A = -2 * np.identity(n)
|
||||
A += np.roll(np.identity(n), 1, axis=0)
|
||||
A += np.roll(np.identity(n), -1, axis=0)
|
||||
return A
|
||||
|
||||
N = readvalue("N > ", positive_int)
|
||||
M = readvalue("M > ", positive_int)
|
||||
kappa = 0.05
|
||||
|
||||
A = prepare_A(N)
|
||||
eigenvalues, eigenvectors = np.linalg.eigh(A)
|
||||
|
||||
#print(*zip(*enumerate(eigenvalues)))
|
||||
plt.scatter(*zip(*enumerate(eigenvalues)))
|
||||
plt.savefig("output/eigenvalues.png")
|
||||
|
||||
plt.clf()
|
||||
|
||||
for n in range(N):
|
||||
plt.scatter(*zip(*enumerate(eigenvectors[n])))
|
||||
plt.savefig("output/eigenvector_{}.png".format(n))
|
||||
plt.clf()
|
||||
|
||||
v = np.zeros(N)
|
||||
v[0] = 1
|
||||
|
||||
|
||||
fig, ax = plt.subplots()
|
||||
max_eigv, = ax.plot(*zip(*enumerate(eigenvectors[0])), "bo")
|
||||
scatter, = ax.plot(*zip(*enumerate(v)), "ro")
|
||||
|
||||
def on_tick(data):
|
||||
global v
|
||||
v = (np.identity(N) + kappa*A).dot(v)
|
||||
scatter.set_data(*zip(*enumerate(v)))
|
||||
|
||||
return scatter
|
||||
|
||||
def run():
|
||||
for i in range(M):
|
||||
yield i
|
||||
|
||||
|
||||
ani = animation.FuncAnimation(fig, on_tick, run, interval=1)
|
||||
ani.save("output/animation.gif", dpi=80, writer='imagemagick')
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user