seperti judulnya saya mencoba untuk menghitung integral dari fungsi yang didukung secara kompak (polinomial quintic Wendland) pada segitiga. Perhatikan, bahwa pusat fungsi berada di suatu tempat dalam ruang 3-D. Saya mengintegrasikan fungsi ini pada sembarang segitiga, tetapi kecil ( ). Saat ini saya menggunakan integrasi yang dijelaskan oleh Dunavant, 1985 (p = 19).
Namun tampaknya, aturan kuadratur ini tidak cocok untuk masalah yang didukung secara kompak. Ini didukung oleh fakta bahwa ketika saya mengintegrasikan (jadi fungsi yaitu 1 di dalam lingkaran jari-jari 1) pada bidang yang didiskrit menggunakan segitiga, hasil (normalisasi) saya adalah antara 1,001 dan 0,897.
Jadi pertanyaan saya adalah, apakah ada aturan quadrature khusus untuk masalah seperti ini? Apakah aturan integrasi komposit tingkat rendah berfungsi lebih baik?
Sayangnya rutin ini sangat penting dalam kode saya sehingga ketepatan sangat penting. Di sisi lain saya perlu melakukan integrasi ini "beberapa kali" untuk satu langkah waktu sehingga biaya komputasi tidak boleh terlalu tinggi. Paralelisasi bukan masalah karena saya akan menjalankan integrasi itu sendiri secara serial.
Terima kasih sebelumnya atas jawaban Anda.
EDIT: polinomial Wendland diberikan oleh dengan dan dengan r_0 menjadi vektor sembarang dalam \ mathbb {R} ^ 3α=21 r0R3
EDIT2: Jika adalah segitiga dua dimensi maka saya ingin menghitung dengan . Jadi dalam tidak akan pernah lebih kecil dari 0. Perhatikan bahwa integral adalah integral permukaan atas permukaan 2-D di
EDIT3: Saya punya solusi analitis untuk masalah 1-D (line). Menghitung satu untuk 2-D (segitiga) juga dimungkinkan.
sumber
Jawaban:
Karena fungsinya halus dalam , tetapi tidak pada derajat tetap (dalam bidang, yaitu), saya akan menyarankan menggunakan skema adaptif sederhana, misalnya Aturan Trapesium dengan metode Romberg , dalam kedua dimensi.q≤ 2
Yaitu, jika segitiga Anda ditentukan oleh simpul , dan , dan Anda memiliki rutin yang terintegrasi sepanjang garis dari ke , Anda bisa melakukan hal berikut (dalam notasi Matlab):y z ∈ R 3x y z∈ R3
romb(f,a,b)
f
a
b
Di
romb
, jangan gunakan jumlah poin tetap, tetapi teruskan tabel sampai perbedaan antara dua diagonal berturut-turut di bawah toleransi yang Anda butuhkan. Karena fungsi Anda lancar, ini seharusnya merupakan estimasi kesalahan yang baik.Jika bagian dari segitiga berada di luar domain , Anda dapat mencoba menyesuaikan batas integrasi dalam kode di atas.W( q)
Ini mungkin bukan cara yang paling efisien secara komputasi untuk menyelesaikan masalah Anda, tetapi adaptasi akan memberi Anda lebih banyak kekuatan daripada aturan tingkat tetap.
sumber
Untuk tinjauan umum yang baik tentang aturan cubature, lihat "R. Cools, An Encyclopaedia of Cubature Formulas J. Complexity, 19: 445-453, 2003". Menggunakan aturan tetap, dapat memberi Anda keuntungan bahwa beberapa aturan mengintegrasikan polinomial dengan tepat (seperti quadrature Gaussian dalam satu dimensi).
Cools juga merupakan salah satu penulis utama CUBPACK , paket perangkat lunak untuk bilangan numerik.
sumber
Aturan integrasi mengasumsikan bahwa fungsi secara lokal didekati dengan baik oleh polinomial tingkat rendah. Masalah Anda tidak ada hubungannya dengan dukungan yang ringkas. Fungsi basis radial yang didukung secara halus di batas pendukung, dan aturan kuadratur hingga urutan kehalusan dapat digunakan tanpa masalah. (Aturan urutan lebih tinggi tidak membantu; oleh karena itu Anda sebaiknya tidak menggunakan aturan yang mengintegrasikan polinomial derajat 5 dengan tepat.)
Dalam kasus Anda, ketidaktepatan berasal dari fakta bahwa asumsi aproksimasi polinomial yang baik gagal dalam kasus Anda untuk segitiga dekat , bahkan ketika mereka tidak mengandung .r 0r0 r0
q q r r → r 0 r rW halus sebagai fungsi , tetapi adalah fungsi nonsmooth dari , dengan gradien yang menjadi tak terbatas dalam batas . Integrasi lebih dari , dan fungsi komposit adalah fungsi tidak mulus dari .q q r r→r0 r r
Jika segitiga tidak mengandung , fungsinya adalah tetapi ini tidak membantu karena turunan yang lebih tinggi tumbuh sangat cepat mendekati , dan kesalahan metode orde tinggi sebanding dengan turunan orde tinggi, maka sangat besar !C i n f r 0r0 Cinf r0
Obat sederhana adalah dengan membagi setiap segitiga T menjadi sejumlah N_T subtriangles. Anda dapat mengambil jauh dari , dan mendekati . Anda dapat mengetahui secara offline seberapa besar harus untuk segitiga dengan diameter dan jarak tertentu dari untuk mencapai akurasi yang diinginkan. Selain itu, Anda hanya boleh menggunakan rumus pesanan rendah mendekati .r 0 N T ≫ 1 r 0 N T r 0 r 0NT=1 r0 NT≫1 r0 NT r0 r0
Saat Anda mengintegrasikan lebih dari satu segitiga, tetapi adalah 3-dimensi, segitiga itu tampaknya dalam .R 3r0 R3
Obat yang lebih cepat karena itu akan mentabulasikan integral untuk sebagai fungsi dari koordinat segitiga (dinormalisasi dengan memutarnya menjadi plane 2-dimensi sedemikian sehingga satu titik terletak pada sumbu, dan memantulkannya sedemikian rupa sehingga yang kedua) vertex terletak di atasnya). Tabulasi ini harus cukup rinci untuk membuat interpolasi linier atau kuadrat cukup akurat. Tapi Anda bisa menggunakan metode lambat yang diuraikan terlebih dahulu untuk membuat tabel ini.x y xr0=0 xy x
Cara lain untuk menghilangkan masalah adalah dengan menggunakan fungsi basis radial yang didukung secara kompak yang merupakan polinomial dalam daripada . Ini halus di mana-mana, dan mudah diintegrasikan. qq2 q
sumber