数学の話

筆者はド文系で高校数学も怪しいところがあるので、間違ったことを書いているかもしれない。


微分方程式って何?

学校で最後に数学を習って以来20年くらいになるが、ようやく、微分方程式を立てて解く意義みたいなものがわかった気がする(やっぱり「ちゃんと理解している人に教えてもらう」ってのは大切なんだなぁ:筆者が急に賢くなったのでなければ、きっとそういうことなんだと思う)。

微分方程式というのはようするに、

f'(x)=g(x)
これのことである(もちろん、時間関数であればf'(t)=g(t)などとしてもよい)。微分(導関数)の方程式だから微分方程式。未知の関数f(x)について、その導関数がxの関数であれば、両辺を積分して
f(x)=∫g(x)dx
としてもいいよねというのが話の大筋(もちろん、素朴に積分するだけで解けるものばかりではない:変数分離形であれば積分するだけでOKなので、定数変化法などのテクニックを使いこの形に落とし込むことを考えることが多い)。

たとえば今、水道の蛇口から毎秒xリットルの水を出し漏斗で漉すという作業を考える。漏斗から排出される水の量は漏斗の中の水の量に比例し、水量1リットルに対して0.1リットル毎秒の排水がある(水量をyリットルとするとy/10リットル排水される)としよう。流入出が平衡に達したとき(流入量と流出量が等しくなったとき)の漏斗の中の水量は、初等的にもすぐ求められる。

流入量=x=y/10=流出量
y=10x
すなわち、流入量が一定であれば、秒あたりの流入量の10倍が漏斗の中に溜まったところで平衡に達する。

しかしよく考えてみると、水量は「流入量−流出量」で変化しているのだから、その変化の割合(時間微分)y'について

y'=x-y/10
という式が立てられる。ただしここではy'=dy/dtであってy'=dy/dxでない、つまりxが定数扱いされている(2変数の式も立てられるが、常微分でなく偏微分になってしまいとても大変である:解ける形に誘導して解くというコンセプトが共通に使えるものもあり、両辺に同じ掛け算(積分因子)をしてやって完全微分形という「解ける形」に落とし込むことがある)。

ともあれ、y=10xでないとき、

dy/dt=x-y/10
1/(x-y/10)(dy/dt)=1
∫dy/(x-y/10)=∫dt
とかなんとかやって(計算があっているかどうか、筆者はまったくわかっていない)、最終的にy=f(t)の形(yをtの関数=時間関数として表現する)を得る。すんなり収束する式の場合はたいてい、aを収束値、bを収束速度の定数として
y=a(1-e^-bt)
といった形になる。これはようするに、タイムラグがある系だとかフィードバックがある系の時間応答を記述できるということである。

ということで、1つの数式も解くことなく(式は立てたけど解いてない)、置換積分の置の字にも触れることなく、微分方程式の紹介が終了してしまった。まあなんとなくわかったような気にはなれたからいいや。


行列って何?

厳密な話はさておき、ぶっちゃけた定義としては「便利な計算方法の1つ」と考えてよい(たとえば2次方程式の解法として「たすきがけ」という手法を用いることがあるが、計算が便利になるだけで「たすき」の比喩自体には意味がないのと同じ)。行列というのがどういう概念であるのか、真面目に考え出すと幾何学や代数学をモリモリ持ち出さなければならないので、少なくとも筆者の手には負えない。

HTMLで記述する都合上、以下では行列をテーブル(TABLEタグ)で表記する。たとえば、2次単位行列は
10
01
とする。

和と差

行列が2つあって、両方の行数と列数が一致する場合、和と差を定義できる。たとえば行列A(3行2列)が
a11a12
a21a22
a31a32
行列B(3行2列)が
b11b12
b21b22
b31b32
であるとき、和Cと差Dも行列となり、Cは
a11+b11a12+b12
a21+b21a22+b22
a31+b31a32+b32
Dは
a11-b11a12-b12
a21-b21a22-b22
a31-b31a32-b32
となる。ようするに、同じ位置にある要素同士で加減算をしているわけである。

行列が2つあって、片方の列数ともう片方の行数が一致する場合、積(アーサーケイリーの行列積)を定義できる。たとえば行列A(2列)が
a11a12
a21a22
a31a32
行列B(2行)が
b11b12b13
b21b22b23
であるとき、行列積Cも行列となり、i行j列の要素が「Aのi行とBのj列の要素を順に掛け算して足したもの」になる。すなわちCは
a11*b11+a12*b21a11*b12+a12*b22a11*b13+a12*b23
a21*b11+a22*b21a21*b12+a22*b22a21*b13+a22*b23
a31*b11+a32*b21a31*b12+a32*b22a31*b13+a32*b23
となる。Cの行数はAと一致し、列数はBと一致する。

これは一見複雑なようだが、ようするに内積の計算と同じで、たとえばCの3行2列の要素はa31*b12+a32*b22だが、これはAの3行目(a31 , a32)とBの2列目(b12 , b22)の内積でしかない。つまり、行列積を求める演算は内積を繰り返し求める演算と同じである。

単位行列と逆行列と転置行列

除算は(普通)定義しないのだが、正方行列(行数と列数が同じ行列)においては単位行列を定義する。単位行列とは、1行1列、2行2列、3行3列・・・n行n列の要素(行列を正方形に見立てると対角線が通る場所なので、対角要素とも呼ばれる)が1で、それ以外の要素が0の正方行列である。たとえば4次の単位行列Eは、
1000
0100
0010
0001
になる。どのような4行または4列の行列と積を取っても、元の数列と行列積の数列が一致する。つまり、任意の4列行列Xに対して常にXE=Xであり、任意の4行行列Yに対して常にEY=Yである(任意の4次正方行列Zに対しては、常にZE=EZ=Z)。

また、行列Xに対してXY=Eとなるような行列Yについて、行列Xの逆行列であると表現し、Y=X-1と書く。このときXもYの逆行列であり、YX=Eである。

さらに、行列A(i,j)に対して、行列AT(j,i)を転置行列と呼ぶ。ようするに、行と列を入れ替えた行列(Aのi行j列の要素と、行列ATのj行i列の要素が一致する)のことで、Tはtransposed matrixの頭文字。



ベクトルは1行または1列の行列と見る

行行列と見ても列行列と見てもよいが、演算上は列行列(縦ベクトル)と見た方が便宜がよい。筆者が高校で習った数学はここが舌足らずだった。

たとえばベクトルX(a , b)とベクトルY(c , d)の和を行列演算で求めたい場合、
a
b
c
d
の和と見て計算し、
a+c
b+d
という解を得る。すなわちX+Y=(a+c , b+d)である。ここまでは直感的に納得できよう。

一方内積を求める場合は、
ab
c
d
の積と見て、
a*c+b*d
という解を得る。列行列として定義したはずのベクトルが行行列に変わっているが、これはたまたまではなく「行列Xと行列Yの内積はXTY」という演算法則が先にあってこのような処理をしているのである。ベクトルを行行列(横ベクトル)で扱うと、ここの処理が面倒なことになる。

もしここで「ベクトル」と「列行列」を同一視すると、「大きさと向きを持った量」という幾何ベクトルの定義が意味を失い、「複数次の可算な要素を一定順序に並べたもの」という非常に広義な定義が取って代わることになる。

なお、演算結果は1行1列の行列(スカラとして扱われる)で、X・Y=a*c+b*dということになる。



スカラは乗算のみ

行列積が1行1列になった場合スカラとして扱うと述べたが、これは一方通行の変化であって逆は成り立たない。つまり、演算結果が1行1列の行列であればスカラとして扱うが、スカラを1行1列の行列として扱うことはない(というか、1行1列の行列は定義しない)。スカラと行列の演算は乗算のみ定義し、各要素にスカラの値をかけてやる。たとえば行列A
123
345
に2をかけると
246
6810
になるし、1/3をかけると
1/32/31
14/35/3
になる。

後でちらっと出てくる「テンソル」という用語を使うと、スカラは0階のテンソルでベクトルは1階のテンソルになる。ここでは「テンソルの階数」と「添え字の個数」を同一視しても多分問題なく、行と列が決まってはじめて要素を特定できる行列(添え字2個:普通はiとjを使う)は2階のテンソルになる。

行列を立体的に積み上げて「段」のような概念を加えれば3階のテンソルも比較的容易に作れるし、演算上はもっと高階のテンソルも想定できる。もっと簡易に、ベクトルの中に行列を入れ子(ネスト)にしてX(A , B , C)(ただしABCはそれぞれ行列を示す)のような形にしたり、行列の中に行列を入れ子にしてもよいだろう(ネストを深くすればn階のテンソルを記述できる)。こう考えると、行列自体がベクトルの中にベクトルを入れ子にした構造をしている。



ベクトルを複数集める

互いに1次独立でゼロでない2次ベクトルXとYによってベクトル平面を、互いに1次独立でゼロでない3次ベクトルXとYとZによってベクトル空間を構成できることは高校までの数学で習うが、行列は複数のベクトルを収納できるため、2次ベクトルを2つ収納した2次正方行列で2次元を、3次ベクトルを3つ収納した3次正方行列で3次元を表現できることになる。

実際にどうなっているのか筆者はまったく知らないが、正方行列の次数をどんどん上げていけば、とんでもなく高次の表現もきっとできるに違いない。

もし収納するベクトルすべてが互いに直交する単位ベクトルであったなら、収納後の行列は単位行列になる。たとえば、x(1 , 0 , 0)とy(0 , 1 , 0)とz(0 , 0 , 1)という3つの3次ベクトルを行列Eに収納すると、
100
010
001
という3次の単位行列になる(収納する順番は任意に決めてよいのだと思う、多分)。これはE(x , y , z)という入れ子を見立てたのと同義である。

収納するベクトルが1行行列か1列行列か(縦ベクトルか横ベクトルか)を気にする必要はなく、
1
0
0
0
1
0
0
0
1
を横に並べても、
100
010
001
を縦に重ねても、結局
100
010
001
になることは変わらない(ただし、入れ子が縦であれば器は横、入れ子が横であれば器は縦と、交差する形でなくてはならない)。



積は内積だけではない

内積(と普通呼んでいるものは厳密には標準内積といい、非標準な内積もあるらしいのだが筆者はよく知らない)があるのだから当然外積もある。3次ベクトルXと3次ベクトルYの外積は、XとYの両方に直交し(すなわちXとYを含む平面の法線と平行で)、大きさがXとYが張る平行四辺形の面積と等しく、XとYに対して正の向きである(行列式の値で求めるのが本来らしい:2次正方行列に逆行列が存在するかどうか確認するときの、ad-bcのアレ)ベクトルになる。

これは何なのかというと、たとえば電界と磁界が交差しているときに生じるローレンツ力を計算する場合に、電界と磁界をそれぞれベクトルXとYに見立てて外積を計算すると、結局ローレンツ力が求まる、というものである(これの特殊形をさらに簡略化したのが、フレミングの左手の法則)。ベクトルX(a , b , c)とベクトルY(d , e , f)の外積について要素で計算すると、ベクトル(bf-ce , cd-af , ae-bd)が求まる。

歴史的な経緯は知らないが、もしかすると、ローレンツ力などを求める計算が先にあって、あとから「ベクトルの外積」という名前を付けただけなのかもしれない。ちなみに、内積の計算結果はスカラ、外積の計算結果はベクトルになることから、前者をスカラ積、後者をベクトル積と呼ぶことがある。

さて、外積も行列に応用できる概念ではあるのだが、その前に直積という概念に寄り道してみる。内積がスカラ、外積がベクトルになるのに対して直積は行列になり、たとえばベクトルX(a , b , c)
a
b
c
とベクトルY(d , e , f)
d
e
f
の直積は、行列
adaeaf
bdbebf
cdcecf
になる(XとYの内積がXTYなのに対して直積はXYT)。内積と直積を合わせて「テンソル積」というのだが、先ほども出てきたこのテンソルというのが何者かというと、どうやら、線型性を備えた元のこと(なので、テンソル積は線型な写像をなすなり変換を行うなりする元どうしの積を指すのだと思う:体には四則演算可能な代数系を想定し、無限次の空間に基底を与えることで有限次の場を取り出すらしい)のようなのだが、そこまで突っ込むと筆者にはチンプンカンプンなので、とにかく上記の演算で求まる、ということだけ確認しておく(テンソル積に内積と直積の2種類がある、というのは、次数が同じベクトルを2つ用意して線型変換しようとするとXTYまたはXYTという演算になる、というのと同義なのだと思う、多分)。

これが外積とどう関係するのかというと、XとYの直積からYとXの直積を引くと外積が求まる。たとえば上記の場合YとXの直積は
dadbdc
eaebec
fafbfc
になり、実際に引き算すると
ad-daae-dbaf-dc
bd-eabe-ebbf-ec
cd-face-fbcf-fc
すなわち
0ae-bd-(cd-af)
-(ae-bd)0bf-ce
cd-af-(bf-ce)0
になるが、ここに反対称テンソルやら擬テンソルやらホッジ作用素などといった概念を突っ込むと(bf-ce , cd-af , ae-bd)というベクトルを引っ張り出せるらしい(根拠や具体的な証明は知らない)。また、外積とは別にクロス積という概念もあるらしいが、3次のクロス積は外積に一致するらしいので似たようなものなのだろう。



もどる

自滅への道トップページ