• ベストアンサー

楕円の近似

XY平面上の点が5点以上与えられたとき、それらの点を効率よく通る楕円の定数(中心座標X,Y、長径、短径、長径の水平方向からの傾き)5つを求める方法がわかりません。 直線では最小二乗法が有名ですが、その方法はわかっております。 楕円の場合、中心からの距離の自乗の誤差の和を最小にするように決めるのかなぁ、と思ってやってみましたが、単純な2次式になってくれないので、つまりました。 何か、ヒントでも教えてください。 よろしくお願いいたします。

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

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

ANo.2のコメントについてです。  失礼。「以上」を見落としてました f~~)  6点以上が与えられたときには、楕円が全部の点を通るとは限りませんから、「何か」を最小化する、という尺度で最適化をしなくてはいけませんね。  何を最小化するか、あんまり厳密にはこだわらない、ということであれば、 残差r[j]を r[j] = A x[j]^2 +B y[j]^2 + C x[j]y[j] + D x[j] + E y[j] - 1 (j=1,2,…,n, n>5) として、 Σ(r[j])^2  (Σはj=1~nの総和) を最小化するのが一番簡単です。式の数が過剰な連立一次方程式、という格好ですから、そのまんま線形最小二乗法で扱えますので。  しかし、たとえば「 x[j]には誤差がなくて、y[j]の残差だけについて最小二乗法を適用したい」という場合には、方程式を y[j]=… という形に直して扱わねばならない。その他、最小化したいものが指定されている場合には、大抵、非線形最小二乗法の問題になっちゃいます。非線形だと反復計算で数値的に解く訳ですが、その場合、出発値(つまり最初の近似解)として上記の線形最小二乗法の解を使って、ガウス・ニュートン法を適用するのが簡単でしょう。

teamvb
質問者

お礼

何を最小化するかはこだわっておりません。 ということで、stomachmanさんの言われる式で残差にしようと思います。 私がやって見た方法では、おっしゃるとおり反復計算になってしまいました。 最初に残差をどう定義するかが結構重要なのですね。 ありがとうございました。

その他の回答 (2)

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

 最小二乗法は関係ありませんし、「効率よく通る」なんて話も出てきません。楕円の方程式は A x^2 +B y^2 + C x y + D x + E y = 1 であり、A~Eが決まれば、中心、長軸、短軸、傾きを出すのは容易です。そして、A~Eの5つのパラメータを決めようとする時に、点<x[j], y[j]>が丁度5個ある(j=1,2,…,5)んですから、過不足はない。単に5つの式から成る連立方程式ができます。 A x[j]^2 +B y[j]^2 + C x [j]y[j] + D x[j] + E y[j] = 1 (j=1,2,…,5)  求める変数はA~Eなのだから、これは5元連立一次方程式。簡単でしょ?  なお、もし点の個数が5個よりも多かったら、初めて、最小二乗法の出番になります。

teamvb
質問者

お礼

5点の場合の解法はよくわかりました。 ありがとうございました。

teamvb
質問者

補足

回答ありがとうございます。 5点よりも多かった場合が知りたいのです。

  • chiezo2005
  • ベストアンサー率41% (634/1537)
回答No.1

効率よく通るというのが何を意味するかが問題ですね。 たぶん,楕円上の点からのそれぞれ与えられた点までの距離の和が最小になるような楕円を意味するのではないのかと思います。 だとすれば解けるでしょう。

teamvb
質問者

お礼

私が変数分離で中心との距離の差で誤差を求めようとしたのが 無理があったのかもしれません。 ありがとうございました。

teamvb
質問者

補足

回答ありがとうございます。 おっしゃる意味です。 それが私には解けないのです。 Σei^2が簡単な式になってくれないのです。 いや、私の数学力が足りないだけかも。

関連するQ&A

  • 楕円の変形

    先の QNo.752549 「回転操作と伸縮操作2」 で少し触れられていますが、この関係に類する件です。  長径a、短径b、傾きθ(度:長径の軸線)を持った楕円があります。  この楕円を、楕円中心を基点に、X方向でx倍、Y方向でy倍したときの長径、短径、傾きの値を導く  計算式はどのようになるのでしょうか?。

  • 楕円計算で困っています

    長径2a、短径2bの楕円があり、長軸と短軸の交点座標(いわゆる中心点)を(0,0)とする この中心点からx軸からの角度αで直線を引き、楕円との交点座標を(x1,y1)とし、 また、この座標がx軸に対して対称な座標を(x1,-y1)とする この2点に対して楕円の接線を引いて、2つの線の角度をβとする この条件で(x1,y1)座標と角度βを、a,b,角度αを用いて表現する方法はないでしょうか? 色々考えてみたのですがどうも上手くいきません。 どうかよろしくお願いします。

  • 楕円パイプを斜めにカットしたとき

    [ 長径80cm×短径76cmの楕円パイプ ] 1) 長径80cm×短径76cmの楕円パイプを、地面に対して18.4度傾けて立てておいて、おもむろに地面に対して水平に切ると、断面はおよそ真円(直径80cm)になります。 2) そのとき、パイプを切り開いた平面形は、幅251cm( 80×3.14)の長方形板になりますが、斜めに切った端の曲線は、どのようになるでしょうか。 どなたか、お教えください。

  • 回転した楕円の長径短径、媒介変数表示

    院試の過去問をやっていましたが解答がないため質問させていただきます。 楕円2x^2-2xy+y^2=1について以下の問いに答えよ. (1)この楕円の長径,短径を求めよ. (2)X,Yを長径,短径に沿う座標軸とするとき,この楕円っを媒介変数表示せよ. 自分の考えた方針は(x y)=P(X Y)と適当な回転行列Pを用いて表現された(x y)を与式に代入し,そのとき出てくるXYの項の係数がゼロとすることでθだけ回転してることと同時に長径,短径もわかるだろうと思っていたのですが,どうもうまくいきませんでした。 どなたかよろしくお願いします.

  • 楕円形の面積の求め方教えてください。

    長径α、短径βの楕円形(平面)の面積の求め方を教えていただけませんか。できれば、証明方法も教えていただければ、幸いです。

  • 平面の計算方法

    3つ以上の座標点(n個)から最小二乗法を用いて,平面の中心座標,XY・XZ・YZ方向の傾きなどを計算したいのですが,どのように計算したらよろしいでしょうか?

  • 描画プログラムで、2楕円に接する円を描く

    VBで円を描くプログラムを作っています。 2つの楕円に接し、片方の楕円円周上にある 1点を通過する円を描きたいです。 正確には、もう一方(通過点のない側)の円周上にある 2接円が通過する点を求めたいです。 楕円はxy座標に対して平行ではなく、さまざまに傾いています。 楕円A(接円の通過点がある) 楕円中心(Ax,Ay) 楕円長径Aa 楕円短径Ab 楕円長径ベクトルAaD(x,y) 楕円短径ベクトルAbD(x,y) 焦点As1(x,y)、As2(x,y) 通過点T1(x,y) 通過点を通る楕円Aの接線T1L 通過点を通る楕円AのベクトルT1LD(x,y) も出ています。 楕円B(接円の通過点がない) 楕円中心(Bx,By) 楕円長径Ba 楕円短径Bb 楕円長径ベクトルBaD(x,y) 楕円短径ベクトルBbD(x,y) 焦点Bs1(x,y)、Bs2(x,y) 楕円はいずれも、中心から長径方向のベクトルに進んだ点を始点に描画されています。 ちなみにこの2楕円+片方の楕円円周上通過点の2接円を考える前に 真円AB2つと、片方の円周上通過点Tの2接円も考えました。 円AおよびB 中心(x,y) 半径Ar、Br 円A上の通過点T(x,y) 通過点を通る円Aの接線T1L 通過点を通る円AのベクトルT1LD(x,y) 円A、Bはどちらも、中心からX軸方法に半径分の距離をとった座標 を始点に描画されています。 この場合は、 (1)真円A上にある通過点から円接線を引く。 (2)接線T1Lから、真円A中心方向に法線T1Nを引く。長さは円Bの半径 (3)2の法線の終点座標T1Ned(x,y)と円Bの中心をつなぐ線T1NBを取る (4)T1NedのX軸正方向水平線から、T1NとT1NBの角度を調べる (5)円B上に始点からT1NB-T1Nの角度をとった円周上点T2を取る。ここが2接円の通過点。 という感じでできました。(5)の計算が、手元に資料がないので曖昧なんですが。 真円2接の応用で楕円2接もトライしたのですがどうもできません。 よろしくお願いします!

  • 線上の2点の座標と長径・短径から楕円の中心座標を求める方法

    任意の座標P(xp, yp)、座標Q(xq, yq)と、長径(横の長さ)rx、短径(縦の長さ)ryを用意すると、 P、Qを通る楕円は2つに(おそらく)確定できると思います。 それらの楕円の中心座標はどのような式で求められるのでしょうか?

  • 6点からの楕円の近似計算(最小二乗法、xyz次元)

    みなさん、こんにちわ。 楕円についてプログラムしないといけなく、わからない点が多いので質問させてください。 ある6点(座標はxyz)からxyz楕円の最小二乗法をプログラムすることは可能でしょうか?この掲示板の「楕円のプログラム」を参考にするとある5点以上の測定点からxy座標(2次元)のグラフにすることは可能であると書いてあり、納得しました。 分からない点はxyzの楕円の基本方程式です。 なお、使用する環境はc言語です。参考になるサイトなどありましたら教えてください。

  • 角度から楕円の座標を計算したい

    原点を中心として、長径20・短径10の楕円について ある角度の時のx座標y座標の値を得る式を考えているのですが、どうしても思いつきません。 x^2/a^2+y^2/b^2=1が楕円の方程式で間違いないと思います。 現在、 x^2/20^2+y^2/10^2=1 の式で表す楕円のxとyについて、角度θから計算したいのです。 元々数学が得意でないため高校時代の教科書を探して勉強し直してみたのですが、どうしても思いつきません。 θを与えると座標が出てくる式を教えてください。