• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:測定点の楕円近似)

測定点の楕円近似

このQ&Aのポイント
  • 測定点の楕円近似について質問があります。
  • 傾斜した円筒を水平に測定して得られた測定点を楕円の公式にフィッティングし、楕円の中心座標となす角度を求めたいと考えています。
  • 数学やプログラムに詳しくないため、どのように行えば良いのか理解できません。Excelで計算する方法や考え方について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.2

おっとと > 『q = inv(P) r ,q = inv(P' P) (P' r) 』を解く のではありません。もう解いてあります。 このご質問の場合、測定点は5より多いでしょうから、 inv(P' P) (P' r) を計算すれば答が出るんです。Excelの関数で書けば =mmult(minverse(mmult(transpose(P),P),mmult(transpose(P),r)) ということです。 例えば10個測定点があるとしましょうか。 PをA列1行目からE列10行目までの範囲に入れることにしましょう。 j番目の測定値のxの値をxj, yの値をyjとするとき、 j行目のA列にxj^2, B列にyj^2, C列にxj*yj, D列にxj,E列にyj を並べたものです。10行5列の行列ということになります。 具体的にはD列とE列にデータを入れて、 A列1行目に =C1^2 B列1行目に =D1^2 C列1行目に =C1*D1 を入力し、 A列1行目からC列10行目までの範囲を選択しておいて、「下方向へコピー」のコマンドを使えばできあがりです。 rというのは1を縦にずらりと10個並べたもの。 これをG列1行目からG列10行目までの範囲に置くことにしましょう。 そして、答のベクトルqをJ列1行目からJ列5行目に置くことにしましょうか。 答は5個の数値が縦に並んだもので、 1個目がa, 2個目がb, ..., 5個目がeの値です。 そうすると、J列1行目からJ列5行目の範囲を選んだ状態で、J列1行目のセルに =mmult(minverse(mmult(transpose(A1:E10),A1:E10),mmult(transpose(A1:E10),G1:G10)) と入力します。で、数式入力の欄にカーソルを入れたまま、controlキーを押しながらEnterを押す。(Macならリンゴマークのキーを押しながらEnterを押す。)すると、数式入力の欄には {=mmult(minverse(mmult(transpose(A1:E10),A1:E10),mmult(transpose(A1:E10),G1:G10))} と表示され、答がJ列1行目からJ列5行目に表示されます。 Excelにおいて、行列全体にPだのrだのと言った名前をつける方法も知っていると便利です。Excelのマニュアルをご参照あれ。

kisha
質問者

お礼

お礼を申し上げるのが遅くなり、申し訳ありませんでした。ご丁寧なご回答本当にありがとうございました。

その他の回答 (1)

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.1

しばしば非線形の問題として扱うようですが、実は線形の簡単な問題として解くことができます。 一般に、楕円や双曲線は a(x^2)+b(y^2)+cxy+dx+ey=1 (a,b,c,d,eは実数)を満たす<x,y>の集合として表されます。 楕円あるいは双曲線の曲線上の座標<x,y>をn回測定したものを<x[j],y[j]> (j=1,2,...,n)とし、その値に誤差がないとするならば、5個の測定点があれば5元連立一次方程式 a(x[1]^2)+b(y[1]^2)+cx[1]y[1]+dx[1]+ey[1]=1  : a(x[5]^2)+b(y[5]^2)+cx[5]y[5]+dx[5]+ey[5]=1 を解けばa,b,c,d,eが決まります。これを行列で表せば P[j,1] = x[j]^2 P[j,2] = y[j]^2 P[j,3] = x[j]y[j] P[j,4] = x[j] P[j,5] = y[j] とし、 r[j] = 1 そして未知数のベクトルを q[1] = a q[2] = b q[3] = c q[4] = d q[5] = e とすれば P q = r を解くことに相当します。つまり q = inv(P) r ここにinv(P)はPの逆行列です。 測定点が5個より多い場合(n>5)にも j=1,2,...,nについてP,rを作り q = inv(P' P) (P' r) を計算すればq(すなわちa,b,c,d,e)が求められます。ここにP'はPの転置行列です。 nが大きいほど(つまり測定点が多いほど)測定値に少し誤差があってもその影響を受けにくくなります。 Excelでは 行列の転置はtranspose(), 逆行列はminverse()、行列(或いはベクトル)の積はmmult(,)という関数で計算できます。 a,b,c,d,eから、楕円の長軸・短軸の長さと向きおよび中心の座標を求めるのは、別の問題と考えれば良いでしょう。

kisha
質問者

お礼

早速のご回答誠にありがとうございます。 ご丁寧に解法をご説明していただいたのですが、何分レベルが高く、私、数学的知識がほとんど無いため、『q = inv(P) r ,q = inv(P' P) (P' r) 』を解くというお話から理解する事が出来ませんでした。本内容について理解すべく勉強いたします。 ありがとうございました。

関連するQ&A

専門家に質問してみよう