2011-02-02 10 views
1

私は距離のある点の配列を持っています。私は最高の条件を満たす n個の球の交差に最もよく合う点を見つける

for (point_i, distance_i) in pointArray: 
    abs(point - point_i) = distance_i 

ことを、私はこれが回帰または最小二乗のいくつかの種類で解決できると思うポイントを見つけるしたいが、私は問題の定式化とのトラブルを抱えています。

誰でも助けることができるならば、それは非常にあなたは釈明疑問を持つように「最高」を定義する必要が

+0

これは1Dスペースですか?あるいは、実際には高次元空間でユークリッド距離があるのでしょうか? – templatetypedef

+0

これはユークリッド距離の3D空間内にあります。そのことを明確にしないと申し訳ありません – Xzhsh

答えて

4

をいただければ幸いです。

あなたがしたいことは、与えられた点からどのくらい離れているかについての何らかのエラー関数を定義し、エラーの合計を最小限に抑えることです。使用するエラー関数は、実際の問題の内容によって異なります。例えば、(length(point-point_i) - distance)を使用したいとします。。それは最小二乗です。しかし、たぶんあなたは距離が離れている絶対量、それがどれだけ遠いか、どれくらい遠くにあるかの比率だけを気にしません。だからあなたは(length(point-point_i)/ distance-1)を使うかもしれません。たぶんセンサーの束からポイントと距離を得るでしょう。その場合、使用する適切な誤差関数は、距離の測定にどれだけの不確実性があるかを反映します。

適切なエラー関数を選択したら、最適化する方法を見つける必要があります。これを行う最も簡単な方法は、誤差関数の勾配を計算し、それを使って最下点までの経路探索アルゴリズムを実行することです。あなたのエラー関数がうまく動作するなら、これは速くはありませんが、うまくいくはずです。野心的であれば、多変量ニュートンラフソン法を使ってその点を見つけることができます。これにより、エラー関数についてのより多くの仮定が得られ、多くの作業になりますが、と多くの場合、が収束します。

+1

答えがbtillyです。私がここでやりたかったことは、実際には一連の距離データからセンサー位置を再構成することでした。私は幾分騒がしい3D点のセットとカメラからの距離のセットを持っています、そして、カメラがどこにあるべきかを見たいと思っています – Xzhsh

+0

@Xzhsh:あなたの誤差関数は、あなたが距離測定についてどれほど不確実であるかを反映すべきです。それがカメラなら、私は(長さ(point-point_i)/ distance-1)^ 2が妥当であると推測します。 – btilly

1

この問題は通常、線形代数では、誤差の二乗を最小にする「最小二乗」を解くことで近づいています。

これは、gpsレシーバが座標を与えるのに最適な方法を見つける方法です。彼らは、さまざまな衛星のすべてに「騒々しい」距離のセットを取り、「騒々しい」距離から最小の、2乗された誤差を有する単一の点に合致する新しい距離の集合を見つける。

これらのタイプの問題を解決する関数を持つべき多くの線形代数ライブラリがあります(最も優勢なものはlinpackです)。

関連する問題