- 締切済み
MATLABでマハラノビスの距離から楕円を描く方法が分からず困ってます。
MATLABでマハラノビスの距離から楕円を描く方法が分からず困ってます。 現在研究で移動物体の位置推定を行っています。 プログラムソフトはMATLABを使っています。 その位置推定が正確かどうかの指標として、マハラノビスの距離を求め、二次元平面上に楕円を描き、移動軌跡がその楕円内にあるかを確認することが今後必要になります。 そのため、楕円をプログラムでプロットする必要があるのですが、その方法が分からず困っています。 些細なことでも構いませんので、回答していただけるとありがたいです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- sinisorsa
- ベストアンサー率44% (76/170)
#1です。手元でmatlabが使えないので、方針だけ書きましょう。 (1)Σの固有値問題を解く 確かeigenという関数があったと思います。helpをみてください。 [L,P]=eigen(S); だったかな?(もしかするとLとPの順序が逆?) Lは固有値を対角要素とする行列 固有値をL1、L2とします。 Pは固有ベクトル行列 すなわち、直交行列 P’P=I(単位行列)ゆえに P^(-1)=P’ (2)X=Pxとすると(y=0として) X=[X1,X2]’として、楕円の方程式は、 (X1^2/L1)+(X2^2/L2)=c となりますから、a=sqrt(c*L1)、b=sqrt(c*L2)とすると、 aとbは楕円の長短の径となります。 (3)グラフ化の処理 n=0:200; dw=2*pi/200; (2πを200分の1) w=dw*n; (0~2πの200等分点) X1=a*cos(w); X2=b*sin(w); このまま、plot(X1,X2)でグラフを描くと長短径が座標軸方向と なっていますから、 後はP'で回転しましょう。 X1,X2が行ベクトルか列ベクトルだったか未確認なので、 一応列ベクトルだとして、(行だったら転置してください) X=[X1 X2]; 元の座標系に戻すには、 x=P’X; xの第1列のベクトルをx1と第2列のベクトルをx2として、 plot(x1,x2); 元の座標軸での楕円になると思います。 うる覚えで書いていますから、helpを参照してください。 参考になれば幸いです。
- sinisorsa
- ベストアンサー率44% (76/170)
マハラノビスの距離というのは、 d(x,y)=(x-y)'Σ^(-1)(x-y) でいいでしょうか? ’は転地です。 楕円を描くというのは、yを原点に取って、 d(x,y)=c(一定)のグラフを描くということでしょうか? 一定値cはどのように決めますか。 一応、cは決めたとして、 ΣをP'ΛPに分解する。Σの固有値、固有ベクトルを求め Λは、対角行列で、固有値が対角要素。 Pは固有ベクトルを並べた行列。 X-Y=P(x-y)と置くと、d(x,y)=(X-Y)'Λ(X-Y)=c となります。これは、長径、短径が座標軸に平行となります。 これをもとに楕円を描けるので、P’を使って座標を回転すれば よいでしょう。 固有値問題はMatlabに関数があるでしょう。 座標回転は行列の掛け算。 とりあえず、思いつくままに。
補足
回答ありがとうございます。 もう少し詳しく書いておくべきでした。 マハラビスの距離は、d(x,y)=(x-y)'Σ^(-1)(x-y)の式です。 楕円はyを原点に取って、c=(一定)描きます。 楕円は「95%信頼楕円」として考えるので、c=2.45くらい(違うかもしれません)で描きます。 式の意味はある程度理解できました。 しかし、まだPを決めて楕円を回転させる方法がよく分かりません。 適当な式でいいのでその例(MATLABのプログラム)を挙げて頂けると助かります。
お礼
丁寧な回答ありがとうございました。 おかげでグラフ化も行うことができました。 今回の回答で理解したことを今後も研究の参考にさせていただきます。