$n$次元数ベクトル空間$\boldsymbol{R}^n$から$m$次元数ベクトル空間$\boldsymbol{R}^m$への写像$f$が
が成り立つとき,$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$の(標準的な基底に関する)表現行列という.
が成り立つ.
$g \circ f$を合成写像または積という.
$f$を$\boldsymbol{R}^n$から$\boldsymbol{R}^m$への線形写像とする.
${\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 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}] $
${\rm Im\,}f = \boldsymbol{R}^m$が全射であるとは,
f( \boldsymbol{x} ) = \boldsymbol{y} なる \boldsymbol{x} \in R^n が存在する$
${\rm Ker\,}f = \{\boldsymbol{x}\in \boldsymbol{R}^n; f( \boldsymbol{x} )= \boldsymbol{0} \}$は$\boldsymbol{R}^n$の部分空間であってこれを核(空間)という.
${\rm Ker\,}f=\{\boldsymbol{0}\}$のとき$f$を単射であるという.このとき,
\boldsymbol{x}_1 = \boldsymbol{x}_2$
$ {\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$に関する不変部分空間という.
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)
array([ 4., 0.]) array([[ 0.447, -0.447], [ 0.894, 0.894]]) array([ 0.447, 0.894]) 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 = 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()