Bagaimana cara membandingkan fitur dua kurva?

11

Saya perlu membandingkan dua kurva f (x) dan g (x). Mereka berada dalam kisaran x yang sama (katakan -30 hingga 30). f (x) mungkin memiliki beberapa puncak yang tajam atau puncak dan lembah yang halus. g (x) mungkin memiliki puncak dan lembah yang sama. Jika demikian saya ingin mengukur seberapa baik fitur-fitur ini bertepatan tanpa inspeksi visual. Saya telah mencoba menyelesaikan masalah ini dengan cara berikut.

  1. Normalisasi kedua fungsi dengan membagi setiap titik data dengan total area fungsi. Sekarang area fungsi yang dinormalisasi adalah 1.0
  2. Pada setiap x dapatkan nilai minimum dari f (x) dan g (x). Ini akan memberi saya fungsi baru yang pada dasarnya adalah area yang tumpang tindih antara f (x) dan g (x).
  3. Ketika saya mengintegrasikan fungsi yang dihasilkan dari langkah 2 saya mendapatkan total area yang tumpang tindih dari 1.0

Namun ini tidak memberi tahu saya apakah puncak dan lembah bertepatan atau tidak. Saya tidak yakin apakah ini dapat dilakukan tetapi jika seseorang mengetahui suatu metode, saya akan sangat menghargai bantuan Anda.

== EDIT == Untuk klarifikasi saya telah menyertakan gambar.

Kurva sampel

Perbedaan antara dua kurva (hitam dan biru) mungkin tidak sama tetapi akan memiliki bentuk yang saling melengkapi.

Latar Belakang: Fungsi-fungsi ini diproyeksikan densitas keadaan (PDOS) orbital atom suatu senyawa. Jadi saya memiliki status untuk orbital s, p, d. Saya ingin menentukan apakah materi tersebut memiliki hibridisasi sp, pd atau dd (pencampuran orbital). Satu-satunya data yang saya miliki adalah PDOS. Jika mengatakan PDOS orbital s (fungsi f (x)) memiliki puncak dan lembah pada energi yang sama (nilai x) dari PDOS p orbital (fungsi g (x)) maka ada pencampuran sp dalam materi tersebut.

laalee
sumber
1
Mungkin bawa ke mathoverflow.net ?
Euforia
1
Saya ingin tahu apakah orang-orang audio digital memiliki masalah yang sama?
Dan Pichelman
Terima kasih Euforia, saya akan mengajukan pertanyaan di mathoverflow.net juga
laalee
@laalee Tolong jangan ajukan pertanyaan Anda di lebih dari satu situs di jaringan Stack Exchange. Juga Matematika Overflow adalah matematika tingkat Penelitian. Pertukaran Matematika Stack adalah tingkat non-Penelitian. Saya bisa memindahkan ini ke Matematika atau di tempat lain jika Anda mau.
Insinyur Dunia
Saya minta maaf. Saya mencoba untuk menghapusnya di mathoverflow tetapi saya tidak dapat menemukan cara. Saya akan sangat menghargai jika Anda bisa menghapusnya. Terima kasih
laalee

Jawaban:

4

Ini adalah masalah umum dan seringkali sulit dalam kimia analitik, fisika, spektroskopi, dll. Pendekatan yang digunakan dapat berkisar dari perbandingan RMSD sederhana hingga metode yang sangat canggih. Jika tugas tidak mudah dilakukan dengan inspeksi visual (manusia dikembangkan dengan indah untuk pengenalan fitur), maka kemungkinan akan sulit dilakukan secara komputasi.

Salah satu pendekatan adalah mencoba untuk menghapus "garis dasar" sehingga fungsi bernilai nol kecuali di mana ada fitur puncak atau lembah. Ini paling baik dilakukan dengan pemasangan kurva menggunakan polinomial orde rendah, atau, lebih baik lagi, model berprinsip yang lebih tepat dari apa yang dapat dan harus terlihat seperti garis dasar. Jika puncaknya sangat tajam, Anda bisa menghaluskan fungsinya dan mengurangi fungsi yang dihaluskan dari fungsi aslinya.

Setelah menghapus garis dasar, Anda dapat menormalkan dan menghasilkan residu atau melakukan RMSD (pendekatan sederhana) atau mencoba mendeteksi fitur puncak / lembah dengan memasang gaussian (atau model apa pun yang sesuai) untuk setiap fitur yang Anda cari. Jika Anda dapat menyesuaikan puncak, maka Anda dapat membandingkan lokasi puncak dan setengah lebar.

Lihatlah SciPy jika Anda tahu Python. Semoga berhasil.

Ratzlaugh Generik
sumber
Terima kasih atas jawaban anda. Namun saya tidak jelas bagaimana menemukan garis dasar. Setiap kasing akan memiliki fungsi berbeda yang tidak dapat saya prediksi sebelumnya.
laalee
3

Ini hanya "dari atas kepala saya", jadi saya bisa salah paham masalah sepenuhnya, tapi mungkin Anda bisa menerapkan jarak root-mean-square (RMSD) ke fungsi. Jika Anda hanya tertarik pada puncak dan lembah, maka terapkan pada area di sekitar puncak dan lembah tersebut (yaitu, untuk beberapa x +/- beberapa epsilon di mana turunan dari salah satu fungsi adalah nol). Jika RMSD dari kisaran itu mendekati nol, maka Anda memiliki kecocokan yang baik, saya pikir.

dbc60
sumber
Ini mempertimbangkan perbedaan antara nilai, yang mungkin tidak nol meskipun bentuknya mirip.
laalee
3

Saat saya tidak tahu, informasi yang Anda cari disampaikan oleh "tableau des variasi" dari fungsi — saya sangat menyesal bahwa saya tidak tahu nama bahasa Inggris untuk ini!

Tabel ini dikaitkan dengan fungsi terdiferensiasi f dan Anda membangunnya dengan mencari akar f ' dan menentukan tanda f' pada setiap interval antara nol ini.

Jadi, jika nol f ' dan g' kurang lebih bertepatan dan tanda-tanda fungsi tesis setuju, mereka akan memiliki profil yang sama.

Hal pertama yang saya coba programkan adalah:

  1. Pilih ε kecil
  2. Gambarkan secara acak sejumlah besar N dari titik x [i] dalam interval di mana fungsi didefinisikan.

  3. Untuk setiap node, hitung perbedaan F [i] = f (x [i] + ε) - f (x [i] - ε) dan G [i] = g (x [i] + ε) - g (x [i] - ε) .

  4. Jika pada setiap node, F [i] dan G [i] keduanya lebih kecil dari ε² ATAU memiliki kedua tanda yang sama, simpulkan bahwa kedua fungsi tersebut hampir memiliki profil yang sama.

Apakah itu bekerja?

Michael Le Barbier Grünewald
sumber
Terima kasih michipili atas jawaban wawasan Anda. Saat ini saya sedang berusaha memenuhi tenggat waktu. Tetapi saya akan mengimplementasikan ini secepat mungkin dan memberi tahu Anda
laalee
1

Brute force: cari tahu nilai float non-nol terkecil dengan nilai ini sebagai langkah, periksa seluruh domain dan periksa apakah nilainya sama?

== EDIT ==

Hmmm ... Jika dengan "bentuk yang sama" yang Anda maksud g (x) = c * f (x), solusi ini harus dimodifikasi - untuk setiap elemen domain yang Anda hitung f (x) / g (x) dan periksa apakah hasilnya sama untuk setiap titik (tentu saja, jika g (x) == 0, maka Anda memeriksa apakah f (x) == 0, Anda tidak mencoba untuk membagi).

Jika "bentuk yang sama" berarti "optimum lokal dan titik tekuk adalah sama" ... Nah, cari optimum lokal dan titik tekuk untuk f (x) dan g (x) (sebagai set elemen domain) dan periksa, apakah set sama.

Opsi ketiga: f (x) = g (x) + c. Cukup periksa apakah setiap elemen domain memiliki perbedaan yang sama f (x) -g (x). Ini hampir identik dengan kasus pertama, tetapi alih-alih pembagian Anda memiliki perbedaan.

== BELUM EDIT LAINNYA ==

Baiklah ... Pendekatan kedua dari edit di atas mungkin bermanfaat. Anda juga dapat menggabungkannya dengan membandingkan tanda dervatif pertama (tidak simbolis, tetapi dihitung sebagai df (x) = f (x) - f (x-step)). Jika kedua fungsi memiliki tanda turunan yang sama di seluruh domain, periksa optimas dan tekuk, hanya untuk memastikan. Menurut saya syarat ini cukup untuk melakukan apa yang Anda butuhkan.

Filip Malczak
sumber
Filip terima kasih atas balasan Anda. Tetapi fungsi mungkin tidak memiliki nilai yang sama tetapi memiliki bentuk yang sama.
laalee
Saya memindahkan komentar ini untuk menjawab sebagai edit. Saksikan berikut ini.
Filip Malczak
Terima kasih Filip atas jawaban Anda. Saya telah menambahkan gambar untuk mengklarifikasi masalah saya.
laalee
1

seberapa baik fitur ini bertepatan tanpa inspeksi visual.

Mungkin cara yang paling mudah adalah dengan menghitung koefisien korelasi Pearson . Yaitu, gunakan f (x) sebagai X dan g (x) sebagai Y. Secara efektif "plot g (x) sebagai fungsi dari f (x) dan lihat seberapa baik ia membentuk garis lurus".

Koefisien korelasi populer karena mudah dihitung, dan seringkali dibenarkan hanya dengan melambaikan tangan. Ini mungkin merupakan perkiraan awal yang baik untuk beberapa penggunaan, tetapi jelas bukan obat mujarab.

Untuk mendapatkan hasil yang lebih baik dalam aplikasi dunia nyata, Anda perlu memahami apa yang terjadi dalam data, yaitu proses yang menghasilkan data. Seringkali ada semacam latar belakang , dan fitur menarik naik di atas latar belakang itu. Jika Anda membuang seluruh data ke dalam kotak hitam, Anda mungkin akhirnya membandingkan sebagian besar latar belakang: kotak hitam tidak tahu bagian mana dari data yang merupakan bagian yang menarik. Jadi, untuk mendapatkan hasil yang lebih baik, seringkali merupakan ide bagus untuk menghapus latar belakang, dan kemudian membandingkan apa yang tersisa. Mencocokkan garis atau kurva atau rata-rata dan mengurangi atau membaginya dengan, penyaringan low, band- atau highpass, mengumpankan data melalui beberapa fungsi nonlinier ... sebut saja.

Jelas tidak ada jawaban yang benar. Anda akan mendapatkan banyak hasil berbeda saat Anda mencoba metode. Tetapi, beberapa hasilnya lebih baik daripada beberapa filter. Alasan teoretis dapat membantu memulai ke arah yang benar, tetapi bagaimana mengatur parameter dan menyempurnakan metode Anda, pada akhirnya dapat ditemukan hanya dengan mencobanya dan membandingkan hasil di dunia nyata.

Joonas Pulakka
sumber