Matlab 求解与距离有关的非线性方程组
我想在matlab中解一组非线性方程组。我的意思是,假设我有两个点,由(lat1,lon1)和(lat2,lon2)定义。现在我想找到一个点lat3,lon3,这样它距离两个点都有20公里。以点(lat1,lon1)和(lat2,lon2)为中心绘制半径为20km的圆的交点 然而,我有点困惑如何解决这个方程 我有在matlab中计算两点之间距离的功能Matlab 求解与距离有关的非线性方程组,matlab,geometry,distance,Matlab,Geometry,Distance,我想在matlab中解一组非线性方程组。我的意思是,假设我有两个点,由(lat1,lon1)和(lat2,lon2)定义。现在我想找到一个点lat3,lon3,这样它距离两个点都有20公里。以点(lat1,lon1)和(lat2,lon2)为中心绘制半径为20km的圆的交点 然而,我有点困惑如何解决这个方程 我有在matlab中计算两点之间距离的功能 function [ distance ] = calculateDistance( latitude1,longitude1,latitude2
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的解算功能
但是当我定义
syms lat3 lon3
试着把方程传递给解函数,它会抛出
atan2只接受sym类型的参数
。
我怎样才能解决这个问题呢?如果你只需要解决那个特定的问题,你不需要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
式中,α=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)平方米(r^2/距离^2-0.25)
最后加上(a,b),屈服
(a+0.5(d-b)-/+(c-a)平方米(r^2/dist^2-0.25),
b+0.5(c-a)+/-(d-b)平方米(r^2/区^2-0.25))
这些就是你要寻找的要点。也许我在某个地方犯了一个错误,但我希望方向应该是明确的