• 締切済み

最小二乗法による球の中心・半径のC言語による導出

工学部の学生です。 最小二乗法による球の中心・半径のC言語による導出についてのご質問です。 ある物体の表面座標群を取得し、点iの位置(x座標、y座標、z座標)を zahyou.x[i] zahyou.y[i] zahyou.z[i] (iは0から300程度) として保存している状況です。 この座標群にC言語で最小二乗法を適用し、中心座標と球半径を導出する場合、 どのようにすればよろしいでしょうか? 座標群が歪な物体であった場合、むりやりにでも導出することは可能でしょうか? 形だけでも点iの存在する空間の中心・半径っぽいものを求められると助かります。 (たとえば、最大のx座標と最小のx座標÷2≦導出半径に収まるなど、ありえない結果は除外できるでしょうか…) 実に他力本願な質問事項で心苦しいのですが、切羽詰っております。 恥を忍んで、どうか皆様方のご助力お願いします。 参考 http://questionbox.jp.msn.com/qa2652396.html

みんなの回答

  • ur2c
  • ベストアンサー率63% (264/416)
回答No.6

> 切羽詰っております なのに 3 日も応答がないのは「お前の考えはどうでも良い.C で最小 2 乗法をさっさと教えろ」ということかな,と Numerical Recipes in C の旧版を示しときます. まあ,無駄だと思うわけですけど.これで,私にできることは,やり尽くしました.

参考URL:
http://www.nrbook.com/a/bookcpdf.php
  • ur2c
  • ベストアンサー率63% (264/416)
回答No.5

> 円の最小二乗法のサンプルソースがネット上に多くあったので、球も・・・と安易に考えました。 なら,最小2乗法の制約はない,と思って良いですね? どうも以下のようなことらしい,と推測します. O := 対象物体 R := robot R から O を見て左手の座標系をとる. Sensor は R に付いているものとする. x := 中指,y := 親指,z := 人差し指 v := [v_x, v_y, v_z] やりたいこと: O を R のかごに入れる そのためにできること: R の進行方向と速度を制御する. そのために必要な情報: O の左端と右端の座標 x_l, x_r R から O までの距離 z_O そのために取れる情報: V := {v} card V = n ~= 300 O を外れた測定点は infty の値を持つとして W := {v | v_z < infty} subset V 私なりの答です: hat{x_l} := min {v_x | v in W} hat{x_r} := max {v_x | v in W} hat{z_O} := min {v_z | v in W} ここで不安なのは hat{.} は n 個ある data points の 1 つの値だけに依存して決まっており,したがって不安定なこと.まずは上の実験をしてみて,実際に不安定なら,たとえば hat{x_l} は左端の数個の data を見て決めるようにすれば良い.その他も同様. data update があるなら,指数平滑法くらいをやってみる.平滑 parameter は実験で決める. かごを上下に調整できないなら y は不要.data に球面をあてはめるのも不要.中心座標も不要.目的と無関係な部分で不必要に話をややこしくしてます.手法を決める前に仕様を詰めるべきだという意見です.

  • FT56F001
  • ベストアンサー率59% (355/599)
回答No.4

>座標群が歪な物体であった場合、むりやりにでも導出することは可能でしょうか? 可能です。むりやり球形に近似する解が出ます。 >(たとえば、最大のx座標と最小のx座標÷2≦導出半径に収まるなど、ありえない結果は除外できるでしょうか…) 点の分布によっては,この不等式は崩れると思います。 基本的には#1さんの回答どおり,参考の式をCで書くだけの問題です。 4元連立方程式を解くのに,クラメールの公式かガウスの消去法かは悩みますが,簡単に書ける方で書けばよいでしょう。 Cの書き方なら「[技術者向] コンピューター」カテの方が適切でしょうが, 「参考の式の由来が分からない」なら,本カテで聞けばよいきっと説明が得られます。 なお,工学部のプログラミングあるいは数値計算の教育用の例題として,この問題は妥当かつ自然だと思います。 >既存のプログラム(たくさんある)を探して持って来ちゃうのが早いです。ネットで探せば、すぐみつかります。 実際の問題を解決する時,そうする方が早くてより高度なソフトが手に入る場合も多いです。 でも,中身も知らず,ブラックボックスとして使うだけなら,シロウトさんでもできます。 「一度は,簡単でよいから自分で書いてみる」という姿勢は, 学ぶ立場,次に来るべきものを創り出す立場としては重要なことです。それをすっとばすと, 砂上の楼閣の上になります。

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.3

> Cで具体的に カテゴリー違いですね。 具体的なコードが知りたいなら、 それなりの場所で訊きましょう。 ここは数学カテです。 最小二乗法をこの問題にあてはめた式は、 御自身のリンク先に解説済みのようです。

  • ur2c
  • ベストアンサー率63% (264/416)
回答No.2

> 工学部の学生です。 この問題は工学としては、へんな所が多いです。 > ある物体の表面座標群を取得し > (iは0から300程度) まず、測定方法の説明がありません。ですから、測定値をランダムサンプルと見なせるかどうかがわかりません。精度もわかりません。 > 中心座標と球半径 測定値に球面をあてはめる目的が書いてありません。そのため、どの程度の精度の出力が望まれているのか、わかりません。 > 最小二乗法による > C言語による なぜこのような制約が付いているのか、わかりません。 球面をあてはめるだけなら算数です。わざわざ「最小二乗法による」とするのはなぜでしょう? 正規方程式を解かないといけないという意味でしょうか? それとも計算結果が最小二乗法によるものと結果的に同等ならば良いのでしょうか? どうしても最小二乗法によらねばならないなら、C より書きやすい言語がいくらもあります。なぜ C に限るのでしょう? C でなければならないのは通常、マイコンとかに組込む必要性からです。けれど、それならプログラムをうんと小さくまとめる必要があるはずなので、ますます「最小二乗法による」といいう制約がかかっている理由が不明です。 先生が教育上の理由から「C言語で最小二乗法」という指定をしたのかもしれませんけど。 > この座標群にC言語で最小二乗法を適用し、中心座標と球半径を導出する場合、 どのようにすれば どうしても「C言語で最小二乗法」なら、既存のプログラム(たくさんある)を探して持って来ちゃうのが早いです。ネットで探せば、すぐみつかります。ただし、英語で検索しないと出てこないかもしれません。 > 座標群が歪な物体であった場合、むりやりにでも導出することは可能でしょうか? 当然です。初めから球面だけがデータのモデルなのですから、立方体でも球とみなしちゃうわけで。 > 最大のx座標と最小のx座標÷2≦導出半径に収まるなど、ありえない結果は除外できるでしょうか… 歪みや測定誤差があるなら、これはありえる結果ですよね?

tanaka_test_2
質問者

お礼

ご丁寧な回答ありがとうございます。 >> 工学部の学生です。 >この問題は工学としては、へんな所が多いです。 >> ある物体の表面座標群を取得し >> (iは0から300程度) >まず、測定方法の説明がありません。ですから、測定値をランダムサンプルと見なせるかどうかが >わかりません。精度もわかりません。 測定方法はLRFを利用した3次元レーザスキャンです。 計測誤差はmmオーダとなっています。 また、測定対象は真球ではなく、お手玉のようなひしゃげた形状をしています。 さらに、一方向からのみの測定が条件となっているため、測定対象の半面のみ座標が明らかです。 測定対象の半径は30cm前後です。 >> 中心座標と球半径 >測定値に球面をあてはめる目的が書いてありません。そのため、どの程度の精度の出力が望ま >れているのか、わかりません。 測定対象の中心に移動ロボットを向かわせます。 移動ロボットには測定対象捕獲用の籠がついていて大きさは全幅40cmです。 そのため中心座標の許容する誤差は5cmまでが望ましいです。 >> 最小二乗法による >> C言語による >なぜこのような制約が付いているのか、わかりません。 他の制御部がC言語によって構築され、そのソースへの書き加えが求められています。 また先生からの指導により、C以外の言語は残念ながら認められていません。 >球面をあてはめるだけなら算数です。わざわざ「最小二乗法による」とするのはなぜでしょう? 正 >規方程式を解かないといけないという意味でしょうか? それとも計算結果が最小二乗法によるも >のと結果的に同等ならば良いのでしょうか? 球面をあてはめるだけ、という処理が不勉強ゆえ理解できません。 円の最小二乗法のサンプルソースがネット上に多くあったので、球も・・・と安易に考えました。 残念ながら球の最小二乗法や、球のカーブフィッティングのサンプルソースが見あたらなかったため、ご質問させて頂きました。 >> この座標群にC言語で最小二乗法を適用し、中心座標と球半径を導出する場合、 どのようにすれば >どうしても「C言語で最小二乗法」なら、既存のプログラム(たくさんある)を探して持って来ちゃうのが早いです。ネットで探せば、すぐみつかります。ただし、英語で検索しないと出てこないかもしれません。 探したのですが・・・、すいません・・・ >> 最大のx座標と最小のx座標÷2≦導出半径に収まるなど、ありえない結果は除外できるでしょうか… >歪みや測定誤差があるなら、これはありえる結果ですよね? LRFによる計測座標の範囲外に中心が存在する、という結果がでないように、計測範囲外の解を除外し、中心座標が計測座標の系の中に内包するなかでの誤差ε^2が最小になるような解を求めさせる。こういった処理はどのようにすればよろしいでしょうか。 実に厚かましいお願いなのですが、兎にも角にも、それっぽい中心が求まるサンプルソースなど御座いましたらお教え頂けると幸いです。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

その「参考」にある式を C で書けばいいだけじゃないかなぁ.

tanaka_test_2
質問者

お礼

おっしゃることごもっともです。 しかし残念ながらCで具体的にどうかくのか分かりません。 よろしければC言語を利用してどう行列式を解くのか、ソースを用いてご指南頂けないでしょうか?

関連するQ&A

  • 球の最小二乗法について

    はじめまして. 工学部の学生です. 球の中心座標と半径を求める最小二乗法について教えてください.お願いします. 私も,エクセルを使って式を立てて計算したのですが,中心がどうしてもずれてしまいます. |Σx^2 Σxy Σzx Σx | |a|  |-Σ(x^2+y^2+z^2)x| |Σxy Σy^2 Σzy Σy | |b| = |-Σ(x^2+y^2+z^2)y| |Σzx Σyz Σz^2 Σz | |c|  |-Σ(x^2+y^2+z^2)z| |Σx  Σy  Σz   n | |d|  |-Σ(x^2+y^2+z^2)| この式をクラーメルの公式を使って解いて x=-a/2 y=-b/2 z=-c/2 r=√{(a^2+b^2+c^2)/4-d} で,計算したのですが,答えがうまく求まりません. どなたか教えていただけないでしょうか.

  • Excelを使用して円弧の半径を最小二乗法で求めたい

    半径rで加工した円弧状の加工物があります。 その加工物の円周上の数点の位置測定データ(仮想原点からのX,Y座標)から 最小二乗法でその半径を計算したいのですが、Excelで計算できるでしょうか?

  • 最小二乗法の応用について

    実験により、xに対するyの値をxの値をかえながら、N回測定した。測定したxに対するyの関係をグラフに描くと、次の二次関数で表現するのが適当であることがわかった。 y=ax*x+bx+c この時、最小二乗法によりパラメータa、b、cの値を求める式を導出せよ。という問題なのですが、どのようにしたら最小二乗法で求めることができるのですか? どうか教えてください

  • 球の中心の求め方

    今(X1,Y1,Z1)(X2,Y2,Z2)(X3,Y3,Z3)の三つの座標と半径rが分かっています. この座標の中心(Xq,Yq,Zq)は(X-Xq)^2+(Y-Yq)^2+(Z-Zq)^2=r^2を元に連立方程式を立てれば解けるらしいのですが私には難しくて解けません. この解(例:Xq=???)を知っている方がいらっしゃいましたらどうか教えてください.

  • 3次元の最小二乗法

    A(x1,y1,z1)とB(x2,y2,z2)とC(x3,y3,z3)とD(x4,y4,z4)の点で 最小2乗法ほうを使い直線近似したいのですが、どのような式になりますかご存知の方教えていただけますか?

  • 最小2乗

    (1) (x,y)=(-3,4),(-2,1),(-1,0),(0,-1),(1,1),(2,2),(3,3)を 方程式 y = ax^2 + bx + c で最小2乗法に当てはめたときの a,b,cを求める (2) 要素(x,y,z)=(1,3,2),(2,1,1),(3,2,4),(4,5,3),(5,4,5)が z = ax + by + p とモデル化されるとき、残差の2乗Σp^2 が 最小になるように定式化して、最小となるa,bを求める という問題です。 これらを行列を用いて解きたいのですが、どのようにすればよいか分かりません。よろしくお願いします。

  • 円の最小二乗法の公式

    いくつかのデータから最小二乗法で近似曲線を求めたいのですが、よくわかりません。そのデータ集の近似曲線は円になります。 最小二乗法を調べ、1次、2次関数についてはわかりました。ある点の座標を(x1,y1), (x2,y2)…、近似曲線上の座標を(x1,y’1),(x2,y’2)… とした時、 (y’1-y1)^2 + (y’2-y2)^2 … が最小となるような係数a,b などを偏微分 → 連立方程式で求めるという方法でした。 円についても、同様の方法で r^2 = (x-a)^2 + (y-b)^2 のような近似曲線の式が求められるのでしょうか?1次関数などのように、y’1-y1を求めようとすると、±√ が出てきてしまい、ややこしくなる気がしますが、これを解くしかないのでしょうか?もしくは別の解法があるのでしょうか?詳しく教えていただけたらと思います。よろしくお願いします。

  • 数学の球面の中心や半径に関する質問です。

    数学の球面の中心や半径に関する質問です。 球面S:x^2+y^2+z^2+2x4y-6z-2=0について以下の問に答えよ (1)Sの中心Aの座標およびSの半径を求めよ この1問です。解説、よろしくお願いします

  • 最小二乗法による残差の和について

    質問させていただきます。 最小二乗法による残差の和が0になることが保障されているのは以下のどれでしょうか? 1、Y=βX+ε 2、Y=α+βX+ε 3、Y=αX+βZ+γW+ε 4、Y=α+βX+γZ+δW+ε ただし、X,Y,Zは説明変数である。また、εは誤差項を表す よろしくお願い致します。

  • 最小二乗法について

     y=ax+b+c/x という式での最小二乗法の求め方を 教えてください。