求解与距离有关的非线性方程

时间:2012-06-04 20:35:00

标签: matlab geometry distance

我想在matlab中求解一组非线性方程。我的意思是假设我有两个点由(lat1,lon1)和(lat2,lon2)定义。现在我想找到一个点lat3,lon3,使它距离两个点都在20km的距离。它由半径20km的圆的交点给出,以点(lat1,lon1)和(lat2,lon2)为中心绘制。

但是,我对如何解决这个等式感到有些困惑。

我有在matlab中计算两点之间距离的函数

function [ distance ] = calculateDistance( latitude1,longitude1,latitude2,longitude2 )
radius = 6371;
dLat = degtorad(latitude2-latitude1);
dLon = degtorad(longitude2-longitude1);
a = sin(dLat/2) * sin(dLat/2) + cos(degtorad(latitude1)) * cos(degtorad(latitude2)) * sin(dLon/2) * sin(dLon/2);
c = 2 * atan2(sqrt(a), sqrt(1-a));
distance = radius * c;
end

我正在尝试使用matlab的solve函数 http://www.mathworks.com/help/toolbox/symbolic/solve.html

但是当我定义

syms lat3 lon3

并尝试将方程式传递给求解函数,它会抛出错误 atan2 only accepts arguments of type sym。 我怎么能超过这个?

1 个答案:

答案 0 :(得分:0)

如果您只需解决该特定问题,则不需要任何Matlab的方程求解函数。你可以简单地使用毕达哥拉斯的公式:

如果你的点是(0,0)和(1,0)并且半径是x,则距离(0,0)和(1,0)两个x的两个点是

(0.5,sqrt(x ^ 2 - 0.25))和(0.5, - sqrt(x ^ 2 - 0.25))。

现在,如果你的分数是(a,b)和(c,d),那么这两个点的距离是

dist = sqrt((c-a)^ 2 +(d-b)^ 2)。

好的,现在我们采用一个坐标系,其原点是(a,b),单位是dist,横轴是(c,d)。在这个坐标系中,有问题的点是

(0.5,+ / - sqrt((r / dist)^ 2 - 0.25))。

现在,为了达到原始坐标系,我们必须乘以dist,得到

(0.5 * dist,+ / - sqrt(r ^ 2 - 0.25 * dist ^ 2)),

然后旋转矩阵旋转(dist,0)到(c-a,d-b),这是

cos alpha   -sin alpha
sin alpha   cos alpha

其中alpha = arccos((d-b)/ dist),即矩阵

(d-b) / dist   -(c-a) / dist
(c-a) / dist    (d-b) / dist

给出了

(0.5(d-b) - / +(c-a)sqrt(r ^ 2 / dist ^ 2 - 0.25), 0.5(c-a)+/-(d-b)sqrt(r ^ 2 / dist ^ 2 - 0.25)

最后添加(a,b),屈服

(a + 0.5(d-b) - / +(c-a)sqrt(r ^ 2 / dist ^ 2 - 0.25), b + 0.5(c-a)+/-(d-b)sqrt(r ^ 2 / dist ^ 2 - 0.25))

这些是您正在寻找的要点。可能我在某个地方犯了一个错误,但我希望方向应该清楚。