我正在尝试确定点 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)。我试图用matlab fsolve通过欧几里德距离来解决这个由4个方程和3个未知数组成的非线性系统,但没有成功。
有两个问题:
- 如何找到点 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 值可能无法准确给出,但对于不应该成为问题的分析解决方案。