4

点 p の (x,y,z) 座標を決定しようとしています。私が持っているのは、既知の座標を持つ 4 つの異なる点 m1、m2、m3、m4 までの距離です。

詳細:私が持っているのは4点(m1、m2、m3、m4)の座標であり、それらは同じ平面上にありません:

m1: (x1,y1,z1),

m2: (x2,y2,z2),

m3: (x3,y3,z3),

m4: (x4,y4,z4)

ユークリッド距離は、m1->p、m2->p、m3->p、および m4->p を形成します。

D1 = sqrt( (x-x1)^2 + (y-y1)^2 + (z-z1)^2);

D2 = sqrt( (x-x2)^2 + (y-y2)^2 + (z-z2)^2);

D3 = sqrt( (x-x3)^2 + (y-y3)^2 + (z-z3)^2);

D4 = sqrt( (x-x4)^2 + (y-y4)^2 + (z-z4)^2);

(x,y,z) を探しています。この 4 つの方程式と 3 つの未知数からなる非線形システムを、ユークリッド距離をとって matlab fsolve で解こうとしましたが、うまくいきませんでした。

2 つの質問があります。

  1. ポイントpの未知の座標を見つけるにはどうすればよいですか: (x,y,z)
  2. (x,y,z) を見つけるために必要な既知の座標と p までの距離を持つ点 m の最小数は?

編集:

解決策を提供しないコードは次のとおりです。

私が持っているポイントは次のとおりです。

m1 = [ 370; 1810;  863];

m2 = [1586;  185; 1580];

m3 = [1284; 1948;  348];

m4 = [1732; 1674; 1974];

x = cat(2,m1,m2,m3,m4)';

また、各点から p までの距離は

d = [1387.5; 1532.5; 1104.7; 0855.6]

fsolve を実行したい場合に理解したことから、次を使用する必要があります。 1. 関数を作成します。 2. fsolve を呼び出します。

function F = calculateED(p)

m1 = [ 370; 1810;  863];

m2 = [1586;  185; 1580];

m3 = [1284; 1948;  348];

m4 = [1732; 1674; 1974];

x = cat(2,m1,m2,m3,m4)';

d = [1387.5; 1532.5; 1104.7; 0855.6]

F = [d(1,1)^2 - (p(1)-x(1,1))^2 - (p(2)-x(1,2))^2 - (p(3)-x(1,3))^2;
 d(2,1)^2 - (p(1)-x(2,1))^2 - (p(2)-x(2,2))^2 - (p(3)-x(2,3))^2;
 d(3,1)^2 - (p(1)-x(3,1))^2 - (p(2)-x(3,2))^2 - (p(3)-x(3,3))^2;
 d(4,1)^2 - (p(1)-x(4,1))^2 - (p(2)-x(4,2))^2 - (p(3)-x(4,3))^2;];

次に fsolve を呼び出します。

p0 = [1500,1500,1189];  % initial guess
options = optimset('Algorithm',{'levenberg-marquardt',.001},'Display','iter','TolX',1e-1);                     
[p,Fval,exitflag] = fsolve(@calculateED,p0,options);

私はMatlab 2011bを実行しています。

何か不足していますか?

最小二乗解はどのようになりますか?

ここで注意すべきことは、m1、m2、m3、m4、および d の値が正確に与えられていない可能性があるということですが、問題にはならない分析ソリューションの場合です。

4

3 に答える 3

2

mathematica は、次の 3 点問題を数値的に簡単に解決します。

p = Table[ RandomReal[{-1, 1}, {3}], {3}]
r = RandomReal[{1, 2}, {3}]
Reduce[Simplify[ Table[Norm[{x, y, z} - p[[i]]] == r[[i]] , {i, 3}], 
      Assumptions -> {Element[x | y | z, Reals]}], {x, y, z}, Reals]

falseこれは通常、ランダムな球体には通常 3 つの交点がないため、返されます。

解決策がある場合、通常、このようなペアがあります..

      (*   (x == -0.218969 && y == -0.760452 &&  z == -0.136958) ||
           (x == 0.725312 && y == 0.466006 &&   z == -0.290347)  *)

これはやや驚くべきことに、非常にエレガントな分析ソリューションを備えています。少し複雑なので、誰かが手元にあるかどうかを確認するのを待ちます.そうでない場合は、手順を覚えようとします..

Dmity の最小二乗法に従って、解を近似します。

p = {{370, 1810, 863}, {1586, 185, 1580}, {1284, 1948, 348}, {1732, 
1674, 1974}};
r = {1387.5, 1532.5, 1104.7, 0855.6};
solution = {x, y, z} /. 
              Last@FindMinimum[ 
                     Sum[(Norm[{x, y, z} - p[[i]]] - r[[i]] )^2, {i, 1, 4}] , {x, y, z}]
Table[ Norm[ solution - p[[i]]], {i, 4}]

ご覧のとおり、正確にはかなりかけ離れています..

(* solution point {1761.3, 1624.18, 1178.65} *)
(* solution radii: {1438.71, 1504.34, 1011.26, 797.446} *)
于 2013-10-08T18:39:06.020 に答える
0

最初の 3 つの方程式を取り、MATLAB で 3 つの方程式と 3 つの変数について i を解きます。方程式を解いた後、2 組の値が得られます。つまり、p の 2 組の座標と言えます。各セットを第 4 方程式に入れておくと、方程式を満たすセットが答えであることがわかります。

于 2013-10-08T19:14:05.997 に答える