Implementasi open source dari pendekatan rasional terhadap suatu fungsi

15

Saya mencari beberapa implementasi open source (salah satu dari Python, C, C ++, Fortran baik-baik saja) dari pendekatan rasional ke suatu fungsi. Sesuatu di sepanjang artikel [1]. Saya memberinya fungsi dan mengembalikan dua polinomial, yang rasionya merupakan perkiraan pada interval yang diberikan dan kesalahannya berosilasi dengan amplitudo yang sama dan merupakan perkiraan optimal, atau mendekati itu.

Inilah yang saya temukan:

  • Sepertinya chebfun dapat melakukan itu, tetapi saya tidak memiliki akses ke Matlab *.

  • Ada program sederhana di bagian 5-13 "Pendekatan Rasional Chebyshev" dalam Numerical Recipes (NR).

  • Mathematica memiliki EconomizedRproximation dan MiniMaxAproximation

Saya bertanya-tanya apakah ada sesuatu yang lebih baru (mungkin lebih baik diuji) daripada kode NR.

Aplikasi saya adalah bahwa saya memiliki satu set fungsi khusus, sekitar 10, yang diberikan baik sebagai seri hypergeometric, atau beberapa formula yang memiliki pembatalan numerik, dan saya ingin memiliki fungsi evaluasi yang kuat, cepat dan akurat, yang dipanggil dalam loop paling dalam menghitung dua elemen matriks partikel dalam perhitungan Hartree Fock. Saya memberikan contoh sederhana dari fungsi yang bekerja untuk saya di [2]. Seperti yang Anda lihat, itu menggunakan rumus langsung, atau seri sekitar x = 0, yang saya hitung menggunakan SymPy. Ini semacam bekerja, tetapi akurasinya tidak besar, sekitar x = 1 sekitar setengah dari digit signifikan hilang (tetapi untuk x = 0,1 serta x = 1e5 akurat untuk hampir semua digit signifikan). Saya mencari pendekatan yang lebih baik.

[1] Deun, J., & Trefethen, LN (2011). Implementasi yang kuat dari metode Carathéodory-Fejér untuk pendekatan rasional. BIT Numerical Mathematics, 51 (4), 1039-1050. doi: 10.1007 / s10543-011-0331-7 ( e-print Juni 2010 )

[2] https://gist.github.com/3831580

(*) Atau ke situs web chebfun, yang memberi saya 404, tetapi Pedro menyarankan bahwa itu harus menjadi masalah penyedia saya.

OndČej Čertík
sumber

Jawaban:

4

Mungkinkah ini membantu? http://www.alglib.net/interpolation/rational.php

GertVdE
sumber
1
Terima kasih, saya pikir ini akan berhasil. Saya perlu belajar menggunakannya. Saat ini, saya berada di bawah tekanan waktu, jadi saya hanya menggunakan MiniMaxApproximation dari Mathematica untuk menyelesaikan pekerjaan, tetapi saya ingin belajar melakukan ini menggunakan alat opensource.
Ondřej Čertík
10

Melakukan pendekatan rasional terbaik satu kali saja sering dapat dilakukan dengan iterasi "manual" dari algoritma Remez : interpolasi perkiraan rasional dengan (relatif atau absolut) kesalahan tanda bergantian pada tebakan awal untuk titik interpolasi, temukan satu (atau lebih) titik di mana kesalahan aktual melebihi titik interpolasi dan pivot (menukar satu atau beberapa titik tebakan untuk hal ini, dengan cara yang menjaga kesalahan tanda bergantian). Ini cara yang baik untuk memahami teori dari awal. Ketika akurasi yang disyaratkan sederhana, saya menemukan implementasi spreadsheet membantu saya merasakan jalan saya melalui perhitungan dan mengadaptasi masalah melalui cut-and-paste.

y=1/x1x2masukkan deskripsi gambar di sini

Jika kita menurunkan garis lurus setengah jarak pada titik "kesalahan maksimum", maka kita akan memiliki tiga titik "equi-osilasi" kesalahan absolut menghitung dua titik akhir dan titik kritis ini di interior. Dengan demikian perkiraan polinomial linier terbaik untuk fungsi cembung halus dapat ditemukan hampir dengan inspeksi.

Perangkat lunak Chebfun sendiri adalah open source ( lisensi gaya BSD ) sejak v4.0. Tidak yakin mengapa tautan ke situs mereka mungkin telah memberikan kesalahan 404 saat itu, tetapi sekarang ada di v5.2.1. (Mereka juga memiliki repositori GitHub .) Proyek Chebfun bertujuan lebih dari perkiraan rasional terbaik, dengan konsep sentral menjadi sintaksis mirip-vektor Matlab untuk fungsi (univariat nyata) pada suatu interval.

Untuk menyelesaikan lingkaran akan membutuhkannya berfungsi di bawah Oktaf daripada Matlab. Ada thread Octave-maintainer tentang ini dimulai pada tahun 2010. Sebuah makalah 2012 oleh Chebfun pengelola / penulis menyarankan beberapa upaya telah pergi ke kompatibilitas Oktaf dari pihak mereka.

Melihat halaman proyek yang berhubungan dengan Chebfun menunjukkan bahwa karena perangkat lunak Chebfun adalah open source, dimungkinkan untuk melakukan port ini, atau menggunakan salah satu paket open source yang terdaftar di sana, seperti Olivier Verdier's pychebfun, a Python Chebyshev Functions proyek dihosting di GitHub.

hardmath
sumber
1
Tautan ini di situs web Chebfun memiliki dokumentasi bagaimana melakukan perkiraan rasional dengan menggunakannya: chebfun.org/docs/guide/guide04.html
Ondřej Čertík