Как сравнить особенности двух кривых?

11

Мне нужно сравнить две кривые f (x) и g (x). Они находятся в том же диапазоне х (скажем, от -30 до 30). f (x) может иметь некоторые острые пики или гладкие пики и впадины. g (x) может иметь одинаковые пики и долины. Если это так, я хочу оценить, насколько хорошо эти функции совпадают без визуального контроля. Я попытался решить эту проблему следующим образом.

  1. Нормализуйте обе функции, разделив каждую точку данных на общую площадь функции. Теперь площадь нормализованной функции равна 1,0.
  2. В каждом x получить минимальное значение из f (x) и g (x). Это даст мне новую функцию, которая в основном является областью перекрытия между f (x) и g (x).
  3. Когда я интегрирую результирующую функцию шага 2, я получаю общую площадь перекрытия 1,0

Однако это не говорит мне, совпадают ли пики и долины или нет. Я не уверен, что это можно сделать, но если кто-то знает метод, я был бы признателен за вашу помощь.

== РЕДАКТИРОВАТЬ == Для пояснения я включил изображение.

Образцы кривых

Разница между двумя кривыми (черным и синим) может не совпадать, но будет иметь дополняющие формы.

Справочная информация: Функции - это прогнозируемая плотность состояний (PDOS) атомных орбиталей соединения. Итак, у меня есть состояния для s, p, d орбиталей. Я хочу определить, имеет ли материал sp, pd или dd гибридизации (орбитальное смешение). Единственные данные, которые у меня есть, это PDOS. Если, скажем, PDOS s-орбитали (функция f (x)) имеет пики и впадины при тех же энергиях (значениях x) PDOS p-орбитали (функция g (x)), то в этом материале происходит sp-смешивание.

laalee
источник
1
Может быть, взять его на mathoverflow.net ?
Эйфорическая
1
Интересно, у цифровых аудио людей есть подобные проблемы?
Дэн Пичельман,
Спасибо Euphoric, я также задам вопрос на mathoverflow.net
laalee
@laalee Пожалуйста, не задавайте вопросы на нескольких сайтах в сети Stack Exchange. Также Math Overflow - это математика уровня исследований. Math Stack Exchange - не уровень исследований. Я могу перенести это в Math или куда-нибудь еще, если хотите.
Мировой инженер
Приношу извинения. Я пытался удалить его в Mathoverflow, но я не мог найти способ. Буду признателен, если вы сможете удалить его. Спасибо
laalee

Ответы:

4

Это общая и часто трудная проблема в аналитической химии, физике, спектроскопии и т. Д. Используемые подходы могут варьироваться от простого сравнения RMSD до очень сложных методов. Если эту задачу нелегко выполнить с помощью визуального осмотра (люди прекрасно разрабатываются для распознавания признаков), то, скорее всего, это будет трудно выполнить в вычислительном отношении.

Один из подходов состоит в том, чтобы попытаться удалить «базовые линии», чтобы функции имели нулевое значение, за исключением случаев, когда имеются особенности пиков или долин. Лучше всего это сделать с помощью подгонки кривой с использованием полинома низкого порядка или, что еще лучше, более подходящей принципиальной модели того, как базовая линия может и должна выглядеть. Если пики очень резкие, вы можете просто сгладить функцию и вычесть сглаженную функцию из исходной функции.

После удаления базовой линии вы можете нормализовать и сгенерировать невязки или выполнить RMSD (простые подходы) или попытаться обнаружить особенности пиков / долин, подгоняя гауссиан (или любую подходящую модель) к каждой характеристике, которую вы ищете. Если вы в состоянии соответствовать пикам, то вы можете сравнить положения пиков и полуширины.

Посмотрите на SciPy, если вы знаете Python. Удачи.

Дженерик Рацлауг
источник
Спасибо за Ваш ответ. Однако мне не ясно, как найти базовый уровень. Каждый случай будет иметь свою функцию, которую я не могу предсказать заранее.
laalee
3

Это просто «не в моей голове», поэтому я мог бы неправильно понять проблему, но, возможно, вы могли бы применить среднеквадратичное расстояние (RMSD) к функциям. Если вы просто заинтересованы в пиках и долинах, то примените их к областям вокруг этих пиков и долин (то есть для некоторого x +/- некоторого эпсилона, где производная любой функции равна нулю). Если RMSD этого диапазона близка к нулю, то, думаю, у вас хорошее совпадение.

dbc60
источник
Это учитывает разницу между значениями, которые не могут быть равны нулю, хотя формы похожи.
laalee
3

Как я понимаю, информация, которую вы ищете, передается «таблицей изменений» функции - мне очень жаль, что я не знаю английского названия для этого!

Эта таблица связана с дифференцируемой функцией f, и вы создаете ее путем нахождения корней f ' и определения знака f' на каждом интервале между этими нулями.

Итак, если нули f ' и g' более или менее совпадают и знаки этих функций совпадают, они будут иметь аналогичный профиль.

Первое, что я попытался бы запрограммировать, было бы:

  1. Выберите маленький ε
  2. Нарисуйте случайным образом большое количество N точек x [i] в интервале, где определены функции.

  3. Для каждого узла вычислите разности F [i] = f (x [i] + ε) - f (x [i] - ε) и G [i] = g (x [i] + ε) - g (x) [i] - ε) .

  4. Если в каждом узле F [i] и G [i] меньше, чем ε² ИЛИ имеют одинаковый знак, заключите, что две функции почти имеют одинаковый профиль.

Это работает?

Михаэль Ле Барбье Грюневальд
источник
Спасибо мичипили за твой проницательный ответ. В настоящее время я пытаюсь уложиться в срок. Но я
выполню
1

Грубая сила: найдите наименьшее ненулевое значение с плавающей запятой с этим значением в качестве шага, пройдите весь домен и проверьте, равны ли значения?

== РЕДАКТИРОВАТЬ ==

Хммм ... Если под "той же формой" вы подразумеваете g (x) = c * f (x), это решение следует изменить - для каждого элемента домена вы вычисляете f (x) / g (x) и проверяете, результат одинаков для каждой точки (конечно, если g (x) == 0, то вы проверяете, если f (x) == 0, вы не пытаетесь разделить).

Если «одна и та же форма» означает «локальные оптимумы и точки изгиба одинаковы» ... Ну, найдите локальные оптимумы и точки изгиба для f (x) и g (x) (как наборы доменных элементов) и проверьте, если они наборы равны.

Третий вариант: f (x) = g (x) + c. Просто проверьте, имеет ли каждый элемент домена одинаковую разницу f (x) -g (x). Это почти идентично первому случаю, но вместо деления у вас есть различие.

== ЕЩЕ ДРУГОЕ РЕДАКТИРОВАНИЕ ==

Хорошо ... Второй подход из редактирования выше может быть полезным. Кроме того, вы можете объединить его со сравнением знака первого производного (не символического, а рассчитанного как df (x) = f (x) - f (x-step)). Если обе функции имеют один и тот же знак производной во всей области, просто проверьте оптимумы и точки изгиба. Я бы сказал, что этих условий должно быть достаточно, чтобы делать то, что вам нужно.

Филипп Мальчак
источник
Спасибо, Филип, за ответ. Но функции могут не иметь одинаковых значений, но иметь одинаковую форму.
laalee
Я перемещаю этот комментарий, чтобы ответить как редактировать. Проверьте это.
Филипп Мальчак
Спасибо, Филип, за ответ. Я добавил изображение, чтобы прояснить мою проблему.
laalee
1

насколько хорошо эти функции совпадают без визуального контроля.

Вероятно, самый простой способ - это вычислить коэффициент корреляции Пирсона . То есть, используйте ваше f (x) в качестве X и g (x) в качестве Y. По сути, «нарисуйте g (x) как функцию от f (x) и посмотрите, насколько хорошо он образует прямую линию».

Коэффициент корреляции популярен, потому что его легко вычислить, и он часто оправдывается только маханием руками. Это может быть хорошим начальным приближением для некоторых применений, но это определенно не панацея.

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

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

Joonas Pulakka
источник