任意点周りの回転移動(アフィン変換)

回転行列では原点周りに点を回転させますが、任意の点(C、C周りに回転させたい場合にはどうするのか?

 

 

これまでの知識を少し応用することで、意外と簡単に求めることができます。

 

まず、回転する点を回転中心座標が原点と一致するように点を移動させます。

 

次に移動した点を原点周りに回転移動させます。

 

 

回転移動後、点を原点から元の回転中心位置へ移動させます。

 

 

これで、任意点(C、C周りに点を回転移動させることができました。

 

この 原点へ移動→原点周りの回転→元へ戻す の一連の処理を行列であらわすと

 

 

行列部分を整理すると

 

 

となり、任意点(C、C周りに点を回転移動させる行列を求めることができます。

 

今回は回転移動について説明しましたが、拡大縮小についても、任意点を基点に拡大縮小する場合についても同様です。

この考え方は、二次元の座標だけでなく、三次元の場合も使えます。。

参考

アフィン変換(平行移動、拡大縮小、回転、スキュー行列)

 

使える数学へ戻る

 

回転行列、拡大縮小行列、平行移動行列(三次元座標の場合)

二次元座標(X,Y座標)の場合のアフィン変換行列についてはこちらで説明しましたが、今回は三次元座標(X,Y,Z座標)のアフィン変換となります。

三次元座標の場合、まず座標軸の定義、回転方向の定義を明確に覚えます。

この座標は右手座標系と呼ばれます。
フレミングの法則のときのように右手親指人差し指中指をそれぞれ
直交するようにします。
このとき親指から順に親指がX軸人差し指がY軸中指がZ軸の方向と
なります。
回転方向は電流と磁界の向きと同じように電流軸の向き磁界回転方向
に相当します。(右ねじの法則と同じです。)

 

回転行列

三次元の回転行列の前に二次元の回転行列のおさらいです。
二次元の回転行列は以下の通りとなります。

 

 

これをベースに三次元座標の場合では、回転する軸の正の方向から原点の方向を見たときに、X軸、Y軸はそれぞれ何軸に相当するのか?を考えれば、二次元座標のXやYの変数の置き換えで導き出すことができます。
行列変換しない軸に関しては単位行列でそのまま残します。

 

【X軸周りの回転】

【Y軸周りの回転】

【Z軸周りの回転】

拡大縮小行列

点(x, y, z)を原点に関してX軸方向に、Y軸方向に、Z軸方向にZする行列は

 

平行移動行列

点(x, y, z)をX軸方向に、Y軸方向に、Z軸方向にZだけ移動する行列は

 

補足

三次元の座標変換に関して検索すると座標変換は下記のように

行ベクトルで表記される場合もあるのですが、変換行列の値が変わるので、
混同しないようご注意下さい。
この表現はマイクロソフトがお得意で、DirectX(Direct3D)や.NETのアフィン変換でしか使われないので、特に必要の無い場合は覚えない方が無難です。

 

関連記事

二次元座標のアフィン変換についてはこちら↓にまとめています。

アフィン変換(平行移動、拡大縮小、回転、スキュー行列)

 

使える数学へ戻る

 

回転行列、拡大縮小行列、平行移動行列

本記事は、私がアフィン変換を勉強し始めた当初の記事になります。
今では、3×3行列の同次座標行列と呼ばれる行列しか用いておらず、こちらの方が断然おススメなので、下記ページを参照ください。

アフィン変換(平行移動、拡大縮小、回転、スキュー行列)

以下は、2×2行列を使ったアフィン変換の説明です。

回転行列

点(x, y)を原点まわりに反時計方向にθ度回転する行列は

 

拡大縮小行列

点(x, y)を原点に関してX軸方向に、Y軸方向にする行列は

 

平行移動行列

点(x, y)をX軸方向に、Y軸方向にだけ移動する行列は

 

 

ただし、平行移動だけ行列の足し算になると、扱いにくい場合があるので3×3行列を用いて以下のように表す場合もあります。
というより、こちらを使う方が便利です。(私はこちらしか使いません。)

【回転行列】

【拡大縮小行列】

【平行移動行列】

 

とすることで、すべての座標変換を行列の積で扱うことができます。

この行列を同次座標行列と言います。
詳細はこちらを参照ください。

 

参考まで...

個人的には回転行列を覚えるのは苦手で、SinとCosが逆になっりマイナスのつける位置を間違ったりしていたのですが、次のように考えることで少しは覚えやすくなりました。

下図のように

点(1,0)をθ度回転すると(Cosθ、Sinθ)
点(0,1)をθ度回転すると(-Sinθ、Cosθ)

に移動することはすぐにわかります。

このことを行列で表現すると
点(1,0)が(Cosθ、Sinθ)になることから

点(0,1)が(-Sinθ、Cosθ)になることから

という事がわかります。
これを合わせて表現すると

となり、回転行列が求まります。
この計算を何回か繰り返すと、そのうち覚えると思います。

 

使える数学へ戻る

 

【Excel】行列の積、逆行列、転置行列の計算

エクセルで行列の計算をするときの最大のポイントは、計算式を入力後

 

を同時に押すことです。

 

エクセルのヘルプを見ても、この事はどこに書いてあるのか?分からないので、ちょっとハマりやすいかもしれません。(私ははまりました。)

 

行列の積[MMULT(行列1,行列2)]

まず、行列の積の計算を行う行列を入力しておきます。
次に行列の積の計算結果を表示するセルを選択します。

 

 

セルを選択した状態で、行列の積の計算式

 

= MMULT(行列1, 行列2)

 

を入力します。

 

 

ここで、EnterではなくCtrlキーとShiftキーとEnterキーを同時に押します。

 

 

逆行列[MINVERSE(行列)]

逆行列に関しても同様に

 

=MINVERSE(行列)

 

と入力します。

 

 

ここで、EnterではなくCtrlキーとShiftキーとEnterキーを同時に押します。

 

 

転置行列[TRANSPOSE(行列)]

転置行列の計算式は

 

=TRANSPOSE(行列)

 

となります。

 

 

クドいですが、EnterではなくCtrlキーとShiftキーとEnterキーを同時に押します。

 

 

この行列の積、逆行列、転置行列がエクセルで解けると何が良いか?というと、

 

●連立方程式
●座標の回転
●最小二乗法
●擬似逆行列(一般逆行列)

 

などが解けるようになります。
これらを知らないと、いちいちプログラムを組んで計算の検証をしたりもしますが、
エクセルで出来るようになると、とっても簡単、お手軽です。

行列で連立方程式を解く

行列を使って連立方程式を解く方法を紹介します。

 

【計算例】

3つの方程式

 

 

を行列であらわすと

 

 

となります。この行列を逆行列を使ってX、Y、Zに関して解くと

 

 

となり連立方程式を行列で解くことができます。

 

 

…というのは普通すぎて面白くないので、3点からなる円の方程式を行列で解く方法を紹介します。

 

中心(a、b)、半径 r の円の方程式

 

(X – a)2 + (Y – b)2 = r2

 

を展開して

 

X2 + Y2 – 2aX – 2bY + a2 + b2 – r2 =  0

 

となり、A = 2a、B = 2b、C = r2 – a2 – b2 とおくと、上式は

 

AX + BY + C  =   X2 + Y2

 

となります。

 

ここで、円上の3点(X0、Y0)、(X1、Y1)、(X2、Y2を代入すると

 

AX0 + BY0 + C  =  X02 + Y02
AX1 + BY1 + C  =  X12 + Y12
AX2 + BY2 + C  =  X22 + Y22

 

の3本の式が成り立ち、これを行列で表現すると、

 

 

となり、A、B、Cに関して行列を解くと

 

 

となり、A、B、Cが求まることから、A = 2a、B = 2b、C = r2 – a2 – b2 より
中心半径を求めることができます。

 

行列を解く部分は

ガウスの消去法

のページを参照下さい。

 

使える数学へ戻る

 

UVWステージのしくみ(位置決め用高精度XYθステージ)

工業用の画像処理の分野では画像を撮影して検査をするばかりでなく、半導体やFPDの業界では位置決め(アライメント)用途にも応用されています。今回は位置決め用途で用いられているUVWステージという、高精度のステージを紹介したいと思います。

 

通常のXYθステージUVWステージの基本構造は以下のようになっています。(若干異なる場合もあります。)

【通常のXYθステージ】

 

【UVWステージ】

 

UVWの各軸は、下図のように可動します。

 

UVWステージでXYθの位置決めが出来る原理は、

 

上図のようにU軸を動かすとステージはX方向へ移動し、V軸とW軸を同時に動かすとY方向へ移動します。
さらにU軸、V軸、W軸を同時に動かすとステージは回転します。

 

UVWステージの特徴は

  • ステージの高さを低く抑えられる
  • 二層構造なので、ベース面とステージ面との平行度を出しやすい
  • モーターが移動しないので、配線が用意(断線する可能性が低い)
  • 高精度

など。
なぜ?UVWステージが高精度の位置決めが可能になるかというと、特に回転方向の位置決めにおいて、同じ移動分解能のモータを使う場合、てこの原理のように、回転中心から離れた位置でステージを動かした方が回転の分解能は向上します。

 

FPDなどの位置決めにおいては、ステージのサイズも大きくなり易いので、ステージの両端で回転方向を制御するUVWステージは有効的に高精度な位置決めを可能としてくれます。

 

そんな良い事だらけのUVWステージですが、欠点もあります。

  • 移動可能範囲が狭い
  • ステージ制御が難しい

など。
移動可能範囲が狭いのは、もともと位置決め用途で使われる場合の多いUVWステージなので、最初にメカ的に粗調整しておき、UVWステージで精調整する場合が多いので、あまり問題にはならないと思います。

 

ステージ制御においては、位置決めマークの位置を画像処理で抽出し、ズレ量を算出し、目的の位置へと合わせ込みますが、この時のずれ量は通常、X、Y、θのずれ量で算出されます。
しかし、XYθ軸の移動量からUVW軸の移動量へと変換するには、ちょっと面倒なのでUVWステージの制御や位置決めの処理をライブラリ化している物もあるので、使用を検討してみては如何でしょうか?

 

【主なUVWステージメーカ】

ヒーハイスト精工株式会社

【Excel】任意関数のグラフの描画

これまで紹介してきたテクニックを使って、正規分布の確率密度関数を例にとって、任意関数のグラフの描画方法を紹介します。

 

確率密度関数は以下の式です。

 

この式のグラフを書くには、まず、Xの値を記入します。
この方法は連番の入力でも紹介しましたが、A7のセルに初期値の-6A8のセルに次の値の-5.5を入力し、マウス操作によりA列のセルに-6~6までの連番を記入しています。

次にf(x)の計算式にはB7のセルに

=1/(SQRT(2*PI())*B$5)*EXP(-($A7^2/2/B$5^2))

と入力します。
このB7のセルをコピーして他のf(x)に相当する部分に貼り付けても、X座標およびσの値の参照先が移動しないようにアルファベット部分および数字部分の頭にを付けてから、コピーおよび貼り付けをします。
なぜを付けるのか?については固定セルの参照(絶対参照)のページを参考にして下さい。

 

これで、f(x)の値は全て計算できるので、あとはキー操作を駆使してグラフの描画範囲を選択しグラフの散布図を用いてグラフ表示します。

 

ファイルの実体はこちら  gauss.xls

【Excel】固定セルの参照(絶対参照)

エクセルのセルに、他のセルを参照した式を他のセルにコピーすると、数式は行方向、列方向の位置関係を保ったまま、数式がコピーされます。この事は相対参照というのですが、エクセルの初期状態ではこの相対参照となっています。

 

しかし、何かしらのレートなどを参照したい場合は、セルの式をコピーしても常に同じセルを参照したい場合があります。

 

この常に同じセルを参照する方法を絶対参照といい、この絶対参照の方法を工数の見積表の作成を例にとって紹介します。

 

結論からすると、固定したいセルの名前の頭に

$A$1、$A1、A$1

などと$を付ければいいのですが、

列方向を固定したい場合はアルファベットの頭にを、
行方向を固定したい場合は数字の頭に

を付けます。

 

以下、具体例です。

 

上図のように工数の見積表を作成する場合は、小計のセルには全て工数×工数単価の値を
入力しますが、最初にC4のセルに工数×工数単価の計算式「=B4*C1」を入力しC4のセルを
コピーして下の小計欄に全て貼り付けると下図のようになってしまいます。

 

 

これはエクセルではデフォルトで相対的な位置のセルを参照してしまう(今回の例では常に3つ上のセルを参照)ためで、この参照方法を相対参照といいます。
実際の計算式は下図のようになっています。

 

 

しかし、実際にはC1~C8のセルは全てC1をしたいので、C4のセルをコピーして他の小計のセルに貼り付けて、常にC1のセルを参照するようにセルの名前(B4C1など)のアルファベット部分か
数字部分の変えたくない方の頭に$をつけておきます。
今回の例では数字部分を変えたくないので、C$1とします。
ちなみに、アルファベット部分、数字部分両方を固定するのが絶対参照、どちらか一方だけを
固定するのが、複合参照というそうです。

 

 

この状態で、C4のセルをコピーして、他の小計のセルに貼り付けると、目的どおりに工数単価は
固定セル(C1)を参照することが出来ます。

 

 

実際の計算式は下図のようになってくれています。

 

 

この方法を知る前は、すべてのセルに手入力で計算式を入れてました...

 

Excelへ戻る

Windows7がシャットダウンしない場合

最近、私のWindows7マシンをシャットダウンする時に、シャットダウンしていますと表示されたまま、シャットダウンしない現象が多発し、しょうがないので、電源ボタンの長押しをして電源を落としていました。

 

シャットダウンしない原因を探してみると以下のような原因が考えられるとのこと。

 

①ビデオカードなどのドライバの不具合
②常駐ソフトによる問題(私の場合はこれが原因でした)
③ハードディスクの電源がOFFになっているため

 

など。
①に関しては、Windows Updateやドライバの更新などもやってみましたが、現象は変わらず

 

②は手間ですが、怪しい常駐ソフトを終了してみてシャットダウンして、シャットダウンすれば、そのアプリがかなり怪しいと思われます。

 

私の場合は、iPhoneを無線LANにつなぐために使っていたGW-USNano2-GというUSBタイプの無線LANの常駐ソフト(クライアント・マネージャ)をアンインストールしたところ、今のところシャットダウンしてくれるようになりました。

(せっかく買ったのに、使い物にならなくなってしまいました...)

 

③はハードディスクがシャットダウン時に電源がOFFになっているとシャットダウンできない場合があるとのこと。
試しにシャットダウンの前にエクスプローラで各ドライブをクリックしてドライブの内容を表示させ、ドライブをONにしてからシャットダウンを行った。これでシャットダウンしれくれる場合もありました。

 

ということで、私の場合は増設したハードディスクの電源がOFFになっていたため、Windows7がシャットダウンできなかったみたい。
そのため、電源管理の設定をいろいろ見てみたが、非アクティブなハードディスクの電源を切る時間設定はあるものの、常にオンのような設定が無い。

 

そこで、③の操作をC#でプログラム的に行い、最後にshutdown.exeを実行させるだけのプログラムを作ってみました。

 

シャットダウンしてくれない人は試してみては?
これ↓

 

ShutdownEx.zip

 

使い方は上記のファイルをダウンロード、解凍し、ファイル(ShutdownEx.exe)をデスクトップなど、どこでもいいのですが、ファイルを置いておき、シャットダウンしたい時に、このファイルをダブルクリックして実行します。

 

ただし、プログラム実行後、すぐにシャットダウン動作に入るので、実行する前に編集中のファイルを保存するなどして、ご注意下さい

 

プログラミングへ戻る

【Excel】連番の入力

エクセルで1、2、3・・・と連番を入力する場合に簡単に入力する方法を紹介します。

 

 

まず、始めに初期値次の値の順でセルに値を入力します。

 

次にこの2つのセルを選択し、右下に表示される黒四角(■)の部分にマウスを合わせます。
するとマウスのアイコンが十字 (+) に変わるので、この状態でマウスをクリックしたまま
下の方にマウスを移動します。

 

 

すると下図のように連番を入力することが出来ます。

 

 

他にも下図のような初期値次の値を入力すると

 

 

このように↓なります。

 

 

この規則性はエクセルのツール⇒オプションユーザー設定リストのタブで指定できます。

 

 

 

Windowsドライバの削除方法

Kinectなどで遊んでいると、OpenNIなど、いくつかのドライバ・ライブラリが出回っているため、使うソフトによって、ドライバを削除・インストールを行い切り替える必要があるのですが、ちょっとはまりやすいので、ドライバの削除方法について、まとめておきます。

 

注)ドライバの削除を誤ると、他のデバイスが動作しなくなる場合がありますので、ドライバの削除は十分注意のうえ、自己責任で行って下さい。

 

Windowsのドライバを削除する場合、スタートメニューよりコントロールパネル→デバイスマネージャーで削除するデバイスを右クリックして削除を行っても、デバイスマネージャーのメニューの操作→ハードウェア変更のスキャンをクリックすると削除したはずのドライバが元に戻ってしまいます。

 

 

そうならないようにするためにもドライバを完全に削除する方法を紹介します。

まず、削除するデバイスを選択し、右クリックしプロパティをクリックします。

 

 

次に表示されたウィンドウのドライバータブのドライバーの詳細をクリックします。

 

 

するとデバイスドライバが使用しているファイルが表示されているので、これらのファイルを削除します。

 

ちなみにKinect-v**-withsourceを使ってドライバをインストールした場合は以下の3つのファイルを削除します。
C:\Windows\System32\drivers\libusb0.sys
C:\Windows\System32\libusb0.dll
C:\Windows\SysWOW64\libusb0.dll
(ただし、削除したドライバが元に戻らなくするだけなら、これらのファイルを削除する必要はありません。
あくまで、完全にドライバを削除する場合)

 

次にC:\Windows\infのフォルダ内にある*.infファイルの中から、削除するデバイスが使用していると思われるファイルを見つけます。
infファイルをメモ帳などで開き、DeviceNameやSourceNameなどを参考にしながら対象のinfファイルを探し出します。

 

ちなみに、Kinect-v**-withsourceを使ってドライバをインストールした場合は、以下のように表示されている3つのファイルが相当します。

; Xbox_NUI_Motor.inf
; Copyright (c) 2010 libusb-win32 (GNU LGPL)
[Strings]
DeviceName = "Xbox NUI Motor"
VendorName = "Microsoft Corp."
SourceName = "Xbox NUI Motor Install Disk"
DeviceID   = "VID_045E&PID_02B0"
DeviceGUID = "{283E6E32-2356-4775-9D97-0B4EA8775D39}"
・・・

 

; Xbox_NUI_Camera.inf
; Copyright (c) 2010 libusb-win32 (GNU LGPL)
[Strings]
DeviceName = "Xbox NUI Camera"
VendorName = "Microsoft Corp."
SourceName = "Xbox NUI Camera Install Disk"
DeviceID   = "VID_045E&PID_02AE"
DeviceGUID = "{D3074D04-3130-4FF6-A71F-D810C5D59867}"
・・・

 

; Xbox_NUI_Audio.inf
; Copyright (c) 2010 libusb-win32 (GNU LGPL)
[Strings]
DeviceName = "Xbox NUI Audio"
VendorName = "Microsoft Corp."
SourceName = "Xbox NUI Audio Install Disk"
DeviceID   = "VID_045E&PID_02AD"
DeviceGUID = "{D4AF50D4-8548-420F-87E4-F3B9AE4F5918}"
・・・

 

*.infファイルはoem**.infというようなファイル名になっている場合が多いのですが、oem**.infファイル同じ名前のoem**.PNFファイルの2ファイルをセットで削除します。
Kinectの場合、Motor、Camera、Audio用のファイル3セット(*.infと*.PNF)、計6つのファイルを削除します。

そして最後に?(最後じゃなくてもいいかも?)、削除するデバイスを選択して右ボタンクリックで削除をクリックします。

これで、ハードウェア変更のスキャンを行っても、ドライバが元に戻る事は無くなるので、新たにドライバをインストールすることが可能となります。

 

 

Kinect参考書籍、KINECTセンサープログラミング

世界初と言われる、Kinectの参考書籍が発売されます。(5月24日発売予定)

 

 

この本の対象者はプログラム中級者としているようにKinectのプログラムは最低限のC言語、C++の知識が必要となります。

 

私も勢いでKinectを買ってみたものの、動作が拾えるまではいいのですが、その先、何をするか?が一番の問題。

 

目次

OpenNIおよびSensorモジュールのライセンス
OpenCVのライセンス
1. Kinect入門

1.1. KinectとOpenNI

1.1.1. Kinectの概要
1.1.2. OpenNIの概要
1.1.3. Kinectプログラミングにあたって

2. OpenNIプログラミング環境の作成

2.1. OpenNI開発環境の作成

2.1.1 本書の開発環境
2.1.2. Windows C++
2.1.3. Windows C#
2.1.4. Linux(Ubuntu)
2.1.5. Mac OS
2.1.6. 開発環境作成における注意点

3. OpenNI入門

3.1. OpenNIの構成

3.1.1. OpenNIライブラリのクラス概要
3.1.2. Generator
3.1.3. MetaData
3.1.4. Capability

3.2. OpenNIプログラミング

3.2.1. Kinectの初期化や情報取得をする
3.2.2. カメラ画像を表示する
3.2.3. 距離を測定する
3.2.4. デプス(深度)マップを作成する
3.2.5. ビューポイントの設定
3.2.6. ミラー処理
3.2.7. ユーザーの検出をする
3.2.8. ユーザーのスケルトンを作成する
3.2.9. ジェスチャーを検出する
3.2.10. 手の動きをトラッキングする
3.2.11. Kinectから取得したデータを記録する
3.2.12. 記録したデータを再生する

4. NITE入門

4.1. NITEの構成

4.1.1. NITEライブラリのクラス
4.1.2. Session
4.1.3. Detector

4.2. NITEプログラミング

4.2.1. セッションの開始と停止
4.2.2. 腕の前後動作(プッシュ)を検出する
4.2.3. 腕の左右動作(ウェーブ)を検出する
4.2.4. 腕の円運動を検出する
4.2.5. 腕の上下左右運動(スワイプ)を検出する
4.2.6. 動作の停止を検出する
4.2.7. マルチプロセスに対応する(サーバ)
4.2.8. マルチプロセスに対応する(クライアント)

5. 応用編

5.1. 光学迷彩
5.2. 背景のマスク
5.3. ポーズの検出
5.4. 物体検出
5.5. 複数のKinectを操作する
5.6. KinectでPowerPointの操作

6. 補遺

6.1. 開発環境の作成

6.1.1. Windows
6.1.2. Linux
6.1.3. Mac OS

 

ちなみに、KinectをPCに接続する場合は、Kinectセンサー単品で購入しないとUSBの接続ケーブルが付いてこないそうなので、ご注意下さい。

 

ガウスの消去法

ガウス(Gauss)の消去法は連立一次方程式を解くのに用いられます。

 

基本的な方針は、下記のような連立一次方程式

 

 

を行列であらわすと、

 

 

となりますが、対角成分を全て、左下の成分をになるように、行の入替えや足し算、引き算などを行い、下記の行列になるように調整します。

 


(?の部分は任意の値で可)

 

これまでの処理を前進消去といいます。
ここで、最後の行の部分(3の部分)に着目すると、答えが確定しています。
この値を使って最後から2行目の値を計算すると答えが算出できます。
このように最後の行から順々に計算すると答えが全て計算することができます。
この処理は後退代入といいます。
この前進消去と後退代入の処理を合わせてガウスの消去法といいます。

 

さらに、前進消去のときに対角成分を1にするときの割り算の計算のときにおいて、
ピボット選択を行ったGauss-Jordan法でも説明しましたが、

 

  • 0(ゼロ)で割ることはできない。
  • 値を絶対値の小さい値で割ると、値に誤差が含まれる場合、計算結果に大きく影響が出てしまう。

     

    という性質を考慮します。

     

    ということで、以下、具体的な計算例を示します。

     

    連立一次方程式


     

    のうち、まず最初に1の項のどれか1つを1にするのですが、割り算の計算で誤差が少なくなるように、1の係数が一番大きい2行目の式を一番上に持ってきます。

     

     

    次に1行目の式の1の係数がになるように1行目の式全体を1の係数()で割ります。

     

     

    次に1行目以下の式の1の項が消えるように、
    2行目-1行目×23行目-1行目を計算します。

     

     

    ここで、3行目の式の3の項(行列で表現すると対角成分)が消えてしまったので、
    このままだと対角成分をにできないので、2行目3行目を入れ替えます。

     

     

    次に2行目の式の2の係数をにするように、2行目の式全体に3/2を掛けます。

     

     

    次に2行目以下の2の項が消えるように3行目+2行目 × 2/3を計算します。

     

     

    3行目の式のの係数はすでになので、前進消去はこれで終了です。
    この3本の式を行列であらわすと

     

     

    というように、対角成分が全てがで左下の成分がになったことが分かります。

     

    次に後退代入です。

     

    一番下の行の式はすでに答えが確定(X3 = 3)しているのがわかります。
    一番下の答えを用いて、下から2行目の式の答えを計算、
    一番下、下から2行目の答えを用いて下から3行目の式の答えを計算していきます。
    (今回の例だけ特別に、下から2行目の式の答えが確定してしまっています。)

     

     

    こうして全ての答えが求まります。

     

     

    この一連の処理がガウスの消去法です。

     

    このガウスの消去法を用いると、連立方程式を求めたり、最小二乗法の未知数を
    求めることができます。

     

    使える数学へ戻る

     

    ピボット選択を行ったGauss-Jordan法

    前回紹介したGauss-Jordan法で解く逆行列の計算では例えば、

    のように対角要素に0(ゼロ)が来ると、0で割れないため、対角要素を1にする事ができません。

     

    そこで、対角要素に0(ゼロ)が来ないように行を入れ替えてGauss-Jordan法を行います。
    さらに、ある値を割る場合、分母の値は絶対値が大きい方が割り算の誤差が小さくなります。
    (この割る要素の事をピボット(pivot)と言います。)

     

    この事を考慮し、Gauss-Jordan法で逆行列を求める例を示します。

     

    行列の右側に単位行列を追加します。

    1行1列目の要素の絶対値が最大となるように1行目3行目を入れ替えます。

    1行1列目の要素が1となるように1行目4で割ります。

    1列目の要素が(1 0 0)となるように

    [2行目] = [2行目]ー[1行目]×3
    [3行目] = [3行目]ー[1行目]×2

    を計算します。

    ここで2行2列目の要素の絶対値はすでに最大なので、2行2列目の要素が1となるように
    2行目-9/4で割ります。

    2列目の要素が(0 1 0)となるように

    [1行目] = [1行目]-[2行目]×3/4
    [3行目] = [3行目][2行目]×1/2

    を計算します。

    ここで、3行3列目の要素はすでに1なので、3列目の要素が(0 0 1)となるように

    [1行目] = [1行目]-[3行目]×2/3
    [2行目] = [3行目]+[3行目]×2/9

    を計算します。

    これで、左側が単位行列となり、右側に出来た行列が求める逆行列となります。

     

    このようにピボット選択を考慮する事で、対角要素が0であっても逆行列を解くことが可能となる場合があります。

     

    使える数学へ戻る

     

    逆行列(Gauss-Jordan法)

    2×2行列の逆行列

    行列

    の逆行列は

    となります。
    ただし、ad-bc = 0 のとき、逆行列は存在しません。

     

    3×3以上の行列の逆行列

    逆行列を解く手法はいくつかありますが、ここでは比較的分かり易いGauss-Jordan法を紹介します。

     

    Gauss-Jordan法では行列の右側に単位行列を付けたして、行ごとに掛け算、足し算、引き算を行い、行列の左側が単位行列になるように計算を繰り返し、最後に右側に残った行列が逆行列となります。

     

    といっても分かりづらいと思うので、具体的な計算例は以下の通りです。

     

    行列

    の右側に単位行列を追加します。

    1行1列目の要素が1となるように1行目2で割ります

    1列目の要素が(1 0 0)となるように

    [2行目] = [2行目]ー[1行目]
    [3行目] = [3行目]ー[1行目]×4

    を計算します。

    2行2列目の要素が1となるように2行目2倍します。

    2列目の要素が(0 1 0)となるように

    [1行目] = [1行目]ー[2行目]×3/2
    [3行目] =
    [3行目]+[2行目]

    を計算します。

    ここで、3行3列目の要素はすでに1なので、3列目の要素が(0 0 1)となるように

    [1行目] = [1行目]+[3行目]×2
    [2行目] = [2行目]ー[3行目]×2

    を計算します。

    これで、左側が単位行列となり、右側に出来た行列が求める逆行列となります。

     

    ただ、このままの方法では、求める行列の対角要素(行数と列数の同じ場所)に0(ゼロ)がある場合は対角要素を1に出来ない(0で割れない)ので、ここにピボット選択という手法を導入します。
    このピボット選択についてはピボット選択を行ったGauss-Jordan法にて紹介しています。

     

    使える数学へ戻る

     

    【Excel】キー操作

    セル内改行

     

     

    矢印方向のセル追加選択

    or or or

     

     

    を押すと↓

     

     

    矢印方法の端のセル選択

    or or or

     

     

    + を押すと↓

     

     

    Shiftキー+Ctrlキーの合わせ技

    ShiftキーとCtrlキーを合わせて使うことで、グラフ表示領域の選択などが簡単に出来ます。

     

     

    を押すと↓

     

     

    次に

    を押すと↓

     

     

    となります。

     

    アクティブセルを編集状態にする

     

    再計算

    RAND()関数などの再計算を行います。

     

    再実行

    最後に行った処理を再実行します。
    セルの色の変更、フォントの変更などの処理を繰り返すのに便利