我正在尝试确定点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。
有两个问题:
编辑:
这是一段没有解决方案的代码:
让我们说我的观点是:
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值可能没有准确给出,但对于一个不应该成为问题的分析解决方案。
答案 0 :(得分:2)
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
,因为随机球体通常不会有三个交叉点。
当你有一个解决方案时,你通常会有这样的一对..
(* (x == -0.218969 && y == -0.760452 && z == -0.136958) ||
(x == 0.725312 && y == 0.466006 && z == -0.290347) *)
这有点令人惊讶地有一个失败的优雅分析解决方案。它有点牵扯,所以我会等着看是否有人把它拿得很方便,如果没有,有兴趣我会试着记住这些步骤..
根据Dmitys最小二乘建议编辑,近似解决方案:
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} *)
答案 1 :(得分:1)
我会回答第二个问题。让我们将未知点X命名为。如果您只知道A点并知道从X到A的距离,则X可以位于A中心的球体上。
如果你有两个点A,B那么X就在一个圆圈上,该圆圈的交点给出了A和B的中心(如果它们相交)。
第三个点将添加另一个球体,三个球体之间的最终交点将给出两个点。
第四点将最终确定你正在寻找的那两点中的哪一点。
这就是GPS实际运作的方式。你必须至少拥有三颗卫星。然后GPS将猜测两个点中哪一个是正确的,因为另一个点在太空中,但它无法告诉你高度。技术上它应该,但也有错误,所以你“看到”的卫星越多,错误越少。
找到了这个可能是起点的question。
答案 2 :(得分:0)
取前三个方程,在MATLAB中求解3个方程和3个变量。求解方程后,您将获得两对值,或者我们可以说两组坐标为p。 将每个集合保存在第4个等式中,你可以找出满足等式的集合是答案