Як порівняти характеристики двох кривих?


11

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

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

Однак це не говорить про те, збігаються чи ні вершини та долини. Я не впевнений, чи можна це зробити, але якщо хтось знає метод, я буду вдячний за вашу допомогу.

== EDIT == Для уточнення я включив зображення.

Зразкові криві

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

Передумови: Функції - прогнозована щільність станів (PDOS) атомних орбіталей сполуки. Отже, у мене є стани для s, p, d орбіталей. Я хочу визначити, чи має матеріал у гібридизаціях sp, pd або dd (орбітальне змішування). Єдині дані, які я маю - це PDOS. Якщо сказати, що PDOS з s орбіталі (функція f (x)) має вершини та долини, як при однакових енергіях (значення x) PDOS p орбіталі (функція g (x)), то в цьому матеріалі відбувається змішування sp.


1
Може, перенести це на mathoverflow.net ?
Ейфорія

1
Цікаво, чи є у людей із цифровим аудіо подібні проблеми?
Ден Пішельман

Дякую Ейфорік, я запитаю це питання також на mathoverflow.net
laalee

@laalee Будь ласка, не задавайте своє запитання на більш ніж одному сайті мережі Stack Exchange. Також переповнення математики - це математика на рівні досліджень. Обмін стеком математики не є дослідницьким рівнем. Я можу перенести це на Math або кудись інше, якщо хочете.
Світовий інженер

Я прошу вибачення. Я спробував видалити його в mathoverflow, але не зміг знайти спосіб. Буду вдячний, якщо ви можете його видалити. Спасибі
laalee

Відповіді:


4

Це поширена і часто складна проблема в аналітичній хімії, фізиці, спектроскопії тощо. Використовувані підходи можуть варіюватися від простого порівняння RMSD до дуже складних методів. Якщо завдання нелегко виконати за допомогою візуального огляду (люди вишукано розроблені для розпізнавання особливостей), то, ймовірно, складно зробити це обчислювально.

Один із підходів полягає в тому, щоб спробувати видалити «базові лінії», щоб функції були нульовими, за винятком випадків, коли є пікові або долинні особливості. Найкраще це зробити при встановленні кривих, використовуючи поліном низького порядку, або, що ще краще, більш підходящу принципову модель того, як може і має виглядати базова лінія. Якщо піки дуже гострі, ви можете просто згладити функцію і відняти згладжену функцію від початкової функції.

Вилучивши базову лінію, ви можете нормалізувати та генерувати залишки або виконати RMSD (прості підходи) або спробувати виявити особливості піку / долини, встановивши гаусса (або будь-яку модель, що підходить) для кожної особливості, яку ви шукаєте. Якщо ви вмієте підходити до вершин, то ви можете порівняти місця піків та півширини.

Погляньте на SciPy, якщо ви знаєте Python. Удачі.


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

3

Це просто "у верхній частині моєї голови", тому я можу цілком нерозуміти проблему, але, можливо, ви можете застосувати коренево-середньоквадратичну відстань (RMSD) до функцій. Якщо вас просто цікавлять вершини та долини, то застосуйте їх до областей навколо цих вершин і долини (тобто для деяких x +/- деякого епсилона, де похідна будь-якої функції дорівнює нулю). Якщо RMSD такого діапазону майже нульовий, я думаю, що у вас хороша відповідність.


При цьому враховується різниця між значеннями, яка може бути не нульовою, хоча форми схожі.
laalee

3

Поки я не скажу, що шукану інформацію передають функції «tableau des variations» функції - мені дуже шкода, що я не знаю англійської назви для цього!

Ця таблиця пов'язана з диференційованою функцією 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] обидві менше, ніж ε² АБО, мають обидва однакові знаки, зробіть висновок, що дві функції майже мають однаковий профіль.

Це працює?


Дякуємо michipili за вашу проникливу відповідь. Зараз я намагаюся дотриматись терміну. Але я реалізую це, як тільки зможу, і повідомляю вас
laalee

1

Найсильніша сила: дізнайтеся найменше ненульове значення float з цим значенням як крок, пройдіть весь домен і перевірте, чи рівні рівні?

== EDIT ==

Хммм ... Якщо під "однаковою формою" ви маєте на увазі 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-крок)). Якщо обидві функції мають однакову ознаку похідної у всій області, перевірте оптими та точки згину, щоб бути впевненим. Я б сказав, що цих умов має бути достатньо, щоб зробити те, що потрібно.


Дякую Філіпу за вашу відповідь. Але функції можуть не мати рівних значень, але мати однакову форму.
laalee

Я переміщую цей коментар, щоб відповісти як редагувати. Перевір.
Філіп Мальчак

Дякую Філіпу за вашу відповідь. Я додав зображення, щоб уточнити свою проблему.
laalee

1

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

Напевно, найпростіший спосіб - це обчислити коефіцієнт кореляції Пірсона . Тобто, використовуйте свій f (x) як X, а g (x) як Y. Ефективно "побудуйте графік g (x) як функцію f (x) і подивіться, наскільки добре він утворює пряму лінію".

Коефіцієнт кореляції популярний, тому що його легко обчислити і часто виправдовується лише маханням руками. Це може бути хорошим початковим наближенням для деяких застосувань, але, безумовно, не панацея.

Щоб отримати кращі результати в реальних програмах, вам потрібно зрозуміти, що відбувається в даних, тобто процес, який генерує дані. Часто є якесь тло , і цікаві функції їздять поверх цього фону. Якщо ви кинете цілі дані в чорний ящик, ви можете порівняти переважно фони: чорна скринька не знає, яка частина даних є цікавою частиною. Тому, щоб отримати кращі результати, часто корисно якось видалити фони, а потім порівняти те, що у вас залишилося. Встановлення ліній чи кривих чи середніх значень і віднімання або ділення ними, низько-, смугова або високочастотна фільтрація, подача даних за допомогою якоїсь нелінійної функції ... ви її називаєте.

Однозначної правильної відповіді точно немає. Ви отримаєте стільки ж різних результатів, скільки спробуєте методів. Але деякі результати кращі, ніж деякі. Теоретичні міркування можуть допомогти почати в правильному напрямку, але як встановити параметри та налагодити свій метод, в кінцевому підсумку можна знайти лише спробувавши їх та порівнявши результати реального світу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.