- ベストアンサー
求める球の最小二乗法とは?
- 最小二乗法を用いて球の中心座標と半径を求める方法について教えてください。
- エクセルを使用して式を立てて計算したが、中心がずれてしまう問題が発生しました。
- クラーメルの公式を使って解いたが、うまく求まらない状況です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こちらで計算すると(50,50,0)、半径50になりましたのでやはりExcelの入力ミスです。 さすがに結果だけではどこで間違っているかは想像つきませんので私の計算例を 書いておきますので参考ください。 以下、A1-A200,B1-B200,C1-C200にデータが入っているとして(200まで埋まっている必要なし) 記入するセル番号 記入式あるいは操作 で書いておきます。 このまま書き込みをコピペでもいいです。 D1 =SUMSQ(A1:C1) D2-D200 D1をコピーしてペースト E1 =SUMPRODUCT($A1:$A200,A1:A200) F1-G1 E1をコピペ E2 =SUMPRODUCT($B1:$B200,A1:A200) F2-G2 E2をコピペ E3 =SUMPRODUCT($C1:$C200,A1:A200) F3-G3 E3をコピペ E4 =SUM(A1:A200) F4-G4 E4をコピペ H1 =E4 H2 =F4 H3 =G4 H4 =COUNT(A1:A200) I1 =-SUMPRODUCT(A1:A200,$D1:$D200) I2 =-SUMPRODUCT(B1:B200,$D1:$D200) I3 =-SUMPRODUCT(C1:C200,$D1:$D200) I4 =-SUM(D1:D200) J1-J4 =MMULT(MINVERSE(E1:H4),I1:I4) ・・・・★ K1 =-J1/2 K2 =-J2/2 K3 =-J3/2 K4 =(SUMSQ(J1:J3)/4-J4)^0.5 これでK1-K4に中心の座標と半径が出てきます。 なお、★の部分はExcelに行列を入力する時に必要な操作として J1-J4を選択して反転させておく。J1に上の式を記入する(確定はさせない) Ctrl+Shiftを押しながらリターンキーを押す操作が必要です。(詳しくはURL) これで書かれた数字をA1-C6に入れると上記の結果が得られました。 ついでに中心(2,5,11)、半径10の球の座標を乱数を交えて20個ばかり 発生させて計算しましたが、 2.004285734 5.147072292 11.03049431 9.812454843 になりました。
その他の回答 (1)
- age_momo
- ベストアンサー率52% (327/622)
円の方程式を (x^2+y^2+z^2)+ax+by+cz+d=0 として計算するならその式で合っています。(x,y,zを独立変数、x^2+y^2+z^2を 従属変数と捉えるということですね) どういうシチュエーションで中心がずれると言っておられるか分かりませんので なんともアドバイスのしようがありませんが、何らかの測定データを解析した結果 考えられる球の中心の座標とずれているなら 1.誤差が歪んでいる、あるいは大きい。 誤差が正規分布していなかったり、定数に比べて大きい場合は定数がかなりずれて 計算されることもあると思います。 2.エクセルの式(入力)が間違っている。 これはw=ax+by+cz+dの線形の重回帰分析と同じですので例えば w=3x+5y+7z+11 で数字を決めて(例えば1,1,1,26などの数字を5,6セット)同じ方法で分析した時に それぞれの係数が正しく計算されるか確かめる。 あるいはエクセルの『アドイン』⇒『分析ツール』が使えるのなら A,B,C,D列にx,y,z,x^2+y^2+z^2のデータをそれぞれ書き込んでおいて重回帰分析で 各係数を求めてみて同じ結果になるかを確かめる。 といったところでしょう。エクセルの式が間違っていなければ測定結果や測定精度 に対して考察してみるしかないと思います。
お礼
age_momoさん,回答していただいてありがとうございます。 >どういうシチュエーションで中心がずれると言っておられるか 答えが確認しやすいように,測定データを自分で考えてみて入れてみました. *半径50の球の中心が座標(50,50)の位置にあるとした場合 測定データは 50 50 50 50 50 -50 100 50 0 0 50 0 50 100 0 50 0 0 この数値で計算してみたら,Xが68.750,Yが50,Zが0で半径が98.623になってしまいました.
お礼
とても丁寧に回答していただき,ありがとうございます. これからも何かありましたら,よろしくお願いいたします.