flat7th

memo/20120425

created 2012-04-25 modified 2012-04-25 

放送大学の「データマイニング」の講義で、実習言語として R言語 を取り上げていたのでおもしろそうだなぁと思い、勝手に聴講中です。

リンク備考
データからの知識発見('12)秋光 淳生 センセイ

今週の話は行列の演算と、固有値・固有ベクトル、対角化をやりました。うーむ。現役のときに絶対やったのだろうと思うけど、全く記憶にないなぁ…。

で、さっそくFedoraに R をインスコして、講義のとおり実習してみました。

講義では
> A <- matrix( c(1,2,3,4),ncol=2,nrow=2,byrow=T )
> B <- matrix( c(1,2,3,4),ncol=2,nrow=2 )

とやってたんですが、ncol=2 と nrow=2 って無駄では?と思って片方省略してみたら、OKでした。

> A <- matrix( c(1,2,3,4),ncol=2,nrow=2,byrow=T )
> A
     [,1] [,2]
[1,]    1    2
[2,]    3    4
> A <- matrix( c(1,2,3,4),ncol=2,byrow=T )
> A
     [,1] [,2]
[1,]    1    2
[2,]    3    4
> B <- matrix( c(1,2,3,4),ncol=2 )
> B
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> A %*% B
     [,1] [,2]
[1,]    5   11
[2,]   11   25
> 

代入が左矢印 <- とか、独特ですねぇ。ほとんどのプログラム言語では代入がイコールで、
もうそれで慣れてしまったから、逆に違和感あります。#そういえばPascal系は代入が := だったかな。
そして行列の積は
%*%
記号を使う、と。

> C <- solve(A)
> C
     [,1] [,2]
[1,] -2.0  1.0
[2,]  1.5 -0.5
> A %*% C
     [,1]         [,2]
[1,]    1 1.110223e-16
[2,]    0 1.000000e+00
> 

solve()は、本来は連立方程式を解くものなのだけど、行列に適用すると
逆行列を求めてくれるのだそうで。そして、もとの行列と逆行列とで積を求めて、
浮動小数の誤差があるけどほぼ単位行列になるでしょ、と。

> D <- eigen(A)
> D
$values
[1]  5.3722813 -0.3722813

$vectors
           [,1]       [,2]
[1,] -0.4159736 -0.8245648
[2,] -0.9093767  0.5657675

そして、eigen()でAの固有値と固有ベクトルを求める...
と、この辺から自分の理解が怪しくなってきます。
前半で、行列に対する固有値・固有ベクトルの説明があったので
なんとかこの辺はついて行ってました。

その後「対角化」するところで訳ワカメ。
対角化すると固有値が並んだ行列が求められて、それによって
Aの性質が読み取れる...?

うーむ、もう一回見ないとだ...


んでも、まぁ、

「Enter押すと走り出す」ものは、なんでもおもしろい。

です。


Mathematicaも、iPythonも、Rも。octaveもかな?