練習問題メモ 24(対称行列の対角化)

Contents

練習問題メモ 24(対称行列の対角化)#

問1#

次の対称行列 A を直交行列によって対角化せよ。

  1. A=(3226)

  2. A=(123246369) ただし、 A の固有値 λλ=0 (重解) 14 で、それぞれの

固有値に対する固有空間が

W(0)={c1(210)+c2(301)|c1,c2R}W(14)={c(123)|cR}

であることを用いてよい。

  1. A=(3226)

まず固有値を求める

|AλE|=(3λ)(6λ)22=189λ+λ24=149λ+λ2=(λ2)(λ7)

よってλ=2,7

続いて、固有ベクトルを求める。

λ=2の場合、

(AλE)x=0(3λ226λ)(x1x2)=(00){x1+2x2=02x1+4x2=0

よってx1=2x2より、cRを用いて

(x1x2)=c(21)

と表すことができる。固有空間は

V(2)={c(21)|cR}

となる。

λ=7の場合、

(3λ226λ)(x1x2)=(00){4x1+2x2=02x1x2=0

よって2x1=x2より、cRを用いて

(x1x2)=c(12)

と表すことができる。固有空間は

V(7)={c(12)|cR}

となる。

固有値λ=2,7それぞれに属する固有ベクトルx1,x2

x1=(21),x2=(12)

とおく。x1,x2にシュミットの直交化を行いp1,p2とすると、

p1=x1x1=15(21)=(2515)

であり

c=x2,p1=125+215=0

より

p2=x2cp1x2cp1=x2x2=15(12)=(1525)

P=(p1,p2)とおいた行列

P=(25151525)

によりAは対角化できる

P1AP=(25151525)(3226)(25151525)=(452575145)(25151525)=(1054+4514+145355)=(2007)
個別に直交化する例

(これがいいのかはわからんが、対角化はできる)

x1,x2は1次独立なので個別にシュミットの直交化をしてp1,p2とおくと

p1=x1x1=15(21)=(2515)p2=x2x2=15(12)=(1525)

P=(p1,p2)とおいた行列

P=(25151525)

によりAは対角化できる

P1AP=(2007)
import sympy as sp

x1 = sp.Matrix([-2,1])
x2 = sp.Matrix([1,2])
A = sp.Matrix([
    [3, 2],
    [2, 6],
])

p1 = x1 / x1.norm()
c = x2.T @ p1
v2 = (x2 - c[0]*p1)
p2 = v2 / v2.norm()
P = sp.Matrix([p1, p2]).reshape(2, 2).T
P
[2555555255]
P.inv() @ A @ P
[2007]
P = sp.Matrix(sp.GramSchmidt([x1, x2])).reshape(2,2).T
P
[2112]
P.inv() @ A @ P
[2007]
  1. A=(123246369) ただし、 A の固有値 λλ=0 (重解) 14 で、それぞれの

固有値に対する固有空間が

W(0)={c1(210)+c2(301)|c1,c2R}W(14)={c(123)|cR}

であることを用いてよい。

固有ベクトルとして

x1=(210),x2=(301),x3=(123)

を用いる。

これらを直交化したベクトルをp1,p2,p3とする。シュミットの直交化で求めていく。

(1) p1を求める

x1=|2|2+|1|2=5なので、

p1=x1x1=15(210)=(25150)
import sympy as sp

x1 = sp.Matrix([-2,1,0])
x2 = sp.Matrix([-3,0,1])
x3 = sp.Matrix([1,2,3])

p1 = x1 / x1.norm()
p1
[255550]

(2) p2を求める

c=x2,p1=325=65
x2cp1=(301)65(25150)=(301)(125650)=(155125651)=(35651)
x2cp1=|35|2+|65|2+12=925+3625+2525=7025=705
p2=x2cp1x2cp1=570(35651)=(370670570)
c = (x2.T @ p1)[0]
p2 = (x2 - c * p1) / (x2 - c * p1).norm()
p2
[37070370357014]

(3) p3を求める

c1=x3,p1=125+215+30=0c2=x3,p2=1370+2670+3570=312+1570=0x3=|1|2+|2|2+|3|2=14

なので

p3=x3(c1p1+c2p2)x3(c1p1+c2p2)=x3x3=114(123)

P=(p1,p2,p3)とすると、このP

P=(25370114156702140570314)

によりAは対角化できる

P1AP=[0000000014]
p3 = x3 / x3.norm()
p3
[141414731414]
P = sp.Matrix([p1, p2, p3]).reshape(3, 3).T
P
[25537070141455370351470701431414]
P.inv()
[25555037070370357014141414731414]
A = sp.Matrix([
    [1,2,3],
    [2,4,6],
    [3,6,9]
])

P.inv() @ A @ P
[0000000014]
P = sp.Matrix(sp.GramSchmidt([x1,x2,x3], orthonormal=True)).reshape(3,3).T
P
[25537070141455370351470701431414]
簡易版

相異なる固有値に属する固有ベクトルたちは1次独立であり、別々に直交化できるため、ノルム

x1=|2|2+|1|2=5x2=|3|2+|1|2=10x3=|1|2+|2|2+|3|2=14

を用いて

p1=x1x1=15(210)=(25150)p2=x2x2=110(301)p3=x3x3=114(123)

とおく。これらを列ベクトルにもつ行列をP=(p1,p2,p3)とおく。

P=(253141141502140110314)

APで対角化可能である。

import sympy as sp

a1 = sp.Matrix([-2,1,0])
a2 = sp.Matrix([-3,0,1])
a3 = sp.Matrix([1,2,3])

p1 = a1 / a1.norm()
p2 = a2 / a2.norm()
p3 = a3 / a3.norm()
P = sp.Matrix([p1, p2, p3]).reshape(3, 3).T
P
[2553101014145501470101031414]
P.inv()
[5755735731014310751014141414731414]
A = sp.Matrix([
    [1,2,3],
    [2,4,6],
    [3,6,9]
])

P.inv() @ A @ P
[0000000014]

Matrices (linear algebra) - SymPy 1.13.3 documentation

Gram–Schmidt process - Wikipedia

import sympy as sp

a1 = sp.Matrix([-2,1,0])
a2 = sp.Matrix([-3,0,1])
a3 = sp.Matrix([1,2,3])

P = sp.Matrix(sp.GramSchmidt([a1,a2,a3])).reshape(3,3).T
P
[23511652013]
P.inv() @ A @ P
[0000000014]

補足:対称行列の対角化の応用例

実数を係数とする x,y の 2 次方程式

ax2+2bxy+cy2+2dx+2ey+f=0

は2次曲線とも呼ばれ、

(xy)(abbc)(xy)+2(de)(xy)+f=0

と表される。ここで、行列 (abbc) は対称行列であることに注意しよう。対称行列の直交行列による対角化を用いると、上記のような方程式を標準形という、よりわかりやすい式で表すことができる。例えば、楕円、双曲線、放物線の標準形 はそれぞれ

x2a2+y2b2=1,x2a2y2b2=1,y=ax2

で表される。ただし、 a,b は 0 ではない定数である。

問2#

直交行列の固有値は絶対値 1 の複素数であることを示せ。

An次の直交行列、xをゼロでないn次のベクトルとする。

Ax=λx

のノルムを取ると

Ax=λxAx=|λ|x(cx=|c|x)x=|λ|x(Ax=x)

よって|λ|=1となる。

固有値は一般には複素数となるため、直交行列の固有値は絶対値1の複素数である