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

1  写像
1.1  線形写像
1.2  像と核
1.3  不変部分空間
2  
3  python code
# # 写像 # # ## 線形写像 # * $n$次元数ベクトル空間$\boldsymbol{R}^n$から$m$次元数ベクトル空間$\boldsymbol{R}^m$への写像$f$が # # 1. $\boldsymbol{R}^n$の任意のベクトル$ \boldsymbol{a}, \boldsymbol{b} $に対し,$f( \boldsymbol{a} + \boldsymbol{b} ) = f( \boldsymbol{a} ) + f( \boldsymbol{b} )$ # 1. $\boldsymbol{R}^n$の任意のベクトル$ \boldsymbol{a}$と任意の実数$\lambda$に対し,$f(\lambda \boldsymbol{a} )=\lambda f( \boldsymbol{a} )$ # # が成り立つとき,$f$を$\boldsymbol{R}^n$から$\boldsymbol{R}^m$への**線形写像**という. # # * 零ベクトルは零ベクトルへ写像される($f(\boldsymbol{0})=\boldsymbol{0}$) # * $f(-\boldsymbol{a})=-\boldsymbol{a}$ # * 零写像や恒等写像も線形写像 # # * **線形写像の表現行列** # $\boldsymbol{e}_1, \boldsymbol{e}_2, \ldots, \boldsymbol{e}_n$を$R^n$の標準的な基底とする. # $$ # f(\boldsymbol{e}_j) = \boldsymbol{a}_j = (\boldsymbol{a}_{1j}, \boldsymbol{a}_{2j},\ldots,\boldsymbol{a}_{mj})\, (j=1,2,\ldots,n) # $$ # のときこれらを列ベクトルみなして,$m \times n$行列 # $$ # A = [f(\boldsymbol{e}_1)\, f(\boldsymbol{e}_2)\, \cdots\, f(\boldsymbol{e}_n)]= # [a_1\, a_2\, \cdots \, a_n]= # \left( # \begin{array}{cccc} # a_{11} & a_{12} & \cdots & a_{1n} \\ # a_{21} & a_{22} & \cdots & a_{2n} \\ # \vdots & \vdots & \ddots & \vdots \\ # a_{m1} & a_{m2} & \cdots & a_{mn} \\ # \end{array} # \right) # $$ # を$f$の**(標準的な基底に関する)表現行列**という. # # * $\boldsymbol{y}=f(\boldsymbol{x})$の時, # $$ # \left( # \begin{array}{c} # y_1 \\ # y_2 \\ # \vdots \\ # y_m # \end{array} # \right) # = A # \left( # \begin{array}{c} # x_1 \\ # x_2 \\ # \vdots \\ # x_n # \end{array} # \right) # $$ # # * $\boldsymbol{R}^n$から$\boldsymbol{R}^m$への写像 # $$ # (x_1,x_2,\ldots,x_n) \longmapsto (y_1,y_2,\ldots,y_m) # $$ # # * $\boldsymbol{x}\in \boldsymbol{R}^n$を列ベクトルとみなせば, # $$ # f( \boldsymbol{x} ) = A \boldsymbol{x} # $$ # が成り立つ. # # * 線形写像の和・実数倍・合成 # $$ # (f+g)(\boldsymbol{x}) = f(\boldsymbol{x}) + g(\boldsymbol{x}) \\ # (\lambda f) \boldsymbol{x} = \lambda f(\boldsymbol{x}) \\ # (g \circ f)(\boldsymbol{x}) = g(f(\boldsymbol{x})) # $$ # $g \circ f$を合成写像または積という. # ## 像と核 # $f$を$\boldsymbol{R}^n$から$\boldsymbol{R}^m$への線形写像とする. # * **像(Im)** # ${\rm Im\,}f = \{f( \boldsymbol{x} ); \boldsymbol{x} \in \boldsymbol{R}^n\}$は$\boldsymbol{R}^m$の部分空間でこれを**像(空間)**という. # $f$の表現行列を$A=[\boldsymbol{a}_1\, \boldsymbol{a}_2\, \cdots\, \boldsymbol{a}_n]$とする時, # * ${\rm Im\,}f =L\{\boldsymbol{a}_1,\boldsymbol{a}_2,\ldots,\boldsymbol{a}_n\}$($\boldsymbol{a}_1,\boldsymbol{a}_2,\ldots,\boldsymbol{a}_n$で生成される部分空間) # * ${\rm dim\,}({\rm Im\,}f) = {\rm rank\,} A = {\rm rank\,}[[\boldsymbol{a}_1\,\boldsymbol{a}_2\,\cdots\,\boldsymbol{a}_n]$ # * $\boldsymbol{y}\in {\rm Im}f \iff # {\rm rank\,}[\boldsymbol{a}_1\,\boldsymbol{a}_2\,\cdots\,\boldsymbol{a}_n]= # {\rm rank\,}[\boldsymbol{a}_1\,\boldsymbol{a}_2\,\cdots\,\boldsymbol{a}_n \boldsymbol{y}] # $ # # * **全射(onto mapping)** # ${\rm Im\,}f = \boldsymbol{R}^m$が全射であるとは, # * $すべての\boldsymbol{y}\in \boldsymbol{R}^m \Longrightarrow # f( \boldsymbol{x} ) = \boldsymbol{y} なる \boldsymbol{x} \in R^n が存在する$ # * $fが全射 \iff {\rm rank\,}A = m$ # * **核(Ker)** # ${\rm Ker\,}f = \{\boldsymbol{x}\in \boldsymbol{R}^n; f( \boldsymbol{x} )= \boldsymbol{0} \}$は$\boldsymbol{R}^n$の部分空間であってこれを**核(空間)**という. # * ${\rm Ker\,}f=\{\boldsymbol{x};A \boldsymbol{x} = \boldsymbol{0} \}$:同次連立一次方程式$A \boldsymbol{x} = \boldsymbol{0}$の解空間 # * ${\rm dim\,}({\rm Ker\,} f)=n -{\rm rank\,} A$ # * **単射(one to one mapping)** # ${\rm Ker\,}f=\{\boldsymbol{0}\}$のとき$f$を**単射**であるという.このとき, # * $f(\boldsymbol{x}_1)=f(\boldsymbol{x}_2) \Longrightarrow # \boldsymbol{x}_1 = \boldsymbol{x}_2$ # * $fが単射 \iff {\rm rank\,} A = n$ # * **次元定理** # $ {\rm dim\,}({\rm Im\,}f)+{\rm dim\,}({\rm Ker\,}f) = n$ # ## 不変部分空間 # # $f$を$\boldsymbol{R}^n$上の線形変換とする.$\boldsymbol{R}^n$の部分空間$V$が # $$ # f(V) \subset V # $$ # をみたすとき,$V$を$f$に関する**不変部分空間**という. # # * 例 # * 核${\rm Ker\,}f$: $\boldsymbol{x} \in {\rm Ker\,}f \Rightarrow f(\boldsymbol{x})=\boldsymbol{0} \in {\rm Ker\,} fよってf({\rm Ker\,} f)\subset {\rm Ker\,}f$ # * 像${\rm Im\,}f$: $\boldsymbol{x} \in {\rm Im\,}f \Rightarrow f(\boldsymbol{x}) \in {\rm Im\,} fよってf({\rm Im\,} f)\subset {\rm Im\,}f$ # * 同次連立一次方程式の解空間: $\{\boldsymbol{x}\in \boldsymbol{R}^m; A\boldsymbol{x}=\boldsymbol{0}\}(= {\rm Ker\,} f)$ # * 固有値$\lambda$に対する固有空間: $\{\boldsymbol{x}\in\boldsymbol{R}^n;(A-\lambda E)\boldsymbol{x}=\boldsymbol{0}\}$ # * 固有値$\lambda$に対する一般固有空間($k$は指標): $\{\boldsymbol{x}\in\boldsymbol{R}^n;(A-\lambda E)^k\boldsymbol{x}=\boldsymbol{0}\}$ # # 紙 # # ![LA-V](./figs/LinearAlgebra-V.png) # # python code # In[1]: import numpy as np from pprint import pprint import scipy.linalg as linalg np.set_printoptions(precision=3, suppress=True) a = np.array([[2,1], [4,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[5]: 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 = 6 y_m = 6 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[ ]: