■n次元楕円をm次元空間に投影する(その4)

 コラム(その1)では,n次元楕円をm次元空間に正射影したり,n次元楕円のm次元空間での切り口を求めてみました.ところで,原点を中心とするn次元楕円
  x’Hx=1
と原点を通る任意のn次元超平面
  a1x1+a2x2+・・・+anxn=0
の交わりは,高々(n−1)次元楕円になりますから,正射影も切り口も,所与のn次元楕円と特別なn次元超平面との交わりをm次元空間に投影したものと考えることができます.
 
 今回のテーマは,n次元楕円のm次元空間への投影をもっと一般化することです.それに関連して,ムーア・ペンローズ型一般逆行列についての解説も加えたいと思います.
 
===================================
 
【1】超平面と法線ベクトル
 
 aを行ベクトル,xを列ベクトルとして
  a=(a1,・・・,an)
  x’=(x1,・・・,xn)
また,実数をcとおくと,n次元ユークリッド空間の超平面は,
  ax’=c
で表すことができます.原点を通るときc=0で,その場合,原点を中心とするn次元楕円x’Hx=1と超平面ax’=0は必ず交わります.
 
 ベクトルaを超平面の法線ベクトルと呼びます.法線ベクトルはスカラー倍を除いて一意に定まります.aをその長さ‖a‖で割ったベクトルa/‖a‖を考えると,これは長さ1の単位法線ベクトルとなります.
 
 また,aが単位法線ベクトル,すなわち,
  a1^2+a2^2+・・・+an^2=1
が成り立つとき,cは原点から超平面へ引いた垂線の(符号のついた)長さとなります.
 
 n=1なら方程式はax=bですから,超平面は点にほかなりません.n=2ならax+by=cとなり,超平面は直線,n=3ならax+by+cz=dですから,超平面は平面を表します.3次元空間内の超平面が普通の平面だし,2次元空間内の超平面は直線ですから,n次元空間の場合,n−1次元の線形多様体を超平面というのです.
 
 ここで,
  X1’=[x1,x2,・・・,xm]
  X2’=[xm+1,xm+2,・・・,xn]
  α1=[a1,a2,・・・,am]
  α2=[am+1,am+2,・・・,an]
とおくことにします.こうすれば,
  X’=[x1,x2,・・・,xn]=[X1’,X2’]
  α=[a1,a2,・・・,an]=[α1,α2]
より,原点を通る超平面の方程式は
  α1X1+α2X2=0
と書くことができます.
 
===================================
 
 まず最初に,自明な問題から検討してみることにしましょう.n次元楕円のm次元空間における切り口は,
  X2=0
で表されます.右辺の0は数字の0ではなく,ゼロベクトル(全成分が0のベクトル)の意味です.したがって,この場合の超平面は
  α1X1=0
で表されます.
 
 次に,n次元楕円の切り口がm次元空間への正射影の輪郭となる超平面を定めてみることにします.(その1)同様,行列Hを4つの部分行列A,B,C,Dに分解すると,
  H=[A,B]
    [C,D]
また,交線上では
  ∂f/∂xi=0  (i=m+1〜n)
が成り立ちますから,これよりX1,X2の値域は
  CX1+DX2=0
を満たす必要があります.
 
 したがって,超平面
  α1X1+α2X2=0 (スカラーの0)
  CX1+DX2=0  (ゼロベクトル)
を満たすように,α1,α2を決めてやればよいことになります.
 
 とはいっても,
  D~CX1+X2=0  (ゼロベクトル)
等は超平面になりません.そこで,X2=−D~CX1を超平面:α1X1+α2X2=0に代入すると,超平面は
  (α1−α2D~C)X1=0
となることがわかります.
 
===================================
 
【2】一般逆行列
 
 逆行列をもつ行列を正則行列といいます.正方行列Aが正則となるためには|A|≠0でなければなりません.逆行列は,数aでいえば逆数a^(-1)にあたり,逆数をもつためにはa≠0なる条件が必要というわけです.
 
 また,1行または1列からなる行列がベクトルであり,1行1列の最も簡単な行列がスカラーです.ベクトルやスカラーを含んで,正方行列ではあるが正則でない場合,または,正方行列でない場合にも逆行列の考えを一般化したものが一般逆行列です.
 
 ここでは,一般逆行列をA~と表すことにしますが,一般逆行列は,
  AA~A=A   (~)は一般逆行列
なる関係を満たす行列と定義することもできます.Aがm1×m2行列なら,A~はm2×m1行列となります.
 
 一般逆行列を用いると理論全体がより高い視野から展望できるようになりますし,また,たとえば非正方行列Cの一般逆行列はC~となりますから,あたかも逆数のように取り扱えるので,実用面でも非常に便利になります.
 
 そこで,超平面:α1X1+α2X2=0において,行ベクトルα2の一般逆行列をα2~として得られる
  X2=−α2~α1X1
を用いて,n次元楕円x’Hx=1から変数xm+1〜xnを消去してみることにしましょう.
 
  HX=[A,B][X1]=[AX1+BX2]=[(A−Bα2~α1)X1]
     [C,D][X2] [CX1+DX2] [(C−Dα2~α1)X1]
 
  X’=[X1’,X2’]=[X1’,−X1’(α2~α1)’]
 
  X’HX=[X1’,−X1’(α2~α1)’][(A−Bα2~α1)X1]
                       [(C−Dα2~α1)X1]
 =X1’[A−Bα2~α1−(α2~α1)’C+(α2~α1)’Dα2~α1]X1
 =1
なるm次元楕円が得られることがわかります.
 
 Hは対称行列であって,
  C=B’
 (α2~α1)’C=(α2~α1)’B’=(Bα2~α1)’
となるのですが,
  X1’[A−Bα2~α1−(α2~α1)’C+(α2~α1)’Dα2~α1]X1=1
のままにしておきます.無理矢理整理するよりもこの方が対称性の高い形でしょう.
 
 α1X1=0(X2=0)の場合,これは明らかに切り口
  x’Hx=[X1’,0 ][A,B][X1]=X1’AX1=1
              [C,D][0 ]
の場合を含んでいますし,(α1−α2D~C)X1=0(X2=−D~CX1)の場合は,
  Hx=[A,B][X1]=[AX1+BX2]=[AX1+BX2]
     [C,D][X2] [CX1+DX2] [  0   ]
 
  x’Hx=[X1’,X2’][AX1+BX2]
               [  0   ]
 =X1’AX1+X1’BX2
 =X1’AX1−X1’BD~CX1=1
より,n次元楕円のm次元空間への正射影は,
  x’Hx=X1’[A−BD~C]X1=1
で表されることになります.
 
 以上により,超平面
  α1X1+α2X2=0
は,特別な場合として,X2=0(切り口)やCX1+DX2=0(正射影)を含んでいることがわかりました.
 
 その際,行ベクトルα1,α2は一意には定まりませんが,α2~α1=0(ゼロ行列)ならば
  A−Bα2~α1−(α2~α1)’C+(α2~α1)’Dα2~α1=A
α2~α1=D~Cならば
  A−Bα2~α1−(α2~α1)’C+(α2~α1)’Dα2~α1=A−BD~C
になるというわけです.
 
 なお,一般に行列の間に積の交換法則AB=BAは成り立たちませんし,
  AB=0→A=0またはB=0
も成り立ちません.したがって,α2~α1=0→α1=0のつもりで計算すれば間違った答えを得ることになります.
 
 α1=0→α2~α1=0は成り立ちますから,α1=0,すなわち,
  a1=0,a2=0,・・・,am=0
のときを考えると,このとき,切り口となる超平面は,投影先のm次元空間に直交します.しかし,am+1,am+2,・・・,anは任意の値をとることができますから,行ベクトルα1,α2は一意には定まらないのです.
 
===================================
 
【3】ムーア・ペンローズ型一般逆行列
 
 一般逆行列にはいくつかの型(反射型,ノルム最小型,最小2乗型)があります.たとえば,ノルム最小型の一般逆行列とは,
  A~=A’(AA’)^(-1)
で定義されるのですが,
  α2~=α2’(α2α2’)^(-1)
において,ここで考えているα2は行ベクトルですから,α2α2’はスカラーとなり,
  α2α2’=‖α2‖^2
したがって,
  α2~α1=α2’α1/‖α2‖^2
と表すことができます.
 
 ところが,条件
  AA~A=A   (~)は一般逆行列
だけでは,与えられた行列に対して,一般逆行列は普通一意には定められないのです.そこで,これらの型の4個の条件
  AA~A=A      (一般逆行列)
  A~AA~=A~     (反射型)
  AA~=(AA~)’  (最小2乗型)
  A~A=(A~A)’  (ノルム最小型)
をすべて満たす行列を考えることにします.
 
 そのような逆行列をムーア・ペンローズ型逆行列と呼ぶのですが,任意の行列Aのムーア・ペンローズ型逆行列は
  A~=A’A(A’AA’A)^(-1)A’
あるいは
  A~=A’(AA’)^(-1)A(A’A)^(-1)A’
により一意に定まります.
 
 これらは同じムーア・ペンローズ型逆行列の異なった表現に他なりません.実際の計算に際してともに有用な式となるのですが,重要なことはA~はユニークにただ1個存在するということです.もちろん,ムーア・ペンローズ型逆行列A~は,非特異行列に対して,通常の逆行列A^(-1)に等しくなります.
 
 また,非正則行列
  A=[1,1]
    [1,1]
に誤差の入った行列
  A=[1,1  ]≒[1,1]
    [1,1+ε] [1,1]
の逆行列は,
  A^(-1)=[1+1/ε,−1/ε]
       [−1/ε , 1/ε]
ですが,ε→0にするとこれらの要素は発散し,特異行列になります.
 
 このとき,ムーア・ペンローズ型逆行列は,A^(-1)ではなく,ε=0において不連続に
  A~ =[1/4,1/4]=1/4A
     [1/4,1/4]
になります.
 
===================================
 
【4】プログラム
 
 以下に,ムーア・ペンローズ型逆行列を
  A~=A’A(A’AA’A)^(-1)A’
に従って計算するプログラムを掲げます(*exact).
 
 この計算方法ではAの要素aijが大きくなると誤差が増すという欠点があり,計算誤差を考えると
  A~=A’(AA’)^(-1)A(A’A)^(-1)A’
のほうが有利です(*exact2).
 
 また,ムーア・ペンローズ型逆行列は
  A~=(A’A+δI)^(-1)A’
により,近似的に(簡単に)求めることができます.δをAの要素aijに対して相対的に小さくするほど精度は良くなります.この方法は,多くの有効数字を必要としない計算に便利です(*inexact).
 
 なお,非正則行列
  A=[1,1]
    [1,1]
のムーア・ペンローズ型逆行列は,いずれを用いても
  A~ =[1/4,1/4]=1/4A
     [1/4,1/4]
と計算されました.
 
===================================
 
5000 '
5010 ' *** Moore-Penrose inverse matrix ***
5020 '
5030 SCREEN 3,0:CONSOLE ,,0,1
5040 CLS 3:WIDTH 80,25:COLOR 6
5050 '
5060 RESTORE *D
5070 READ RN,CN
5080 '
5090 IF RN>CN THEN LARGE=RN ELSE LARGE=CN
5100 DIM XX1(LARGE,LARGE),YY1(LARGE,LARGE)
5110 DIM AZ(LARGE,LARGE),BZ(LARGE,LARGE)
5120 DIM H1(LARGE,LARGE),H2(LARGE,LARGE)
5130 DIM H3(LARGE,LARGE)
5140 '
5150 FOR I=1 TO RN
5160  FOR J=1 TO CN
5170   READ XX1(I,J)
5180  NEXT J
5190 NEXT I
5200 '
5210 GOSUB *INEXACT:GOSUB *PRINT.RTN
5220 GOSUB *EXACT :GOSUB *PRINT.RTN
5230 GOSUB *EXACT2 :GOSUB *PRINT.RTN
5240 END
5250 '
5260 ' ** XT*X **
5270 '
5280 *INEXACT:
5290 FOR I=1 TO CN
5300  FOR J=I TO CN
5310   S=0
5320   FOR K=1 TO RN
5330    S=S+XX1(K,I)*XX1(K,J)
5340   NEXT K
5350   AZ(I,J)=S:AZ(J,I)=S
5360  NEXT J
5370 NEXT I
5380 NZ=CN
5390 '
5400 EPSL=.00001
5410 CMAX=0
5420 FOR I=1 TO NZ
5430  FOR J=1 TO NZ
5440   IF CMAX<ABS(AZ(I,J)) THEN CMAX=ABS(AZ(I,J))
5450  NEXT J
5460 NEXT I
5470 EPS=CMAX*EPSL
5480 '
5490 FOR I= 1 TO NZ
5500  AZ(I,I)=AZ(I,I)+EPS
5510 NEXT I
5520 '
5530 ' ** (XT*X)^(-1) **
5540 '
5550 NZ=CN:GOSUB *INVERSE
5560 '
5570 ' ** (XT*X)^(-1)*XT **
5580 '
5590 FOR I=1 TO CN
5600  FOR J=1 TO RN
5610   S=0
5620   FOR K=1 TO CN
5630    S=S+BZ(I,K)*XX1(J,K)
5640   NEXT K
5650   YY1(I,J)=S
5660  NEXT J
5670 NEXT I
5680 RETURN
5690 '
5700 ' ** XT*X **
5710 '
5720 *EXACT:
5730 FOR I=1 TO CN
5740  FOR J=I TO CN
5750   S=0
5760   FOR K=1 TO RN
5770    S=S+XX1(K,I)*XX1(K,J)
5780   NEXT K
5790   H1(I,J)=S:H1(J,I)=S
5800  NEXT J
5810 NEXT I
5820 '
5830 ' ** XT*X*XT **
5840 '
5850 FOR I=1 TO CN
5860  FOR J=1 TO RN
5870   S=0
5880   FOR K=1 TO CN
5890    S=S+H1(I,K)*XX1(J,K)
5900   NEXT K
5910   H2(I,J)=S
5920  NEXT J
5930 NEXT I
5940 '
5950 ' ** XT*X*XT*X **
5960 '
5970 FOR I=1 TO CN
5980  FOR J=1 TO CN
5990   S=0
6000   FOR K=1 TO RN
6010    S=S+H2(I,K)*XX1(K,J)
6020   NEXT K
6030   AZ(I,J)=S
6040  NEXT J
6050 NEXT I
6060 '
6070 ' ** (XT*X*XT*X)^(-1) **
6080 '
6090 NZ=CN:GOSUB *INVERSE
6100 '
6110 ' ** XT*X*(XT*X*XT*X)^(-1) **
6120 '
6130 FOR I=1 TO CN
6140  FOR J=1 TO CN
6150   S=0
6160   FOR K=1 TO CN
6170    S=S+H1(I,K)*BZ(K,J)
6180   NEXT K
6190   H3(I,J)=S
6200  NEXT J
6210 NEXT I
6220 '
6230 ' ** XT*X*(XT*X*XT*X)^(-1)*XT **
6240 '
6250 FOR I=1 TO CN
6260  FOR J=1 TO RN
6270   S=0
6280   FOR K=1 TO CN
6290    S=S+H3(I,K)*XX1(J,K)
6300   NEXT K
6310   YY1(I,J)=S
6320  NEXT J
6330 NEXT I
6340 RETURN
6350 '
6360 ' ** XT*X **
6370 '
6380 *EXACT2:
6390 FOR I=1 TO CN
6400  FOR J=I TO CN
6410   S=0
6420   FOR K=1 TO RN
6430    S=S+XX1(K,I)*XX1(K,J)
6440   NEXT K
6450   AZ(I,J)=S:AZ(J,I)=S
6460  NEXT J
6470 NEXT I
6480 '
6490 ' ** (XT*X)^(-1) **
6500 '
6510 NZ=CN:GOSUB *INVERSE
6520 '
6530 ' ** X*(XT*X)^(-1) **
6540 '
6550 FOR I=1 TO RN
6560  FOR J=1 TO CN
6570   S=0
6580   FOR K=1 TO CN
6590    S=S+XX1(I,K)*BZ(K,J)
6600   NEXT K
6610   H1(I,J)=S
6620  NEXT J
6630 NEXT I
6640 '
6650 ' ** X*XT **
6660 '
6670 FOR I=1 TO RN
6680  FOR J=I TO RN
6690   S=0
6700   FOR K=1 TO CN
6710    S=S+XX1(I,K)*XX1(J,K)
6720   NEXT K
6730   AZ(I,J)=S:AZ(J,I)=S
6740  NEXT J
6750 NEXT I
6760 '
6770 ' ** (X*XT)^(-1) **
6780 '
6790 NZ=RN:GOSUB *INVERSE
6800 '
6810 ' ** XT*(X*XT)^(-1) **
6820 '
6830 FOR I=1 TO CN
6840  FOR J=1 TO RN
6850   S=0
6860   FOR K=1 TO RN
6870    S=S+XX1(K,I)*BZ(K,J)
6880   NEXT K
6890   H2(I,J)=S
6900  NEXT J
6910 NEXT I
6920 '
6930 ' ** XT*(X*XT)^(-1)*X*(XT*X)^(-1) **
6940 '
6950 FOR I=1 TO CN
6960  FOR J=1 TO CN
6970   S=0
6980   FOR K=1 TO RN
6990    S=S+H2(I,K)*H1(K,J)
7000   NEXT K
7010   H3(I,J)=S
7020  NEXT J
7030 NEXT I
7040 '
7050 ' ** XT*(X*XT)^(-1)*X*(XT*X)^(-1)*XT **
7060 '
7070 FOR I=1 TO CN
7080  FOR J=1 TO RN
7090   S=0
7100   FOR K=1 TO CN
7110    S=S+H3(I,K)*XX1(J,K)
7120   NEXT K
7130   YY1(I,J)=S
7140  NEXT J
7150 NEXT I
7160 RETURN
7170 '
7180 *PRINT.RTN:
7190 FOR I=1 TO CN
7200  FOR J=1 TO RN
7210   PRINT YY1(I,J),
7220  NEXT J
7230  PRINT
7240 NEXT I
7250 RETURN
7260 '
7270 ' ** INVERSE MATRIX ( AZ==>BZ ) **
7280 '
7290 *INVERSE:' [GAUSS-JORDAN]
7300 FOR I=1 TO NZ
7310  FOR J=1 TO NZ:BZ(I,J)=0:NEXT J
7320  BZ(I,I)=1
7330 NEXT I
7340 FOR I=1 TO NZ
7350  IZ=I
7360  IF AZ(I,I)=0 THEN 7370 ELSE 7430
7370  IZ=IZ+1:IF IZ>NZ THEN RZ=1:RETURN
7380  IF AZ(IZ,I)=0 THEN 7370
7390  FOR J=1 TO NZ
7400   SWAP AZ(I,J),AZ(IZ,J)
7410   SWAP BZ(I,J),BZ(IZ,J)
7420  NEXT J
7430  AII=AZ(I,I)
7440  FOR J=1 TO NZ
7450   AZ(I,J)=AZ(I,J)/AII
7460   BZ(I,J)=BZ(I,J)/AII
7470  NEXT J
7480  FOR K=1 TO NZ
7490   AKI=AZ(K,I):IF K=I THEN 7540
7500   FOR J=1 TO NZ
7510    AZ(K,J)=AZ(K,J)-AKI*AZ(I,J)
7520    BZ(K,J)=BZ(K,J)-AKI*BZ(I,J)
7530   NEXT J
7540  NEXT K
7550 NEXT I
7560 RZ=0
7570 RETURN
7580 '
7590 '*D:
7600 DATA 2,2
7610 DATA 1,1
7620 DATA 2,2
7630 '
7640 '*D:
7650 DATA 2,2
7660 DATA 1,1
7670 DATA 1,1
7680 '
7690 *D:
7700 DATA 2,3
7710 DATA 2,1,3
7720 DATA 4,2,6
 
===================================
 
【補】分割行列の逆行列についての補足
 
  H=[A,B]   H~ =[O,P]
    [C,D]      [Q,R]
 
 ここではHは対称行列ですから,C=B’.このときH~も対称行列となり,Q=P’ですから,
  D~C[A−BD~C]~=(A~B[D−CA~B]~)’
が成り立ちます.
 
 また,対称行列において,
  (A+BDC)~=A~−A~B(CA~B+D~)CA~
上記の
  O=[A−BD~C]~,P=−A~B[D−CA~B]~
  Q=−D~C[A−BD~C]~,R=[D−CA~B]~
  O=A~+A~B[D−CA~B]~CA~
  P=−[A−BD~C]~BD~
  Q=−[D−CA~B]~CA~
  R=D~+D~C[A−BD~C]~BD~
とも書くことができます.これらの式は次数の高い逆行列の計算を,より次数の低い行列の逆行列から求める際に有用となります.
 
 なお,分割型正方行列の一般逆行列も同様の形で与えられます.
 
===================================