$A=[a_ij]$を$n$次正方行列とする. $$ A \boldsymbol{x} = \lambda \boldsymbol{x}, \, \boldsymbol{x}\ne 0 $$ をみたす$n$次元列ベクトル$\boldsymbol{x}$が存在するような$\lambda$を$A$の固有値, $\boldsymbol{x}$を$\lambda$に対する(関する,属する)固有ベクトルという.
$n$次多項式 $$ \phi(t) =\left| A- tE \right| =\left| \begin{array}{cccc} a_{11}-t & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22}-t & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn}-t \\ \end{array} \right| $$ を$A$の固有多項式,$\phi(t)=0$を固有方程式という.
import numpy as np
from pprint import pprint
import scipy.linalg as linalg
np.set_printoptions(precision=3, suppress=True)
a = np.array([[3,1], [2,2]])
# a = np.array([[2,1], [1,2]])
l,P = np.linalg.eig(a)
pprint(l)
pprint(P)
v0 = P[:,0]
v1 = P[:,1]
pprint(v0)
pprint(v1)
array([ 4., 1.]) array([[ 0.707, -0.447], [ 0.707, 0.894]]) array([ 0.707, 0.707]) array([-0.447, 0.894])
import matplotlib.pyplot as plt
div = 32
for i in range(0,div):
theta = 2*np.pi/div*i
x = np.sin(theta)
y = np.cos(theta)
# print('%10.5f-%10.5f' % (x,y))
plt.plot(x,y,'o',color='r')
p0 = np.array([x,y])
p1 = np.dot(a,p0)
plt.plot(p1[0],p1[1],'o',color='b')
plt.plot([x, p1[0]], [y,p1[1]], color='k', linestyle='-', linewidth=1)
x_m = 7
y_m = 5
plt.hlines(0, -x_m, x_m, color='k', linestyle='-', linewidth=1)
plt.vlines(0, -y_m, y_m, color='k', linestyle='-', linewidth=1)
t=x_m
plt.plot([-t*v0[0],t*v0[0]], [-t*v0[1],t*v0[1]], color='g', linestyle='-', linewidth=2)
t=y_m
plt.plot([-t*v1[0],t*v1[0]], [-t*v1[1],t*v1[1]], color='g', linestyle='-', linewidth=2)
plt.axes().set_aspect('equal', 'datalim')
plt.show()