Який найкращий спосіб знайти розриви функції чорної скриньки?


20

Було запропоновано, що це може бути кращим місцем для цього питання, ніж обмін стеками математики, де я це задавав раніше .

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

Я можу придумати кілька простих методів (рівномірний відбір проб, уточнення там, де є великі відмінності між зразками, ...), але, можливо, є кращий спосіб?

Функція є "розумною", тому що можна припустити, що вона має щонайменше кінцево багато розривів, однакова для вищих похідних, я не заперечую, якщо пропущені невеликі патологічні розриви ... (додаток автоматизоване побудову 1d функцій) .

-

Дякую всім, хто відповів, зокрема Педро; метод, описаний у Pachón, Platte та Trefethen, здається, є найкращим підходом до мене, тому я зараз переходжу до його реалізації


Мені потрібно задуматися, чи може будь-який із запропонованих методів обробити
1х-1х
JM

@JM: Я додам сюжет цієї функції, коли закінчу реалізацію.
n00b

@ n00b: Ця концепція може бути корисною. : mathoverflow.net/q/165038/14414
Раджеш Дачіраджу

Відповіді:


18

Якщо ви використовуєте Matlab, вас може зацікавити проект Chebfun . Chebfun приймає функцію, відбирає її і намагається представити її як поліноміальний інтерполянт. Якщо у вашої функції є розриви, Chebfun повинен мати можливість виявити їх за допомогою splitting onкоманди. Ви можете знайти кілька прикладів тут .

Якщо вас цікавлять основні алгоритми, хороша довідка - папір Пахона, Платта та Трефетена " Piecewise Smooth Chebfuns ".


Дякую Педро, я знайомий з Chebfun, який є чудовим, але величезним (і має величезну неявну вартість через ліцензію Matlab). Тому я справді шукаю невеликий жорсткий алгоритм цієї проблеми, який я би реалізував сам.
n00b

@ n00b: Добре. Я додав посилання на документ, що описує основні алгоритми, наприклад, для виявлення ребер.
Педро

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

11

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

f


8

Методи зважених, по суті, не коливальних (ВЕНО) використовують "показники гладкості" для виявлення розривів у методах обмеженого обсягу та різниці. З опису Чебфуна, який дав Педро, здається, що загальна ідея однакова: побудуйте набір інтерполяційних поліномів і використовуйте їх для обчислення певної міри гладкості.

Див. GS Jiang та CW Shu, Ефективне впровадження зважених схем ENO, J.Comput.Phys., Vol. 126, арк. 202--228, 1996.


5

Поряд із @Pedro, я би розглядав алгоритми виявлення ребер. Переривчастість - це нескінченність похідної, тому варто поглянути на все більш тонку сітку та орієнтуватися на цікаві регіони.

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

f(х)=сiгн(х)|х|х=0годх0


1
Одна тонкість проблеми полягає в тому, що, хоча розрив може розглядатися як нескінченність у похідній, навпаки не вірно - знак функції (x) * sqrt (| x |) ідеально неперервний при x = 0, але похідна там нескінченна
n00b

Я також не погоджуюся з коментарем, що "будь-яка безперервна функція повинна бути гладкою при досить малих масштабах". Плавність пов'язана з суцільними похідними; безперервність вихідної функції - необхідна умова, але недостатня.
Джефф Оксберрі

1
@GeoffOxberry: видалено це твердження. Це розумний результат у FD, але не аналітично.
Філ Н
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.