点 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 つの質問があります。
- ポイントpの未知の座標を見つけるにはどうすればよいですか: (x,y,z)
- (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 の値が正確に与えられていない可能性があるということですが、問題にはならない分析ソリューションの場合です。