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


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-смешивание.


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 этого диапазона близка к нулю, то, думаю, у вас хорошее совпадение.


Это учитывает разницу между значениями, которые не могут быть равны нулю, хотя формы похожи.
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) и посмотрите, насколько хорошо он образует прямую линию».

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.