Saya ingin tahu apa algoritma numerik yang baik yang ada untuk evaluasi fungsi hypergeometric umum (atau seri), didefinisikan sebagai
Secara umum, seri ini tidak harus konvergen sangat cepat (atau sama sekali), sehingga menyimpulkan istilah satu per satu tampaknya kurang dari ideal. Apakah ada metode alternatif yang berfungsi lebih baik? Untuk lebih spesifik, saya sedang mencari sesuatu yang akan memberikan 4 atau 5 digit presisi dengan jumlah perhitungan yang masuk akal.
Kasus yang paling umum yang biasanya saya lihat digunakan adalah dan p = 2 , q = 1 , tetapi dalam proyek khusus yang saya kerjakan, saya memiliki kebutuhan untuk p = 1 , q = 2 . Jelas algoritma umum untuk p dan q apa pun adalah ideal, tetapi saya akan mengambil apa yang bisa saya dapatkan.
sumber
Jawaban:
Dalam satu aplikasi, agaknya Anda hanya membutuhkan subset kecil dari semua kemungkinan ekstrem dari fungsi hipergeometrik umum. Bagaimanapun, ini adalah fungsi yang sangat umum. Memiliki gagasan tentang kisaran dan parameter a i , b i akan memungkinkan memberikan saran yang lebih spesifik.z Sebuahsaya, bsaya
Secara umum, metode standar, dengan asumsi , tentu saja menggunakan seri daya pendefinisian ketika | z | kecil. Jika p < q + 1 , yang terbaik adalah beralih ke ekspansi asimptotik saat | z | besar, baik karena seri Taylor menyatu terlalu lambat dan / atau karena menjadi terlalu tidak akurat karena pembatalan bencana. Cutoff terbaik antara algoritma ini tergantung pada parameter dan persyaratan akurasi.p ≤ q+ 1 | z| p < q+ 1 | z|
Untuk seri asimptotik diberikan olehhttp://functions.wolfram.com/HypergeometricFunctions/Hypergeometric1F2/06/02/03/Tampaknya agak mengerikan, tetapi jika a 1 , b 1 , b 2 sudah diperbaiki, Anda dapat hitung nilai numerik untuk koefisien terlebih dahulu. Rumus umum ditemukan di DLMF:http://dlmf.nist.gov/16.11(Perhatikan bahwa diperlukan kehati-hatian untuk memilih pemotongan cabang yang benar.)1F2 Sebuah1, b1, b2
Jika ada rentang di mana baik seri Taylor maupun seri asymptotic bekerja dengan cukup baik, "ekspansi yang ditingkatkan secara eksponensial" mungkin berguna. Kemungkinan lain yang layak disebutkan adalah bahwa Anda bisa memasukkan persamaan diferensial hiperometrik ke pemecah ODE tujuan umum. Ini harus bekerja dengan baik terutama jika Anda hanya perlu 4-5 digit. Ini dapat digunakan untuk melakukan kelanjutan analitik dari kecil (di mana seri daya bekerja dengan baik) ke yang lebih besar, atau secara terbalik dari nilai yang diperoleh melalui seri asimptotik (Anda mungkin perlu melakukan sedikit lebih banyak pekerjaan untuk mendapatkan semua turunan diperlukan sebagai nilai awal).z
Jika Anda memerlukan fungsi dengan pada seluruh bidang kompleks maka rumus transformasi 1 / z dapat digunakan untuk memetakan bagian luar unit disk ke interior. Beberapa algoritma akselerasi konvergensi atau metode lain, seperti integrasi numerik dari ODE, harus digunakan dekat dengan lingkaran unit. Jika p > q + 1 jari-jarinya konvergensi adalah nol, jadi jika fungsi yang ingin Anda evaluasi diberikan oleh deret yang berbeda, Anda mungkin perlu menerapkan transformasi Borel (secara numerik atau simbolis) untuk menguranginya menjadi deret konvergen.p = q+ 1 1/z p>q+1
Untuk implementasi yang lengkap, ada masalah lain yang perlu dipertimbangkan juga (misalnya, berurusan dengan parameter yang sangat besar atau sangat dekat dengan bilangan bulat negatif). Untuk parameter yang cukup buruk, akan sangat sulit untuk mendapatkan nilai yang akurat dengan presisi ganda, apa pun yang Anda lakukan, jadi aritmatika presisi arbitrer mungkin diperlukan.
Saya harus mencatat bahwa saya telah menulis implementasi numerik yang hampir lengkap dari fungsi hypergeometric umum untuk pustaka mpmath (saat ini tidak ada seri asimptotik untuk fungsi yang lebih tinggi daripada2F3
sumber
Referensi kanonik untuk semua fungsi khusus adalah Abramowicz dan Stegun. Ini adalah buku yang sudah ada sekitar setengah abad segera dan jika ada sesuatu yang tidak dapat Anda temukan di dalamnya, lihatlah "edisi kedua yang diperbarui" yang sebenarnya adalah sebuah situs web yang dikelola oleh National Institute of Standards (NIST) ). Saya tidak memiliki URL yang tepat tetapi seharusnya tidak terlalu sulit ditemukan.
sumber