#!/usr/bin/env python # coding: utf-8 #
# 線形代数(Linear Algebra IV)固有値 #
#
# cc by Shigeto R. Nishitani, 2018-03-18 #
# # * file: /Users/bob/python/doing_math_with_python/linear_algebra/LA-I.ipynb # # Table of Contents #

1  固有値
1.1  固有値・固有ベクトル
1.2  固有空間
2  一般固有空間
3  
4  python code
# # 固有値 # # ## 固有値・固有ベクトル # # $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$を**固有方程式**という. # * **固有値**は固有方程式の根である. # * 各固有値$\lambda_i$に対する**固有ベクトル**は同次連立一次方程式$(A-\lambda_i E)\boldsymbol{x}=\boldsymbol{0}$の非自明解を求めればよい. # ## 固有空間 # $V=\{\boldsymbol{x}; A\boldsymbol{x} = \lambda\boldsymbol{x} \}$を固有値$\lambda$に対する**固有空間**という. # # * 同次連立一次方程式$(A - \lambda\boldsymbol{x} ) = \boldsymbol{0}\}$の解空間で,$\lambda$に # 対する固有ベクトル全体に零ベクトル$\boldsymbol{0}$を付け加えて得られるベクトル空間である. # # * 幾何的重複度,代数的重複度 # # # 一般固有空間 # * 標数,ケーリーハミルトンの定理 # # * 冪0行列の対角化 # * ジョルダンの標準形 # * 指数行列 # # 紙 # # ![LA-IV](./figs/LinearAlgebra-IV.png) # # python code # In[12]: 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) # In[13]: 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() # In[ ]: