Apa algoritma efisien dan akurat untuk evaluasi fungsi hypergeometrik?

16

Saya ingin tahu apa algoritma numerik yang baik yang ada untuk evaluasi fungsi hypergeometric umum (atau seri), didefinisikan sebagai

halFq(Sebuah1,...,Sebuahhal;b1,...,bq;z)=k=0(Sebuah1)k(Sebuahhal)k(b1)k(bq)kzkk!

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.hal=1,q=1hal=2,q=1hal=1,q=2halq

David Z
sumber
Jika kasing Anda tidak tercakup dalam Buku Panduan Abramowitz dan Stegun ( people.math.sfu.ca/~cbm/aands/subj.htm ), yang bukan, Anda pada dasarnya ditakdirkan untuk mencari tahu sendiri, saya ' Aku takut ...
Jaime

Jawaban:

15

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.zSebuahsaya,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.halq+1|z|hal<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.)1F2Sebuah1,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.hal=q+11/zp>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 daripada 2F3

Fredrik Johansson
sumber
Luar biasa! Sayangnya saya tidak dapat benar-benar mendapatkan lebih spesifik tentang nilai parameter karena fungsi tersebut muncul di banyak tempat dengan berbagai nilai. Saya pasti akan tertarik menggunakan dan / atau melihat implementasi Anda di mpmath di beberapa titik.
David Z
1
Jawaban Fredrik benar. Saya hanya akan menunjukkan, bahwa saya akhirnya menggunakan pendekatan rasional (dari Mathematica) untuk nilai-nilai khusus dari koefisien "a" dan "b", karena itu akurat untuk semua "z" nyata (saya membagi sumbu nyata menjadi interval dan menggunakan pendekatan rasional yang berbeda pada masing-masing) dan sangat cepat. Saya menggunakan mpmath untuk memeriksa akurasi implementasi presisi ganda saya di Fortran.
Ondřej Čertík
2

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.

Wolfgang Bangerth
sumber
2
Sekarang disebut "Perpustakaan Digital Fungsi Matematika"; fungsi-fungsi hipergeometrik adalah subjek Bab 15 .
Christian Clason
1
2F11F2