2019年10月19日土曜日

統計的推測

確率密度関数 \( f(x) \) がわからないと、確率を算出することはできません。血糖値の真の分布(関数)は、血糖値の測定を繰り返し行うことによって特定されます。ところが、測定を無限に繰り返すことはできません。そこで、モデルを考えます。過去の経験や現象に基づいて、データのバラツキを再現し、なおかつ、数学的に扱いやすい関数を用います。今、このモデルを表す関数を \( \phi (x) \) とします。

血糖値の具体的な測定値を97.6 mg/dLのように小数点第1位まで表示するとき、小数点第2位以下は四捨五入しています。仮に、無限の精度を持つ測定器を用いれば、小数点以下を限りなく細かく測定できます。このような場合、確率変数は連続的な値をとり、連続型の確率変数といいます。

確率密度関数 \( f(x) \) としてよく使われるものに正規分布があります。これは連続型の確率変数に関する確率分布で、平均値の付近にデータが集まるような分布を表します。 \begin{equation} \phi = \frac{1}{\sqrt{(2\pi \sigma^2)}} \exp \left \{ -\frac{(x-\mu)^2}{2\sigma^2} \right \} \end{equation} \( \phi \) は下図のように、左右対称で釣り鐘型の形状をしています。対称軸は \( \mu \) で正規分布の平均、分布の広がりは \( \sigma \) で正規分布の標準偏差を表します。このような分布は \( N(\mu, \sigma^2) \) と書き表します。平均 \( \mu \) と標準偏差 \( \sigma \) が決まりますと、この正規分布は確定します。

前に出てきた血糖値の表のデータに基づけば、血糖値の平均は96.6 mg/dL, 標準偏差は10.6 mg/dLです。下図の曲線は、\( \mu = 96.6, \sigma = 10.6 \)の正規分布を表しています。ところで、この図を真の分布 \( f(x) \) として、正規分布のモデル \( N(96.6, 10.6^2) \) で近似するとすれば、「高血糖の疑いがある(110 mg/dL 以上)」と診断される確率は約10.2 %です。この場合、10回に1回くらいは「高血糖の疑いがある」と診断されてしまうということです。血糖値の平均は96.6 mg/dL, 標準偏差は10.6 mg/dL というのは本来、標本の標準偏差でしたから、真の分布とは違うという点に注意が必要です。

データにはバラツキがあり、そのバラツキを確率分布としてとらえています。このように、ある事象が起きる確率を、確率分布に基づいて評価することを、統計的推測といいます。

2019年10月12日土曜日

データのバラツキと確率

「データのバラツキは確率的に起きる」と考え、データの背後に隠れている真実を推定します。下図は、先の表で示した、ある人の血糖値を100回測定し、10 mg/dLの階級に分けて描いた頻度グラフです。例えば、血糖値が80~90 mg/dLn範囲で測定された回数を、棒の長さでプロットします。このようなグラフはヒストグラムと呼ばれます。全体の測定回数100で割ると、棒グラフの面積は1に正規化されます。

血糖値の測定回数を増やして、階級幅を狭めると、ヒストグラムは図の曲線のような分布に近づきます。この曲線は正の値をとり、横軸との間で囲まれた領域の面積は1となります。つまり、 \begin{equation} f(x) \geq 0 , \int_{-\infty}^{+\infty} f(x) dx = 1 \end{equation} です。これを満たす関数 \( f(x) \) は確率密度関数と呼ばれます。この人の血糖値はバラついていますが、そのバラツキは確率密度関数に従っているということです。この血糖値のデータを変数 \( X \) とすれば、確率密度関数に従って分布する確率変数ということができます。

血糖値が区間 \( (a, b) \) に入る確率は、\( (a, b) \) の範囲の頻度を足せばよいです。確率密度関数で言えば、その範囲の領域の面積を求めればよいのです。この場合、区間 \( (a, b) \) と横軸、\( f(x) \) で囲まれた領域の面積を求めればよいということです。これは、確率変数 \( X \) が区間 \( (a, b) \) に入る確率となります。 \begin{equation} P(a < X < b) = \int_{a}^{b} f(x) dx \end{equation}

これは以前も書いたのですが、確率変数というのはわかりにくい概念です。実際に試行が実施されるまでどのような値が得られるかわからない変数が、確率変数です。試行が実施されて値が得られたら、その値は確率変数の実現値です。確率分布は、確率変数がどのような値を取りやすく、どのような値を取りにくいかを示しています。言い換えれば、確率変数がどのような値をどんな確率で取るかを表すということです。確率変数は、試行を行ってはじめて値(実現値)が決まります。その値に再現性があるわけではなく、同じ試行を繰り返しても同じ値が得られるとは限りません。

2019年10月3日木曜日

統計的な処理

最近、血糖値が上がってきました。もうすぐ健康診断があるんですが、血糖値が基準値を上回るのではないかと心配で、糖質制限と運動を進めています。一般には、高血糖には食事と運動と言われますが、その効果はいかほどなのでしょうか。

例えば、毎夕、食事の後にジョギングを始めたとします。そうしたら、2, 3か月のうちに血糖値が下がってきました(とします)。この血糖値の低下は、運動(ジョギング)の効果で下がったと言えるでしょうか。

「毎日、走ってるんだろう?!血糖値が下がったのなら、「運動の効果」が出たのに決まっている!」

一般には、このように考える人が多いのではないでしょうか。ところが、これは本当に「運動の効果」なのでしょうか。と言うのも、測定にはバラツキがあるはずで、「運動の効果」がなくてもバラツキがあるために、そのときたまたま血糖値が下がったのかも知れません。「運動の効果」によって「血糖値が下がった」というのは早計ではないでしょうか。

このような場合、統計処理を行います。「血糖値が低下したのは運動の効果であり、測定のバラツキによるものではない」ということを知る手段としてp値があります。これは、「もし、運動の効果(処置効果)がないとしたとき、測定のバラツキによって血糖値(評価指標)が、測定された値より小さな値をとる確率」として考えます。

この確率が5%(20回のうち1回)より小さくなるような値が出るならば、バラツキだけの要因で血糖値がこのような小さな値をとる可能性は小さいはずです。したがって、運動の効果があったと推論します。つまり、

  • p値 \( < 0.05 \) のとき、統計的に処置効果がある
  • p値 \( \geq 0.05 \) のとき、統計的には処置効果があるとは言えない
ここで、「統計的に処置効果がある」というのは統計的な扱いだという点に注意します。

何か測定したとき、データが得られます。繰り返し同じ測定をしたとき、同じ測定値が得られるとは限りません。以下の表は、同じ人の血糖値を測定した結果です。空腹時血糖値を毎日、10日間測定したものです。同一人物、同一条件で測定したにもかかわらず、測定値はバラついています。

表:血糖値の測定(単位:mg/dL)

日にち 0 1 2 3 4 5 6 7 8 9
血糖値 87 96 89 104 88 121 102 88 99 92

血糖値は血液中のブドウ糖の濃度で表され、人によって異なります。しかし、上の表は同一人物でも、血糖値は毎日変動しています。この人の真の血糖値はあるでしょうが、測定値はその真の値に何らかの誤差が加わったものと考えられます。これが、データのバラツキとして出現します。誤差の要因には様々なものが含まれ、一般には特定するのが難しいです。

ところが、健康診断では1回しか測定しないことが多く、その測定で121 mg/dLと出たら「高血糖の疑いあり」と診断されるでしょう(空腹時血糖値110 mg/dL以上で異常)。このように測定データにはバラツキがありますから、精密検査を受けて診断を確定するプロセスがあるのです。したがって、単にデータに基づいて判断するというだけではなく、そのバラツキを認識してデータの背後にある真実を見抜かないといけません。統計学はデータから効率的に情報を抽出し、真実を精度よく推定する方法を提供します。

2019年9月27日金曜日

特異値分解

特異値分解についてお話しします。固有値分解が対象としているのは正方行列でした。特異値分解では、これを一般の行列に拡張します。つまり、行列 A に対して、直交行列 U, V、対角行列 S を用いて \begin{equation} \rm A = U S V^t \end{equation} のように分解します。 このとき、 \begin{equation} \rm S = \begin{pmatrix} s_1 & & \\ & s_2 & \\ & & \ddots \\ \end{pmatrix}, \\ \rm U = \begin{pmatrix} \vec{u_1} & \vec{u_2} & \cdots & \\ \end{pmatrix} \\ \rm V = \begin{pmatrix} \vec{v_1} & \vec{v_2} & \cdots & \\ \end{pmatrix} \end{equation} です。\( \rm S \) は特異値と言います。分解するときに使う直交行列はU, Vの2個になりますが、「正方行列の」という制限が外れます。従って、どんな行列にも使えます。ここで注意すべき点は、対角行列 S の行と列の数が異なるということです。対角からはみ出る要素はゼロになります。また、直交行列 U, V の要素数は異なります。

行列 A は正方行列である必要はありませんが、\( \rm AA^t \) は常に正方行列(対称行列)になります。ということは、この正方行列 \( \rm AA^t \) に対して固有値分解できるということです。つまり、対角行列 D として \begin{equation} \rm AA^t = U D U^t \end{equation} と変形できます。一方で、 \begin{equation} \rm AA^t = U S V^t (U S V^t)^t = U S V^t V S^t U^t = U SS^t U^t \end{equation} ですから、\( \rm D = SS^t \)です。同様に、 \begin{equation} \rm A^t A = V S^t S V^t \end{equation} です。

\begin{equation} \rm S^t S = \begin{pmatrix} s_1^2 & & \\ & s_2^2 & \\ & & \ddots \\ \end{pmatrix} \end{equation} ですから、\( \rm A^t A \) を求めて、その固有値を計算し、その正の平方根をとれば、特異値が求まるということです。

2019年9月15日日曜日

固有値分解

固有値と固有ベクトルの話は少し前にやりました。今回は固有値分解についてです。固有値分解は実質的に対角化そのものです。で、対角化とは何だったかと言いますと、正方行列 A に対して、直交行列 P, 対角行列 D として \begin{equation} \rm {A = P D P^t} \end{equation} のような形にすることです。このとき、 \begin{equation} \rm D = \begin{pmatrix} \lambda_1 & & \\ & \lambda_2 & \\ & & \ddots \\ \end{pmatrix}, \\ \rm P = \begin{pmatrix} \vec{v_1} & \vec{v_2} & \cdots & \\ \end{pmatrix} \end{equation} です。ただし、\( \lambda \) は固有値、\( \vec{v} \) は固有ベクトルです。D は固有値が対角成分に並んだ形になっていますから、対角化です。

で、 \( \rm {A = P D P^t} \) という形に変換したことは、正方行列 A を P の要素( P に含まれる直交ベクトル)それぞれの和で表したことになります。つまり、 \begin{equation} {\rm A} = \lambda_1 \vec{v_1} \vec{v_1^t} + \lambda_2 \vec{v_2} \vec{v_2^t} + \cdots \end{equation} です。固有値は各項の重みを表していることになりますから、ゼロに近い固有値は無視して計算してしまっても、ある程度の精度が保てます。これは次元削減したことになり、計算コストを下げたりデータ量を減らしたりできます。あとは、\( \rm A \)の累乗の計算が簡単になります。

2019年9月3日火曜日

Google Colaboratoryを使えるようにする

Google Colaboratoryを使おうと思って、net検索すると、Google Driveから「アプリを追加」で対応するようなことが記載されています。で、その通りやって、Google Colaboratoryを登録するのだけど、なぜか関連のフォルダもファイルもできないし、一向に使えるようになりません。

次のようにすると、自動的にGoogle Driveにフォルダやファイルが作成されて、Google Colaboratoryが使える状態になりました。

  1. chromeでGoogleにログインする(IDとPWを入力する)
  2. chromeから直接Google Colaboratoryのサイトにアクセスする
  3. メニューの「ファイル」タブをクリックし、「Python3の新しいノートブック」をクリックする
これで、Google Driveに「Colab Notebooks」というフォルダができ、その中に「Untitled0.ipynb」というファイルができているはずです。

2018年10月27日土曜日

MinGWでOpenCVを使えるようにする

前回、MSYS2をインストールして、gcc関連のパッケージを導入しましたので、C++のプログラムがコンパイルできるはずです。で、以下のようなC++プログラムを「test01.cpp」というファイル名で用意したとします。
#include <iostream>
using namespace std;
int main(){
  cout << "Hello, World." << endl;
  return 0;
}
MinGW 64bitのshellを起動し、test01.cppを作ったディレクトリに移動します。
cd f:\OpecCV
で、以下のコマンドを入力します。
gcc test01.cpp -o test01 -lstdc++
そうしますと、「test01.exe」という実行ファイルができます。これを実行しますと、「Hello, World」が表示されます。

次に、OpenCVを導入します。OpenCVは、コンピュータ・ビジョンに関する機能を持つライブラリです。MSYS2ではOpenCVパッケージが用意されていて、以下のようにするとインストールできます。
pacman -S mingw-w64-x86_64-opencv
で、以下のようなC++プログラムを「test02.cpp」というファイル名で用意したとします。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
    Mat img = cv::imread("image.png");
    imshow("image", img);
    waitKey(0);
    return 0;
}
このプログラムをgccでコンパイルするのですが、設定が色々面倒ですので、以下のようなMakefileを作ります。
#Makefile
INC = -I "C:\msys64\mingw64\include\opencv4"
DIR =  -L "C:\msys64\mingw64\bin"
FLAGS = -lstdc++ -lopencv_core410 -lopencv_highgui410 -lopencv_imgcodecs410
OBJS = test02

main:
 gcc $(INC) $(DIR) test02.cpp -o $(OBJS) $(FLAGS)
で、以下のようにmakeすると、実行ファイルができます。
make
この実行ファイルを実行すれば、画像が表示されます。

2018年10月6日土曜日

MSYS2を通してMinGWを使う

Windows10でC++プログラミングをするとき、統合開発環境としてVisual Studioを使うのが一般的だと思います。ただ、Visual Studioをインストールすると、Windows10の設定を色々変えるので、不都合が生じるのが不安です(実際に生じたわけではありません)。代替措置としてgccを使うことを考えます。Windowsでgccを使えるようにする開発環境として、MinGW (Minimalist GNU for Windows)があります。今回は、これをWindows10にインストールします。

ただ、MinGWの最低限の機能だけをインストールするというわけにもいかないでしょう。gccのバージョンは一定期間ごとにupdateされますし、ライブラリだって利用したいでしょう。そうすると、色んなパッケージをインストールすることになるのですが、それらも管理していかないといけません。で、MSYS2 (Minimal SYStem 2)というのを使います。これは、Windows上で動作するプログラム開発環境を提供するシステムです。UnixやLinuxと同様にshell(bash)端末でコマンドを使って操作します。 ということで、これからやることは、

  • MSYS2をインストールする
  • MinGWをインストールする
  • です。

    まず、MSYS2のページにアクセスして、MSYS2のインストーラー「msys2-x86_64-20190524.exe」をダウンロードします。

    次に、ダウンロードした「msys2-x86_64-20190524.exe」を実行します。基本的にポップアップ画面の右下の「次へ」をクリックしていけば、「C:\msys64」にMSYS2がインストールされます。Windowsのメニューで「MSYS2 64bit」をクリックして、以下のようなshellが現れればインストール成功です。

    で、パッケージのデータベースを更新します。
    pacman -Sy
    そして、以下のコマンドでパッケージを更新します。
    pacman -Su
    ここで、以下のような警告メッセージが出たら、MSYS2を一旦閉じ、もう一度立ち上げ直して上記コマンドを再度実行します。
    警告: terminate MSYS2 without returning to shell and check for updates again
    警告: for example close your terminal window instead of calling exit
    
    警告メッセージが出なくなればOKです。

    次に、MinGW-w64(64bit)とその関連パッケージをインストールします。

    pacman -S base-devel
    pacman -S mingw-w64-x86_64-toolchain
    

    一旦、MSYS2のshellを閉じて、MinGW 64-bitのshelを起動します。そこで、以下のコマンドを実行して、下のような表示が出ればOKです。

    gcc --version
    

    2018年5月23日水曜日

    畳み込み積分

    今、時間 \( t \) と共に変化する信号 \( x(t) \) が下の図の太線のようになっていたとして、この信号を、先に示した単位インパルス関数を用いて表すことを考えよう。単位インパルス関数は、面積1の長方形 \( \delta_\varepsilon (t) (1 < t < \varepsilon) \) で \( \varepsilon \to 0 \) の極限をとったものとして定義された。そこで、この \( \delta_\varepsilon (t) \) を少しずつずらして、 \( x(t) \) を構成する。\( x(t) \) を離散時間 \( \varepsilon \) で分割すると、下図の赤い矩形のようになる。

    時間 \( t \) での高さは、 \( x(k\varepsilon) \delta_\varepsilon (t-k \varepsilon) \varepsilon \) で近似できる。 \( k \) は、時間幅 \( \varepsilon \) が何個あるかを表し、\( x(k \varepsilon) \) は \( t=k \varepsilon \) のときの \( x(t) \) の値を表す。\( \delta_\varepsilon (t-k \varepsilon) \) は \( \delta_\varepsilon (t) \) が時間 \( k \varepsilon \) だけずれたことを表し、\( \delta_\varepsilon (t-k \varepsilon) \varepsilon \) は1である。例えば、\( k=1 \) なら、\( x(\varepsilon) \delta_\varepsilon (t-\varepsilon) \varepsilon \) となるし(下図一つ目)、\( k=-2 \) なら、\( x(-2 \varepsilon) \delta_\varepsilon (t+2 \varepsilon) \varepsilon \) となる(下図二つ目)。

    これらを足し合わせると、 \begin{equation} x(t) \approx \sum_{k=-\infty}^\infty x(k\varepsilon) \delta_\varepsilon (t-k \varepsilon) \varepsilon \end{equation} となる。で、近似を等式にするには、\( \varepsilon \to 0 \) の極限をとればよい。そうすると、\( \delta_\varepsilon (t) \) は単位インパルス関数 \( \delta (t) \) となり、次式が得られる。 \begin{equation} x(t) = \int_{-\infty}^\infty x(\tau) \delta(t-\tau) d\tau \end{equation}

    2018年5月9日水曜日

    重ね合わせの理

    重ね合わせの理は、「電気回路で複数の電源があるとき、各電源(起電力)によって流れる電流を求め、それらの足し合わせが回路全体の電流に等しい」という定理です。例えば、以下のような電気回路を考えたとき、この回路に流れる電流はオームの法則から \begin{equation} I = \frac{E_1 + E_2}{R} \end{equation} となります。

    重ね合わせの理を使えば、一方の電源を取り除いて、片方ずつ電流を求め、後でそれらを足し合わることで、全体の電流を求めることができます。で、まず、一方の電源 \( E_1 \) を残して、もう一方の電源 \( E_2 \) を短絡しますと、この回路に流れる電流は、 \begin{equation} I_1 = \frac{E_1}{R} \end{equation} となります。

    次に、反対側の電源を戻して、先ほど残した電源を短絡します。そうしますと、この回路に流れる電流は、 \begin{equation} I_2 = \frac{E_2}{R} \end{equation} となります。

    で、求めた電流をそれぞれ足し合わせると、以下のように回路全体を流れる電流が求められるのです。 \begin{equation} I = \frac{E_1 + E_2}{R} \end{equation} この回路は単純ですので、重ね合わせの理を用いなくても、冒頭のように起電力を足し合わせてオームの法則を適用するやり方で簡単に求めることができます。しかし、回路が複雑になると、重ね合わせの理は重宝することになります。

    ここで、\( E_1, E_2 \) を入力、\( I_1, I_2 \) を出力と考えたとき、以下のことが成り立ちます。

    1. 入力 \( {E_1 + E_2} \) に対する出力は \( I_1 + I_2 \)
    2. 入力 \( \alpha E_1 \) に対する出力は \( \alpha I_1 \) ( \( \alpha \) は定数 )
    このような関係は線形ですし、これを入出力システムとみれば、線形システムということになります(下図)。

    2018年4月26日木曜日

    単位インパルス関数

    \( t < 0 \) のとき 0 で、\( t \ge 0 \) のとき 1 となる関数を考えます。でも、これだと、下の図のように \( t = 0 \) のところで不連続になってしまいます。で、その右の図のように、0 から 1 に変化するところに幅 \( \varepsilon \) を持たせます。これで、一応連続になります。

    \( \varepsilon \to 0 \) のように極限をとりますと、以下のようになります。これが単位ステップ関数というものです。 \begin{equation} u(t) = \lim_{\varepsilon \to 0} u_\varepsilon (t) \end{equation} ここで、上の右図に対して範囲を区切って微分します(\( t=0, t=\varepsilon \)では微分不可能)。 \begin{equation} \delta_\varepsilon (t) = \frac{{\rm d} u_\varepsilon (t)}{{\rm d} t} \end{equation} このとき、\( \delta_\varepsilon (t) \) として面積1の長方形を考えます(下図右)。そうしますと、 \begin{equation} \frac{1}{\varepsilon} ( 0 < t < \varepsilon )\\ 0 \ \ ( それ以外 ) \end{equation} となります。ここで、\( \varepsilon \to 0 \) のように極限をとりますと、以下のようになります。 \begin{equation} \delta (t) = \lim_{\varepsilon \to 0} \delta_\varepsilon (t) \end{equation} これが単位インパルス関数(ディラックのデルタ関数)です。\( \varepsilon \to 0 \)としたとき、\( \delta (t) \) は \( \infty \) になりますので、図では正確に書き表せません。で、便宜的に大きさ1の矢印とします(下図左)。

    つまり、 \begin{equation} \int_{-\infty}^\infty \delta(t) dt = \lim_{\varepsilon \to 0} \int_0^\varepsilon \delta(t) dt = \lim_{\varepsilon \to 0} \int_0^\varepsilon \frac{1}{\varepsilon} dt = 1 \end{equation} ということです。関数 \( f(t) \) を考えた場合、\( f(0) \) は \begin{equation} \int_{-\infty}^\infty f(t) \delta(t) dt = f(0) \end{equation} となります。\( t = \tau \) であれば、単位インパルス関数 \( \delta (t) \) を \( \tau \) だけ平行移動した \( \delta (t - \tau ) \) を考えればよいのです。 \begin{equation} \int_{-\infty}^\infty f(t) \delta(t - \tau) dt = f(\tau) \end{equation}

    で、単位ステップ関数 \( u(t) \) を、単位インパルス関数で表せば、次式となります。 \begin{equation} u (t) = \int_{-\infty}^\infty u(t) \delta( t - \tau ) dt = \int_0^\infty \delta (t-\tau) dt = \int_{-\infty}^t \delta(\tau) d\tau \end{equation}

    2018年4月11日水曜日

    畳み込み

    信号処理の分野では畳み込み積分という重要な処理があります。「畳み込み」と言いますと、ディープラーニングの主要な構造の一つ、畳み込みニューラルネットワーク(CNN)でお馴染みかも知れません。ただ、CNNでは画像とフィルタの間の相関を表すものに近く、実際、画像の画素とフィルタのフィルタ係数との積和演算になっています。

    位置\( (i, j) \)の画素の画素値を \( x_{ij} \) とし、位置\( (p, q) \)のフィルタのフィルタ係数を \( h_{pq} \) とすれば、その積和演算は以下のようになります。

    \begin{equation} u_{ij} = \sum_{p=0}^{H-1} \sum_{q=0}^{H-1} x_{i+p,j+q} h_{pq} \end{equation}

    この積和演算では、画像の中に、フィルタの濃淡パターンと似た濃淡パターンがどこにあるかを検出する働きがあります。したがって、フィルタが持つ濃淡の特徴を、画像から抽出していると考えることができます。で、その先に行く前に、この畳み込み積分をちゃんと理解しておきましょう。

    信号処理では、システムとして線形で時間的に特性が変化しないものを考えることがあります。これを、線形時不変システムと呼びます。知りたいのは、システムに入力があったとき、出力がどうなるかということです。ただ、システムの特性は明示的にはわからないものとします。このとき、インパルス応答と入力の畳み込み積分によって、システムの出力が計算できるのです。インパルス応答というのは、システムに単位インパルス信号を入力したときの出力応答のことです。

    ということで、まず、インパルス応答について知る必要がありますね。その詳細を次に書きます。

    2017年8月29日火曜日

    行列式

     2x2行列が \begin{equation}  A = \begin{pmatrix} a & c \\ b & d \end{pmatrix} \end{equation} ならば、その行列式は、 \begin{equation} a d - b c \end{equation} となります。行列の逆行列を求めるとき、成分を行列式の値で割る計算が入りますから、行列式の計算は重要です。行列式は英語でdeterminantといい、行列\(A\)の行列式は\( \det A \)と書きます。\( |A| \)とも書きます。例えば、2x2の行列が \begin{equation} B = \begin{pmatrix} 3 & 2 \\ 4 & 5 \end{pmatrix} \end{equation} なら、その行列式は\( \det B = 3 \cdot 5 - 2 \cdot 4 = 7 \) となります。
     行列式は計算負荷が高いので、求めやすい形に変形します。このとき使われるのが、以下の行列式の計算法則です。ここでは6つ挙げていますが、逆行列の計算には(1),(2),(5)が主に用いられます。

    (1) \( \det B = k \det A \)
     ただし、行列\(B\)は、行列\(A\)の1行の成分を\(k\)倍したものです。例えば、 \begin{equation} A = \begin{pmatrix} a & c \\ b & d \end{pmatrix} \\ B = \begin{pmatrix} a & c \\ k b & k d \end{pmatrix} \end{equation} なら、 \begin{equation} \det A = a d - b c \\ \det B = k a d - k b c = k ( a d - b c ) = k \det A \end{equation} です。

    (2) \( \det B = - \det A \)
     ただし、行列\(B\)は、行列\(A\)の1行の成分と別の1行の成分とを入れ替えたものです。例えば、 \begin{equation} A = \begin{pmatrix} a & c \\ b & d \end{pmatrix} \\ B = \begin{pmatrix} b & d \\ a & c \end{pmatrix} \end{equation} なら、 \begin{equation} \det A = a d - b c \\ \det B = b c - a d = - ( a d - b c ) = - \det A \end{equation} です。

    (3) \( \det A = 0 \)
     ただし、行列\(A\)の1行の成分と別の1行の成分とが等しいものです。例えば、 \begin{equation} A = \begin{pmatrix} a & c \\ a & c \end{pmatrix} \end{equation} なら、 \begin{equation} \det A = a c - a c = 0 \end{equation} です。

    (4) \( \det C = \det A + \det B \)
     ただし、行列\(A, B, C\)ではそれぞれ1行の成分以外、すべて等しいという条件で、その1行について\(A\)の成分と\(B\)の成分の和が\(C\)の成分に等しくなっています。例えば、 \begin{equation} A = \begin{pmatrix} a & c \\ b & d \end{pmatrix} \\ B = \begin{pmatrix} a & c \\ t & v \end{pmatrix} \\ C = \begin{pmatrix} a & c \\ b + t & d + v \end{pmatrix} \end{equation} なら、 \begin{equation} \det A + \det B = ( a d - b c ) + ( a v - c t ) = a ( d + v ) - c ( b + t ) = \det C \end{equation} です。

    (5) \( \det B = \det A \)
     ただし、行列\(B\)は、行列\(A\)の1行の成分に、別の1行の成分の定数倍を足したものです。例えば、 \begin{equation} A = \begin{pmatrix} a & c \\ b & d \end{pmatrix} \\ B = \begin{pmatrix} a & c \\ b + k a & d + k c \end{pmatrix} \end{equation} なら、 \begin{equation} \det B = a ( d + k c ) - c ( b + k a ) = a d - b c + k ( a c - a c ) = a d - b c = \det A \end{equation} です。

    (6) \( \det A^T = \det A \)
     これは、転置をとっても行列式の値は変わらないことを示しています。例えば、 \begin{equation} A = \begin{pmatrix} a & c \\ b & d \end{pmatrix} \\ A^T = \begin{pmatrix} a & b \\ c & d \end{pmatrix} \end{equation} なら、 \begin{equation} \det A^T = a d - b c = \det A \end{equation} です。

     ここでは2x2行列の場合を扱いましたが、3x3行列、4x4以上の行列でも同様の性質が成り立ちます。

    2017年8月22日火曜日

    対称行列

     対称行列というのは、右下斜めの対角線に対して成分が対称になっている行列です。例えば、 \begin{equation} A = \begin{pmatrix} a & b \\ b & d \end{pmatrix} \end{equation} とかです。転置の記号を使うと、 \begin{equation} A = A^T \end{equation} と表せます。転置行列の計算には気を付けることがあります。 \begin{equation} (AB)^T = B^T A^T \end{equation} となって、順序が入れ替わることに注意します。
     対称行列のメリットは、対称行列の固有値に対する固有ベクトルが直交するということです。例えば、対称行列 \begin{equation} A = \begin{pmatrix} 2 & 1 \\ 1 & 4 \end{pmatrix} \end{equation} の対角化を考えます。行列式は \begin{equation} \det ( A - \lambda E ) = \det \left \{ \begin{pmatrix} 2 & 2 \\ 2 & 5 \end{pmatrix} - \lambda \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \right \} = \det \begin{pmatrix} 2 - \lambda & 2 \\ 2 & 5- \lambda \end{pmatrix} \\ = ( 2 - \lambda )(5 - \lambda) - 2 \cdot 2 = \lambda^2 - 7 \lambda + 6 = ( \lambda - 1 )( \lambda - 6 ) \end{equation} となり、固有値は\( \lambda = 1, 6 \)と求まります。
     固有ベクトルを\( \begin{pmatrix} x & y \end{pmatrix}^T \)とすれば、連立方程式は \begin{equation} \begin{pmatrix} 2 - \lambda & 2 \\ 2 & 5- \lambda \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \end{pmatrix} \end{equation} となります。\( \lambda = 1\)のとき、\( x + 2 y = 0 \)ですから、 \begin{equation} \begin{pmatrix} x \\ y \end{pmatrix} = \begin{pmatrix} 2 \\ -1 \end{pmatrix} \end{equation} となります。\( \lambda = 6\)のとき、\( 2 x - y = 0 \)ですから、 \begin{equation} \begin{pmatrix} x \\ y \end{pmatrix} = \begin{pmatrix} 1 \\ 2 \end{pmatrix} \end{equation} となります。これらの固有ベクトルの内積を計算すると、0になりますから、確かに直交しています。
     固有ベクトルは定数倍してもよいですから、大きさが1になるようにとります。大きさが1になるということは、単位ベクトルということです。これは正規直交基底そのもので、三次元ならば以下の図のように表されます。

     対称行列のメリットは、基底の取替え行列が正規直交基底となり、計算が簡単になることです。 \begin{eqnarray} \vec{e}_1 \cdot \vec{e}_1 = 1, \ \ \vec{e}_2 \cdot \vec{e}_2 = 1, \ \ \vec{e}_3 \cdot \vec{e}_3 & = & 1 \\ \vec{e}_1 \cdot \vec{e}_2 = 0, \ \ \vec{e}_2 \cdot \vec{e}_3 = 0, \ \ \vec{e}_3 \cdot \vec{e}_1 & = & 0 \end{eqnarray}  もう一つのメリットは、逆行列の計算が簡単になることです。行列\(A\)が表す一次変換を、基底の取替え行列\(P\)として正規直交基底(固有ベクトル)を並べて作った行列で表せますから、逆行列は転置行列と同等になります。 \begin{equation} P^{-1} = P^T \end{equation}

    2017年8月15日火曜日

    対角化の導出

     前回、対角化をやりました。その定義と意味、具体例は述べましたが、なぜそうなるかは示しませんでした。今回はそれを示します。
     行列\(A\)は\(n \times n\)の正方行列だとして、その固有値を\(\lambda_1, \lambda_2, \cdots , \lambda_n\)、これに対する固有ベクトルを\(\vec{x_1}, \vec{x_2}, \cdots , \vec{x_n}\)としますと、次式が成り立ちます。 \begin{equation} A \vec{x_1} = \lambda_1 \vec{x_1} \\ A \vec{x_2} = \lambda_2 \vec{x_2} \\ \cdots \\ A \vec{x_n} = \lambda_n \vec{x_n} \end{equation} 固有ベクトルを並べた行列\(P = \begin{pmatrix} \vec{x_1} & \vec{x_2} & \cdots & \vec{x_n} \end{pmatrix}\)を作ると、 \begin{equation} A P = \begin{pmatrix} \lambda_1 \vec{x_1} & \lambda_2 \vec{x_2} & \cdots & \lambda_n \vec{x_n} \end{pmatrix} = P \left( \begin{array}{ccccc} \lambda_1&0&0&\cdots &0\\ 0&\lambda_2&0&\cdots &0\\ 0&0&\lambda_3&\cdots &0\\ &\vdots&&\ddots&\\ 0&0&0&\cdots &\lambda_n \end{array} \right) \end{equation} となります。ここで、列ベクトルごとに\(\lambda\)をかける次式を使っています。 \begin{equation} \left( \begin{array}{rrcr} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{array} \right) \left( \begin{array}{ccccc} \lambda_1&0&0&\cdots &0\\ 0&\lambda_2&0&\cdots &0\\ 0&0&\lambda_3&\cdots &0\\ &\vdots&&\ddots&\\ 0&0&0&\cdots &\lambda_n \end{array} \right) = \left( \begin{array}{rrcr} \lambda_1 a_{11} & \lambda_2 a_{12} & \cdots & \lambda_n a_{1n} \\ \lambda_1 a_{21} & \lambda_2 a_{22} & \cdots & \lambda_n a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ \lambda_1 a_{n1} & \lambda_2 a_{n2} & \cdots & \lambda_n a_{nn} \end{array} \right) \end{equation} 行列\(P\)が逆行列を持てば、先の式の両辺に左から\(P^{-1}\)をかけて \begin{equation} P^{-1}AP = \left( \begin{array}{ccccc} \lambda_1&0&0&\cdots &0\\ 0&\lambda_2&0&\cdots &0\\ 0&0&\lambda_3&\cdots &0\\ &\vdots&&\ddots&\\ 0&0&0&\cdots &\lambda_n \end{array} \right) \end{equation} を得ます。

    2017年8月8日火曜日

    対角化

     正方行列\(A\)に対して、固有ベクトルを並べた正方行列\(P\)を取ると、対角行列は\(P^{-1}AP\)のように求められます。この操作は対角化と呼ばれます。対角行列というのは、正方行列の右斜め下方向の対角成分だけを持つ行列です。 \begin{equation} P^{-1}AP = \left( \begin{array}{ccccc} \lambda_1&0&0&\cdots &0\\ 0&\lambda_2&0&\cdots &0\\ 0&0&\lambda_3&\cdots &0\\ &\vdots&&\ddots&\\ 0&0&0&\cdots &\lambda_n \end{array} \right) \end{equation} ここで、\(\lambda_1, \lambda_2, \cdots , \lambda_n\)は正方行列\(A\)の固有値になります。正方行列\(A\)が行と列にそれぞれ\(n\)個ずつの成分を持てば、\(n\)次正方行列と言います。 \begin{equation} A = \left( \begin{array}{rrcr} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{array} \right) \end{equation} また、\(P\)は、正方行列\(A\)の固有値に対応する固有ベクトルを並べたものです。固有ベクトルを\(\vec{x_1}, \vec{x_2}, \cdots , \vec{x_n}\)とおけば、対角化の操作に使われる正方行列\(P\)は \begin{equation} P = \begin{pmatrix} \vec{x_1} & \vec{x_2} & \cdots & \vec{x_n} \end{pmatrix} \end{equation} となります。
     対角行列を具体的に求める前に、対角化の意味とメリットを考えてみましょう。\(P^{-1}AP\)という行列表現は、新しい基底を座標系とした場合の線形変換を表しました。ただし、新しい基底は固有ベクトルの組になっていて、線形変換の行列表現は対角行列になっています。対角化操作を表す式を\(m\)乗すると、 \begin{equation} ( P^{-1}AP )^m = \left( \begin{array}{ccccc} \lambda_1&0&0&\cdots &0\\ 0&\lambda_2&0&\cdots &0\\ 0&0&\lambda_3&\cdots &0\\ &\vdots&&\ddots&\\ 0&0&0&\cdots &\lambda_n \end{array} \right)^m \end{equation} となります。左辺は、 \begin{equation} ( P^{-1}AP ) ( P^{-1}AP ) \cdots ( P^{-1}AP ) = P^{-1}A^mP \end{equation} となります。対角行列を\(m\)回かけた行列は対角成分をそれぞれ\(m\)乗したものになりますから、右辺は \begin{equation} \left( \begin{array}{ccccc} \lambda_1^m &0&0&\cdots &0\\ 0&\lambda_2^m &0&\cdots &0\\ 0&0&\lambda_3^m &\cdots &0\\ &\vdots&&\ddots&\\ 0&0&0&\cdots &\lambda_n^m \end{array} \right) \end{equation} となります。つまり、 \begin{equation} P^{-1}A^mP = \left( \begin{array}{ccccc} \lambda_1^m &0&0&\cdots &0\\ 0&\lambda_2^m &0&\cdots &0\\ 0&0&\lambda_3^m &\cdots &0\\ &\vdots&&\ddots&\\ 0&0&0&\cdots &\lambda_n^m \end{array} \right) \end{equation} です。ここで、両辺の左から\(P\)を、右から\(P^{-1}\)をかけると、 \begin{equation} A^m = P \left( \begin{array}{ccccc} \lambda_1^m &0&0&\cdots &0\\ 0&\lambda_2^m &0&\cdots &0\\ 0&0&\lambda_3^m &\cdots &0\\ &\vdots&&\ddots&\\ 0&0&0&\cdots &\lambda_n^m \end{array} \right) P^{-1} \end{equation} となります。したがって、行列の\(m\)乗の計算を単純にできるのです。
     では、行列の対角化を具体的に行ってみましょう。正方行列\(A\)を \begin{equation} A = \begin{pmatrix} 3 & 5 \\ 4 & 2 \end{pmatrix} \end{equation} とします。前の回で固有値と固有ベクトルは求めました。それを使えば、固有ベクトルを並べた行列 \(P = \begin{pmatrix} 1 & 5 \\ -1 & 4 \end{pmatrix} \) に対して \begin{equation} P^{-1}AP = \begin{pmatrix} -2 & 0 \\ 0 & 7 \end{pmatrix} \end{equation} となります。固有値と固有ベクトルは対応する順番に並べることに注意します。

    2017年8月1日火曜日

    固有値と固有ベクトル

     線形変換の表現行列が\(A\)のとき、座標\((x, y)\)は、\((x', y')\)に移されます。このとき、元の座標値を定数倍する組合せが存在します。例えば、 \begin{equation} A = \begin{pmatrix} 3 & 5 \\ 4 & 2 \end{pmatrix} \end{equation} でしたら、座標\((2, 1)\)は、\((11, 10)\)に移されます。もし、座標\((2, 1)\)を原点からのベクトル\(\begin{pmatrix} 2 \\ 1 \end{pmatrix}\)と考えますと、そのベクトルは線形変換によって大きさも方向も異なるベクトル\(\begin{pmatrix} 11 \\ 10 \end{pmatrix}\)に移されます。図に描けば、以下のようになます。

    このとき、ベクトルを\(\begin{pmatrix} 5 \\ 4 \end{pmatrix}\)のようにとりますと、\(\begin{pmatrix} 35 \\ 28 \end{pmatrix}\)に移されます。これは、元のベクトルと方向は同じで、大きさが定数倍(7倍)になっています。つまり、次式が成り立ちます。 \begin{equation} A \begin{pmatrix} x \\ y \end{pmatrix} = \lambda \begin{pmatrix} x \\ y \end{pmatrix} \end{equation} \(\lambda\)を固有値、\(\begin{pmatrix} x & y \end{pmatrix}^T\)を固有ベクトルと言います。どうしてこのようになるかは、この後の回の「対角化」の説明を見ていただくとして、ここでは、\(2\times2\)行列\(A\)の固有値、固有ベクトルを求めてみましょう。上記の式から、次式が成り立ちます。 \begin{equation} A \begin{pmatrix} x \\ y \end{pmatrix} = \lambda \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} \\ \begin{pmatrix} 3 - \lambda & 5 \\ 4 & 2 - \lambda \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \end{pmatrix} \end{equation} この式がベクトル\( \begin{pmatrix} x \\ y \end{pmatrix} \neq \begin{pmatrix} 0 \\ 0 \end{pmatrix} \)を持つ条件は、次式で与えられます。 \begin{equation} \det \begin{pmatrix} 3 - \lambda & 5 \\ 4 & 2 - \lambda \end{pmatrix} = 0 \end{equation} したがって \begin{equation} (3 - \lambda) (2 - \lambda) - 20 = \lambda^2 -5 \lambda -14 = 0 \end{equation} これを解くと、\(\lambda = -2, 7\)です。固有値が\(\lambda = -2\)のとき、固有ベクトルは\( \begin{pmatrix} 1 \\ -1 \end{pmatrix} \)となります。固有値が\(\lambda = 7\)のとき、固有ベクトルは\( \begin{pmatrix} 5 \\ 4 \end{pmatrix} \)となります。

    2017年7月25日火曜日

    基底の変換

    先の線形変換では、座標\((x, y)\)を変えずに、基底の変換を行いました。今度は、座標系の位置はそのままで、基底を変換したらどうなるか考えてみましょう。 まず、\( \vec{a} = \begin{pmatrix} 3 \\ 4 \end{pmatrix} \)、\( \vec{b} = \begin{pmatrix} 5 \\ 2 \end{pmatrix} \)としますと、この基底の下での座標\((2, 1)\)は、 \begin{equation} 2 \vec{a} + 1 \vec{b} = 2 \begin{pmatrix} 3 \\ 4 \end{pmatrix} + \begin{pmatrix} 5 \\ 2 \end{pmatrix} = \begin{pmatrix} 11 \\ 10 \end{pmatrix} \end{equation} となります。この座標ベクトル\( \begin{pmatrix} 11 \\ 10 \end{pmatrix} \)は、標準基底\(\vec{e_1},\vec{e_2}\)では \begin{equation} \begin{pmatrix} 11 \\ 10 \end{pmatrix} = 11 \begin{pmatrix} 1 \\ 0 \end{pmatrix} + 10 \begin{pmatrix} 0 \\ 1 \end{pmatrix} = 11 \vec{e_1} + 10 \vec{e_2} \end{equation} と表されます。

     ここで、基底\(\vec{a},\vec{b}\)自体を、標準基底\(\vec{e_1},\vec{e_2}\)で表しますと、 \begin{equation} \begin{pmatrix} 3 \\ 4 \end{pmatrix} = z_1 \begin{pmatrix} 1 \\ 0 \end{pmatrix} + z_2 \begin{pmatrix} 0 \\ 1 \end{pmatrix} \\ \begin{pmatrix} 5 \\ 2 \end{pmatrix} = z_3 \begin{pmatrix} 1 \\ 0 \end{pmatrix} + z_4 \begin{pmatrix} 0 \\ 1 \end{pmatrix} \end{equation} となりますから、\( z_1 = 3, z_2 = 4, z_3 = 5, z_4 = 2 \)です。これを、行列で表しますと、 \begin{equation} \begin{pmatrix} 3 \\ 4 \end{pmatrix} = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \begin{pmatrix} 3 \\ 4 \end{pmatrix} \\ \begin{pmatrix} 5 \\ 2 \end{pmatrix} = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \begin{pmatrix} 5 \\ 2 \end{pmatrix} \end{equation} となります。さらに列ベクトルを横に並べれば、 \begin{equation} \begin{pmatrix} 3 & 5 \\ 4 & 2 \end{pmatrix} = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \begin{pmatrix} 3 & 5 \\ 4 & 2 \end{pmatrix} \end{equation} となります。ここで右辺の右側の行列を \( A = \begin{pmatrix} 3 & 5 \\ 4 & 2 \end{pmatrix} \) とおきますと、 \begin{equation} \begin{pmatrix} \vec{a} & \vec{b} \end{pmatrix} = \begin{pmatrix} \vec{e_1} & \vec{e_2} \end{pmatrix} A \end{equation} です。

     さて、基底\(\vec{a},\vec{b}\)の下での座標\((2, 1)\)は与えられていましたが、本来未知です。そこで、この座標を\((i, j)\)とおきますと、この座標ベクトルは、\( i \vec{a} + j \vec{b} \)と表されます。この式は、\( \begin{pmatrix} \vec{a} & \vec{b} \end{pmatrix} \begin{pmatrix} i \\ j \end{pmatrix} \) とも表され、\( 11 \vec{e_1} + 10 \vec{e_2} \) は \( \begin{pmatrix} \vec{e_1} & \vec{e_2} \end{pmatrix} \begin{pmatrix} 11 \\ 10 \end{pmatrix} \) とも表されますから、標準基底 \(\vec{e_1},\vec{e_2}\) での座標ベクトル \( \begin{pmatrix} 11 \\ 10 \end{pmatrix} \)は、 \begin{equation} \begin{pmatrix} 11 \\ 10 \end{pmatrix} = \begin{pmatrix} \vec{e_1} & \vec{e_2} \end{pmatrix} \begin{pmatrix} 11 \\ 10 \end{pmatrix} = \begin{pmatrix} \vec{a} & \vec{b} \end{pmatrix} \begin{pmatrix} i \\ j \end{pmatrix} = \begin{pmatrix} \vec{e_1} & \vec{e_2} \end{pmatrix} A \begin{pmatrix} i \\ j \end{pmatrix} \end{equation} となります。したがって、 \begin{equation} \begin{pmatrix} 11 \\ 10 \end{pmatrix} = A \begin{pmatrix} i \\ j \end{pmatrix} \end{equation} を得ます。\( \begin{pmatrix} i \\ j \end{pmatrix} \) を求めるには、左から \( A \) の逆行列をかけます。 \begin{equation} \begin{pmatrix} i \\ j \end{pmatrix} = A^{-1} \begin{pmatrix} 11 \\ 10 \end{pmatrix} \end{equation} \( A = \begin{pmatrix} 3 & 5 \\ 4 & 2 \end{pmatrix} \)ですから、 \( A^{-1} = \begin{pmatrix} \frac{-1}{7} & \frac{5}{14} \\ \frac{2}{7} & \frac{-3}{14} \end{pmatrix} \)です。したがって、 \begin{equation} \begin{pmatrix} i \\ j \end{pmatrix} = \begin{pmatrix} 2 \\ 1 \end{pmatrix} \end{equation} を得ます。ここまで標準基底 \(\vec{e_1},\vec{e_2}\) を考えてきましたが、一般の基底 \(\vec{c},\vec{d}\) に置き換えても構いません。つまり、基底を次のように変換する変換行列 \( A \) があったとして、 \begin{equation} \begin{pmatrix} \vec{a} & \vec{b} \end{pmatrix} = \begin{pmatrix} \vec{c} & \vec{d} \end{pmatrix} A \end{equation} 基底 \(\vec{c},\vec{d}\) の下での座標 \(\begin{pmatrix} k \\ l \end{pmatrix}\) から基底 \(\vec{a},\vec{b}\) の下での座標 \(\begin{pmatrix} i \\ j \end{pmatrix}\) を求めるには、 \begin{equation} \begin{pmatrix} i \\ j \end{pmatrix} = A^{-1} \begin{pmatrix} k \\ l \end{pmatrix} \end{equation} です。

    2017年7月18日火曜日

    線形変換

    座標\((2, 1)\)を原点からのベクトル\(\begin{pmatrix} 2 \\ 1 \end{pmatrix}\)と考えれば、 \begin{equation} \begin{pmatrix} 11 \\ 10 \end{pmatrix} = \begin{pmatrix} 3 & 5 \\ 4 & 2 \end{pmatrix} \begin{pmatrix} 2 \\ 1 \end{pmatrix} \end{equation} となります。これは、線形変換\(f\)の表現行列が \begin{equation} A = \begin{pmatrix} 3 & 5 \\ 4 & 2 \end{pmatrix} \end{equation} であるとき、\(f\)によって座標\((2, 1)\)が\((11, 10)\)に移されると考えることができます。図に描けば、以下のようになります。

    標準基底を\(\vec{e}_x = \begin{pmatrix} 1 \\ 0 \end{pmatrix} \)、\(\vec{e}_y = \begin{pmatrix} 0 \\ 1 \end{pmatrix} \)にとりますと、座標\((x, y)\)は、 \begin{equation} \begin{pmatrix} x \\ y \end{pmatrix} = x \begin{pmatrix} 1 \\ 0 \end{pmatrix} + y \begin{pmatrix} 0 \\ 1 \end{pmatrix} = x \vec{e}_x + y \vec{e}_y \end{equation} と表せます。これに線形変換\(f\)を施せば、 \begin{equation} f(x \vec{e}_x + y \vec{e}_y) = x f(\vec{e}_x) + y f(\vec{e}_y) = x \begin{pmatrix} 3 \\ 4 \end{pmatrix} + y \begin{pmatrix} 5 \\ 2 \end{pmatrix} \end{equation} となります。ここで、\( \vec{a} = \begin{pmatrix} 3 \\ 4 \end{pmatrix} \)、\( \vec{b} = \begin{pmatrix} 5 \\ 2 \end{pmatrix} \)としますと、 \begin{equation} \begin{pmatrix} x^\prime \\ y^\prime \end{pmatrix} = x \vec{a} + y \vec{b} \end{equation} を得ます。\( \vec{a} \)、\( \vec{b} \)を基底と考えると、\( \begin{pmatrix} x^\prime \\ y^\prime \end{pmatrix} \)は、\( \vec{a} \)、\( \vec{b} \)が張る座標系上の座標\((x, y)\)となります。図に描けば、以下のようになります。

    つまり、線形変換\(f\)は、標準基底で\( x \vec{e}_x + y \vec{e}_y \)と表される座標を、基底\( \vec{a} \)、\( \vec{b} \)で\( x \vec{a} + y \vec{b} \)と表される座標に移す変換と考えることができます。別の言い方をすれば、標準基底の直交座標系での座標\((x, y)\)を、基底\( \vec{a} \)、\( \vec{b} \)が張る座標系での座標\((x, y)\)に移す変換ということができます。

    2017年3月23日木曜日

    CentOS7にcuDNNをインストール

    (参照http://qiita.com/skanai/items/0f0a9bdd7e04d55db981)
    cuDNNは、Deep Neural NetworkをGPUで高速化するためのライブラリである。NVIDIAが提供する。インストール作業は手間じゃないけど、cuDNNをダウンロードするとき、NVIDIAのサイトでログインする必要がある(アカウントのない人は登録する)。

    https://developer.nvidia.com/cudnn

    ダウンロードしたディレクトリで解凍する。
    $ tar xvfz cudnn-8.0-linux-x64-v5.1.tgz

    解凍された一連のファイルを、CUDAをインストールしたディレクトリにコピーする。
    $ cd cuda
    $ sudo cp -a lib64/libcudnn* /usr/local/cuda/lib64/
    $ sudo cp -a include/* /usr/local/cuda/include/
    $ sudo ldconfig