Disarankan bahwa ini mungkin tempat yang lebih baik untuk pertanyaan ini daripada Mathematics Stack Exchange tempat saya bertanya sebelumnya .
Misalkan seseorang memiliki fungsi kotak hitam yang dapat dievaluasi di mana saja (murah) pada interval yang ditentukan dan tidak memiliki noise (kecuali granularity titik apung, katakanlah). Apa cara terbaik untuk menemukan diskontinuitas fungsi ini? Saya tidak tahu ada berapa diskontinuitas dan mungkin tidak ada.
Saya dapat memikirkan beberapa metode langsung (sampling seragam, saring di mana ada perbedaan besar antara sampel, ...), tetapi mungkin ada cara yang lebih baik?
Fungsi ini "masuk akal" karena orang dapat berasumsi bahwa ia memiliki paling banyak diskontinuitas, sama untuk turunan yang lebih tinggi, saya tidak keberatan jika diskontinuitas patologis kecil terlewatkan ... (aplikasi ini memplot otomatis fungsi 1d) .
-
Terima kasih kepada semua yang menjawab, khususnya Pedro; metode yang dijelaskan dalam Pachón, Platte dan Trefethen tampaknya menjadi pendekatan terbaik bagi saya, jadi saya pergi sekarang untuk mengimplementasikannya
Jawaban:
Jika Anda menggunakan Matlab, Anda mungkin tertarik dengan proyek Chebfun . Chebfun mengambil fungsi, mengambil sampelnya dan mencoba untuk merepresentasikannya sebagai interpolasi polinomial. Jika fungsi Anda memiliki diskontinuitas, Chebfun seharusnya dapat mendeteksinya dengan
splitting on
perintah. Anda dapat menemukan beberapa contoh di sini .Jika Anda tertarik pada algoritma yang mendasarinya, referensi yang bagus adalah makalah Pachón, Platte dan Trefethen " Piecewise Smooth Chebfuns ".
sumber
Saya menduga bahwa algoritma chebfun harus tampak lebih praktis, tetapi tidak perlu menyebutkan satu lagi cara untuk mendeteksi diskontinuitas, yaitu transformasi wavelet diskrit. Anda bisa mendapatkan ide bagaimana cara kerjanya dengan melihat halaman dokumentasi Mathematica ini , lihat bagian> Aplikasi> Detect Discontinuities and Edges.
sumber
Metode Weighted Essences Non-Oscillatory (WENO) menggunakan "indikator kelancaran" untuk mendeteksi diskontinuitas dalam volume hingga dan metode perbedaan. Dari uraian Chebfun yang diberikan Pedro, tampaknya gagasan umumnya sama: membangun seperangkat polinomial yang diinterpolasi dan menggunakannya untuk menghitung beberapa tingkat kelancaran.
Lihat GS Jiang, dan CW Shu, Penerapan efisien skema ENO tertimbang, J.Comput.Phys., Vol. 126, hlm. 202-228, 1996.
sumber
Bersama dengan @Pedro, saya akan melihat algoritma deteksi tepi. Diskontinuitas adalah ketidakterbatasan turunan, jadi pertimbangkan untuk melihat jaring yang semakin halus dan menargetkan wilayah yang diminati.
Perkiraan perbedaan hingga turunan dari fungsi kontinu harus dikurangi ketika mesh dimurnikan. Membandingkan hasil perbedaan hingga untuk turunan antara jerat kemudian dapat mengungkapkan divergensi dalam gradien yang menandakan diskontinuitas.
sumber