Fungsi Pi adalah perpanjangan dari faktorial di atas real (atau bahkan bilangan kompleks). Untuk bilangan bulat n , Π (n) = n! , tetapi untuk mendapatkan definisi atas real kami mendefinisikannya menggunakan integral:
Dalam tantangan ini kita akan membalikkan fungsi Π .
Dengan bilangan real z ≥ 1 , cari positif x sedemikian rupa sehingga that (x) = z . Jawaban Anda harus akurat untuk setidaknya 5 digit desimal.
Contoh:
120 -> 5.0000
10 -> 3.39008
3.14 -> 2.44815
2017 -> 6.53847
1.5 -> 1.66277
120 -> -0.991706
. Ini karena Π (x) pergi hingga tak terhingga ketika x pergi ke -1 dari kanan. Mungkin Anda bermaksud menekankan bahwa x> 0 juga.Jawaban:
Mathematica,
171527 byteOutput terlihat seperti
{{x -> n}}
, di manan
solusinya, yang mungkin tidak diizinkan.sumber
Pyth, 4 byte
Program yang mengambil input nomor dan mencetak hasilnya.
Suite uji
Bagaimana itu bekerja
sumber
MATL , 13 byte
Ini menggunakan pencarian linear dalam langkah-langkah
1e-5
mulai dari1
. Jadi itu sangat lambat, dan waktu habis dalam kompiler online.Untuk mengujinya, tautan berikut ini menggantikan
1e-5
persyaratan akurasi oleh1e-2
. Cobalah online!Penjelasan
sumber
GeoGebra , 25 byte
Dimasukkan dalam input CAS, dan mengharapkan input nomor dalam sel spreadsheet
A1
. Mengembalikan array satu elemen dari formulir{x = <result>}
.Berikut adalah gif dari eksekusi:
Bagaimana itu bekerja
N
secaraSolve
persamaan berikut::Gamma(x+1)=A1
dengan nilai awalx=1
.sumber
1.5
. Saya belum dapat menemukan algoritma yang digunakan GeoGebra untuk penyelesaian numerik, tetapi nilai awal darix=1
telah memberikan jawaban murni positif untuk setiap nilai yang saya coba.MATLAB, 59 byte
Ini adalah fungsi anonim yang menemukan minimizer dari perbedaan kuadrat antara fungsi Pi dan inputnya, mulai dari
1
, dengan toleransi yang sangat kecil (diberikan oleheps
) untuk mencapai presisi yang diinginkan.Test case (dijalankan di Matlab R2015b):
Anda dapat mencobanya secara online di Octave, tetapi sayangnya beberapa hasil tidak memiliki ketelitian yang diperlukan.
sumber
J,
8633 byteMenggunakan metode Newton dengan log Pi untuk menghindari luapan.
Ini adalah versi sebelumnya yang menghitung log Gamma menggunakan perkiraan Stirling. Ukuran langkah (1e3) dan jumlah istilah dalam log Gamma (3) dapat ditingkatkan untuk akurasi yang mungkin lebih tinggi dengan biaya kinerja.
Versi lain yang menghitung ketentuan koefisien dengan cepat
Cobalah online! dan untuk melihat istilah-istilah tersebut bertemu .
Penjelasan
sumber
Mathematica, 21 byte
FindRoot
menerapkan metode Newton secara internal ketika ada nilai awal.Dua metode di bawah ini menerapkan metode Newton secara langsung.
Alternatif menggunakan FixedPoint 45 byte
Implementasi metode Newton yang lebih tepat untuk menyelesaikan ini karena Mathematica dapat menghitung turunan secara langsung alih-alih memperkirakannya.
Menggunakan aturan untuk mengganti berulang kali akan lebih pendek, tetapi ada batas (65536) untuk berapa banyak iterasi yang dapat dilakukan yang mungkin terkena sedangkan
FixedPoint
tidak memiliki batas.Alternatif menggunakan aturan, 38 byte
sumber
Jelly , 34 byte
Cobalah online! atau Lihat nilai-nilai antara saat mereka bertemu .
Implementasi kombinasi J dari metode Newton dan perkiraan turunan (metode garis potong) untuk menghitung kebalikan dari Π ( n ).
Ini memecahkan untuk kebalikan dari log ( Π ( n )) sebagai gantinya untuk menghindari overflow.
Dimulai dengan tebakan awal x 0 = y +1 di mana y = log ( Π ( n )). Kemudian beralih hingga konvergensi menggunakan x n +1 = x n - (log ( Π ( x n )) - y ) / (log (( Π (1,001 * x n )) - log ( Π ( x n ))) / (0,001 * x n )).
sumber
1.5
PARI / GP, 30 byte
Menemukan solusi antara
1
danx+1
. Sayangnya,x
tidak cukup besar sebagai batas atas untuk input suka1.5
.sumber
Mathematica, 26 Bytes
Namun solusi lain Mathematica!
Penyelesaian persamaan selalu dapat diubah menjadi masalah minimisasi.
Menemukan argumen yang meminimalkan perbedaan antara sisi kiri dan kanan persamaan.
Menggunakan NArgMin daripada NMinimize memaksa output hanya menjadi hasil yang diinginkan daripada output berbasis aturan verbose biasa (dan menghemat satu byte!)
sumber
C dengan libm, 111
Pembaruan - diperbaiki untuk input 1.5.
gamma(x+1)
adalah fungsi yang meningkat secara monoton pada rentang yang dimaksud, shis hanyalah pencarian biner sampai perbedaan antara nilai-nilai berturut-turut kecil. Batas bawah awal adalah0
dan batas atas awal adalah2*x
.Input dan output adalah melalui pointer ke ganda yang dilewatkan ke fungsi.
Saya cukup yakin ini bisa bermain golf lebih dalam - khususnya saya tidak berpikir saya membutuhkan 4 ganda lokal, tapi sejauh ini saya tidak melihat cara mudah untuk mengurangi ini.
Cobalah secara online - Membangun (menautkan dengan libm) dan berjalan dalam skrip bash.
Tanpa ungolfed:
sumber