Есть такая задача: На полигоне происходит взрыв, который регистрируется сейсмодатчиками в нескольких точках — требуется определить время и координаты взрыва.
Дано: Xi
, Yi
, Ti
— координаты и время регистрации взрыва каждым из датчиков (i = 1..4
больше всё равно не нужно, вроде).
Найти: X0
, Y0
, T0
— координаты и время самого взрыва.
Предполагаем что полигон плоский и скорость распространения волны постоянна и одинакова во всех направлениях (но неизвестна).
Вопрос собственно не в том как решить задачу. Подбором например несложно порешать включив немного аналитики и геометрии, итерациями...
А вот как её решить изящно / красиво / аккуратно?
В 2009-м кажется году я её и решил, и сдал заказчику и контора вроде даже какие-то денежки получила. Но я совершенно не помню решения, а найти пояснительную записку которую тогда составлял не могу (да и я с тех пор пяток контор уж сменил).
Мне упорно кажется что у меня чуть ли не к линейной системе свелось всё и оказалось можно скорость исключить. Но когда я беру в руки карандаш и бумагу — мне перестаёт казаться что это возможно.
Сами мы не местные! Помогите старому склерознику! А то коллеги кому я эту задачку задал интересуются — а я запоздало обнаружил что сам не помню как решал :)
Ну, если все измерения точны, то вроде четырех датчиков должно хватить, неизвестные параметры (X0, Y0, T0, V) находим из системы:
sqrt((Xi - X0)2 + (Yi - Y0)2) / V = (Ti - T0)
Но я бы не стал писать так на практике — в реальных измерениях обычно всегда есть погрешности. Лучше предположить, что (по крайней мере время) мы измеряем с ошибками e_i, одинаково распределенными для всех наблюдений. Тогда неизвестные параметры можно найти, минимизируя сумму квадратов ошибок (стандартный OLS-подход в эконометрике):
Min |по X0, Y0, T0, V| of { SUM |по i| (ei)2 } где
ei = T0 + sqrt((Xi - X0)2 + (Yi - Y0)2) / V - Ti
Технически это не сильно сложнее (а в зависимости от того, в чем писать — может быть даже легче), но вы гораздо точнее и устойчивее оцените неизвестные параметры, даже если в некоторых наблюдениях есть погрешности измерения не только времени, но и координат.
Спасибо за ответ!
Нет нет, сейчас задача уже не стоит на практике. Когда 5 лет назад я решал её на реальных данных — там же сами времена
Ti
было нельзя точно определить т.к. они выглядели как "всплески" на довольно шумном графике, и большинство не имело достаточно чёткого фронта. Правда был лишний датчик (всего 5) поэтому можно было пытаться понять насколько результаты "грешные".Ну я просто для каждой четвёрки датчиков (из пяти) определял точку и оценивал насколько разница между найденными пятью решениями велика.
Да... Это я и собираюсь коллегам ответить если умнее ничего не вспомню. Но возможно действительно ложная память :)
Ну, сильно умнее ничего и нет для задачи в этой формулировке =)
Кстати, если точное время взрыва неизвестно, а есть только график шума со всплеском во времени около времени взрыва — то правильнее здесь использовать даже не OLS а ML (метод максимального правдоподобия). В этом случае график сигнала, по которому вы оцениваете время взрыва, лучше сгладить, нормировать (чтобы интеграл был равен 1) и трактовать как плотность вероятности того, что в данное время произошел взрыв — то есть у нас для каждого датчика есть функция Pi(t) — возвращает вероятность того, что волна от взрыва дошла в данное время. Тогда наша задача — подобрать такие параметры (X0, Y0, T0, V), чтобы максимизировать произведение величин Pi(T0 + sqrt((X0 - Xi)2 + (Y0 - Yi)2) / V)
Для проверки чувствительности этого (и предыдущего) методов можно выбирать случайные подвыборки из множества датчиков, отмечать результат работы, и затем посмотреть, насколько он изменяется в новых подвыборках — так вы даже сможете оценить ошибку метода (то есть насколько в среднем он ошибается в оценках времени/скорости/положения в случайных подвыборках).
Упс, я думал, что известно время относительно момента взрыва.