Минимизация ошибки сдвига двух наборов пространственных данных

darkhammer1

Наверняка есть готовый прием для того, что я хочу сделать. Чтобы не изобретать (и тем более не ошибиться при изобретательстве прошу совета тут.
Есть два набора пространственных данных - точки. Каждой точке одного набора соответствует точка другого набора. Можно принять, что эти точки показывают одни и те же объекты, но в одном наборе точки показывают истинное их положение, а в другом - точки расставлены со сдвигом, не одинаковым по величине и по направлению. Пример - на картинке. Квадратики - истинное положение, кружки - второй набор с ошибочным положением.

Уже известны для каждой ошибочной точки расстояние L и направление A от нее на соответствующую ей "верную" точку.
Задача: вычислить величину и направление сдвига всего сразу ошибочного набора точек относительного верного набора, чтобы сумма квадратов величины ошибок была минимальна.
Навскидку, приходит на ум что-то вроде этого (техать не уметь, потому скрин из ворда):

Корень только из абс. величины подкоренного выражения, а знак сдвига потом вернуть.
Скорее всего, я сгородил ерунду. Нужен совет.

Logon

а почему L в квадрате?
и не правильнее ли было бы считать по модулю /L*cos/, то же самое и с синусом?

var24

Если я правильно тебя понял, то, что тебе нужно - вектор разницы между средними положениями точек двух наборов.

darkhammer1

Ну L в квадрате потому, что цель минимизировать именно квадраты ошибок. Чтобы максимально избавиться в первую очередь от больших сдвигов, а маленькие - уже как повезет.
А если L*cos по модулю брать, то у нас проекция на ось абсцисс (т.е. разница долгот точек) будет везде положительная. А она везде разная. Короче, вместо суммы разнознаковых сдвигов получим черте что.

Logon

Ну L в квадрате потому, что цель минимизировать именно квадраты ошибок.
почему ты тогда косинус и синус в квадрат не возводишь?
у тебя дельта Х =L*cos (альфы) (уж ссори, что буквенно отмечаю
Согласен?
Сделай такой расчет для одной и двух пар и как мне кажется, увидишь ошибку

darkhammer1

вектор разницы между средними положениями точек двух наборов
Если мы сделаем сдвиг по этому вектору - минимизируем среднюю ошибку, а не большие ошибки - больше, а меньшие - меньше. До этого я и сам догадался.
- спасибо. Попробовал - похоже то, что надо.
2 - да, мои уравнения, ожидаемо, были не очень хороши. Но не из-за косинуса и синуса :-).
Решение есть. До сокровищ идти 30 метров на запад, 309 метров на север :)

aszxdfcv

Если досчитать те формулы, которые я написал, то получится как раз "вектор разницы между средними положениями точек двух наборов" — как раз то, что предложил .

darkhammer1

UPD. Погодите, нашел ошибку в данных.
Так, действительно. В итоге то, с чего я начал.
Если убрать в моем первом посте навешенные мной на "n" и "L" насильно квадраты, то это и получается.
Но тогда не выполняется мое условие минимизации суммы квадратов ошибок. В заголовке темы я его не прописал, но в посте оно было.
То что при использовании сдвига по вектору между средними координатами двух наборов мое условие не будет выполняться - это мне было понятно заранее. Померещилось, что в твоем решении выполняется. Проверил на конкретных данных вчера - показалось, что действительно большие ошибки в первую очередь устранены. А вот сумму квадратов не посчитал и зря - на самом деле нет. Прикладываю набор данных, может глянет кто.
Верхняя рамка - вектор по .
Средняя рамка - минимум суммы квадратов разностей по . Примерные сдвиги по X и Y для получения минимума были определены тупо перебором.
Нижняя рамка - координаты после сдвига и сумма квадратов ошибок.
График - для красоты.
Вначале сумма квадратов ошибок была 1.632.395,739 (ячейка Q2). После сдвига стала 122.223.295,6 (ячейка H28).

Logon

минимизации суммы квадратов ошибок.
ты хочешь найти минимум дельта икс в квадрате плюс дельта игрек в квадрате?
Насколько я понимаю (если не туплю) то минимум будет в случае, если дельта х=дельта игреку :o
Если не секрет, практический смысл в этом какой?

darkhammer1

 UPD. Погодите, нашел ошибку в данных.
ты хочешь найти минимум дельта икс в квадрате плюс дельта игрек в квадрате?
Мне что-то кажется, что я страшно туплю. Нужно, чтобы суммарный L^2 была минимальна. Предложенные способы на моем конкретном наборе данных привели к росту суммарной L^2.
Практический смысл такой: есть цифровая модель рельефа (ЦМР на которой эрозионный рельеф (долины рек, балки естественно, показан связанной совокупностью линейных понижений на этой модели. Короче, овражно-балочно-долинная сеть.
Отдельно от ЦМР есть граф речной сети, который в свое время был оцифрован с бумажных топокарт масштаба 1:1 000 000. Так как ЦМР у меня сильно детальнее, чем грубая гидросеть, то эта самая гидросеть при наложении на ЦМР лезет на склоны и междуречья, а должна бы как можно лучше ложиться в гроб сеть долин под нее. Посему мне нужно сдвинуть так сеть, чтобы максимально устранить большие ошибки малого числа точек пусть за счет небольшого увеличения малых ошибок большого числа точек (ошибки L распределены нормально). Небольшой сдвиг - грубо на сотню метров - точек (это устья рек с 10-километровки) с малыми ошибками не приведет к тому, что они "выскочат" из ячеек ЦМР с минимальными отметками высот, т.е. из тальвегов. Ну вернее, гипотетически не приведет или хотя бы уменьшит общую "кривоту" модели.

Logon

Прикладываю набор данных, может глянет кто.
Посмотрел твой файл, что-то (имхо ты сам себя запутал.
У тебя есть координаты точек, есть расстояние и углы между ними - в общем, это типа из прямой и обратной задачи в геодезии.
Правильно ли я понимаю твою таблицу, что Х1, У1 - координаты первой точки, Х2, У2 - это координаты откорректированной точки?
Ели это так, тогда L определено неверно, по А надо смотреть

darkhammer1

 Приношу и извинение за тупость :) . Не поверил здравому смыслу и теореме Пифагора, но поверил расчету в Экселе. А при этом порядок точек в двух наборах данных (и соответствие точек друг другу) напутал.
2. Да, сам себя запутал.
Ну раз тебе стало интересно.
X2,Y2 - координаты ошибочных точек. X1,Y1 - координаты истинных положений. Есть L и A.
В принципе для решения достаточно чего-то одного: либо X2,Y2,X1,Y1, либо L и A.
Не сошлась у тебя ОГЗ по той простой причине, что первые два столбца я копировал из одной таблицы ArcGIS, а с третьего по шестой - из другой. Я по наивности думал, что порядок строк (и точек, соответственно) в них одинаков. А на деле (см.выше) я напутал порядок точек. Из-за этого насчитал, что сумма квадратов ошибок растет, а не уменьшается.
Самый большой мой косяк был сначала в том, что я не домыслил, что сдвиг по вектору между средними координатами двух наборов и приведет к минимизации L^2.
Второй мой косяк был в том, что я криво вставил данные в Эксель и поверил ему, а не здравому смыслу.
Всем спасибо. Стыдно, товарищи :o
P.S. Вот она, сволочь :) . В нижней точке
Оставить комментарий
Имя или ник:
Комментарий: