Решение нелинейных уравнений, связанных с расстоянием

Я хочу решить набор нелинейных уравнений в Matlab. Я имею в виду, скажем, у меня есть две точки, определенные как (lat1, lon1) и (lat2, lon2). Теперь я хочу найти точку lat3, lon3 так, чтобы она находилась на расстоянии 20 км от обеих точек. Он задается пересечением кругов радиусом 20 км, начерченных с точками (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, доступную по адресу http://www.mathworks.com/help/toolbox/symbolic/solve.html

Однако когда я определяю

syms lat3 lon3

и попытайтесь передать уравнения функции решения, которая выдает ошибку atan2 only accepts arguments of type sym. Как я могу с этим справиться?


person rajan sthapit    schedule 04.06.2012    source источник


Ответы (1)


Если вам нужно решить только этот конкретный вопрос, вам не нужны какие-либо функции решения уравнений в Matlab. Вы можете просто использовать формулу Пифагора:

Если ваши точки равны (0,0) и (1,0), а радиус равен x, то две точки, которые находятся на расстоянии x от обоих (0,0) и (1,0), являются

(0,5, sqrt (x ^ 2 - 0,25)) и (0,5, - sqrt (x ^ 2 - 0,25)).

Теперь, если ваши точки (a, b) и (c, d), то расстояние между двумя точками равно

расстояние = sqrt ((c-a) ^ 2 + (d-b) ^ 2).

Хорошо, теперь мы берем систему координат, в которой начало координат (a, b), единица измерения - dist, а горизонтальная ось проходит через (c, d). В этой системе координат рассматриваемые точки

(0,5, +/- sqrt ((r / dist) ^ 2 - 0,25)).

Теперь, чтобы перейти к исходной системе координат, нам нужно умножить на dist, получив

(0,5 * расстояние, +/- sqrt (r ^ 2 - 0,25 * расстояние ^ 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) sqrt (r ^ 2 / dist ^ 2 - 0,25))

и, наконец, добавьте (a, b), получив

(a + 0,5 (дБ) - / + (ca) sqrt (r ^ 2 / dist ^ 2 - 0,25), b + 0,5 (ca) +/- (db) sqrt (r ^ 2 / dist ^ 2 - 0,25) )

Это то, что вы ищете. Возможно, я где-то ошибся, но, надеюсь, направление должно быть ясным.

person JohnB    schedule 04.06.2012