กลับไปหน้าบทความ

อ่าน 5 นาที

การประมาณค่าแบบ Lanczos

ใน ทางคณิตศาสตร์ การประมาณค่าแบบแลนซอส (Lanczos approximation) เป็นวิธีการคำนวณ ฟังก์ชันแกมมา เชิงตัวเลข ซึ่งเผยแพร่โดย คอร์เนลิอุส แลนซอส ในปี 1964...

การประมาณค่าแบบ Lanczos

ในทางคณิตศาสตร์การประมาณค่าแบบแลนซอส (Lanczos approximation)เป็นวิธีการคำนวณฟังก์ชันแกมมาเชิงตัวเลข ซึ่งเผยแพร่โดยคอร์เนลิอุส แลนซอส ในปี 1964 วิธีนี้เป็นทางเลือกที่ใช้งานได้จริงแทน การประมาณค่าแบบสเตอร์ลิง (Stirling's approximation)ซึ่งเป็นที่นิยมมากกว่าสำหรับการคำนวณฟังก์ชันแกมมาด้วยความแม่นยำคงที่

การแนะนำ

การประมาณค่าแบบ Lanczos ประกอบด้วยสูตรดังนี้

สำหรับฟังก์ชันแกมมา โดยมี

ในที่นี้gเป็นค่าคง ที่จริง ที่สามารถเลือกได้ตามอำเภอใจภายใต้ข้อจำกัดที่ว่าRe( z + g + 1/2) > 0 . [ 1 ]สัมประสิทธิ์ pซึ่งขึ้นอยู่กับ gนั้นคำนวณได้ยากกว่าเล็กน้อย (ดูด้านล่าง) แม้ว่าสูตรที่ระบุไว้ที่นี่จะใช้ได้เฉพาะกับอาร์กิวเมนต์ในระนาบครึ่ง เชิงซ้อนด้านขวาเท่านั้น แต่สามารถขยายไปยัง ระนาบเชิงซ้อนทั้งหมดได้โดยใช้สูตรการสะท้อน

อนุกรมAเป็นอนุกรมลู่เข้าและสามารถตัดทอนเพื่อให้ได้ค่าประมาณที่มีความแม่นยำตามต้องการ โดยการเลือกค่า g ที่เหมาะสม (โดยทั่วไปจะเป็นจำนวนเต็มขนาดเล็ก) จะใช้เพียง 5-10 พจน์ของอนุกรมเท่านั้นในการคำนวณฟังก์ชันแกมมาด้วย ความแม่นยำ แบบจุดลอยตัวเดี่ยวหรือคู่ทั่วไป หากเลือกค่าg คงที่ สัมประสิทธิ์ สามารถคำนวณล่วงหน้าได้ และด้วยการแยกส่วนเศษส่วนผลรวมจะถูกเขียนใหม่ในรูปแบบต่อไปนี้:

ดังนั้น การคำนวณฟังก์ชันแกมมาจึงกลายเป็นเรื่องของการประเมินฟังก์ชันพื้นฐาน เพียงไม่กี่ฟังก์ชัน และคูณด้วยค่าคงที่ที่จัดเก็บไว้ การประมาณค่าแบบ Lanczos ได้รับความนิยมจากหนังสือ Numerical Recipesซึ่งระบุว่าการคำนวณฟังก์ชันแกมมานั้น "ไม่ได้ยากไปกว่าฟังก์ชันพื้นฐานอื่นๆ ที่เราคุ้นเคยกันดี เช่นsin xหรือe x " วิธีนี้ยังถูกนำไปใช้ในGNU Scientific Library , Boost , CPythonและmuslด้วย

สัมประสิทธิ์

ค่าสัมประสิทธิ์กำหนดโดย

โดยที่C n , mแทน องค์ประกอบที่ ( n , m )ของเมทริกซ์สัมประสิทธิ์สำหรับพหุนามเชบิเชฟซึ่งสามารถคำนวณได้แบบเวียนซ้ำจากเอกลักษณ์เหล่านี้:

Godfrey (2001) อธิบายวิธีการหาค่าสัมประสิทธิ์และค่าของอนุกรมที่ถูกตัดทอนAเป็นผลคูณเมทริก ซ์ [ 2 ]

อนุพันธ์

Lanczos ได้สูตรนี้มาจากปริพันธ์ของLeonhard Euler

ดำเนินการตามลำดับการจัดการพื้นฐานเพื่อให้ได้มาซึ่ง

และการหาอนุกรมสำหรับอินทิกรัล

การใช้งานที่เรียบง่าย

การใช้งานต่อไปนี้ในภาษาโปรแกรม Pythonใช้ได้กับอาร์กิวเมนต์ที่ซับซ้อนและโดยทั่วไปจะให้ผลลัพธ์ที่ถูกต้องในทศนิยม 13 ตำแหน่ง โปรดทราบว่าการละเว้นสัมประสิทธิ์ที่เล็กที่สุด (เช่น เพื่อให้ได้ความเร็ว) จะให้ผลลัพธ์ที่ไม่ถูกต้องอย่างสิ้นเชิง จะต้องคำนวณสัมประสิทธิ์ใหม่ทั้งหมดตั้งแต่เริ่มต้นสำหรับการกระจายที่มีจำนวนพจน์น้อยกว่า

จากcmath นำเข้าsin , sqrt , pi , exp""" สัมประสิทธิ์ที่ใช้ในโค้ดนี้ใช้สำหรับกรณีที่ g = 7 และ n = 9 ต่อไปนี้เป็นตัวอย่างอื่นๆg = 5 n = 5 p = [  1.0000018972739440364,  76.180082222642137322,  -86.505092037054859197,  24.012898581922685900,  -1.2296028490285820771 ]ก. = 5 n = 7 p = [  1.0000000001900148240,  76.180091729471463483,  -86.505320329416767652,  24.014098240830910490,  -1.2317395724501553875,  0.0012086509738661785061,  -5.3952393849531283785e-6 ]g = 8 n = 12 p = [  0.999999999999999298,  1975.3739023578852322,  -4397.3823927922428918,  3462.6328459862717019,  -1156.9851431631167820,  154.53815050252775060,  -6.2536716123689161798,  0.034642762454736807441,  -7.4776171974442977377e-7,  6.3041253821852264261e-8,  -2.7405717035683877489e-8,  4.0486948817567609101e-9 ] """g = 7 n = 9 p = [ 0.99999999999980993 , 676.5203681218851 , - 1259.1392167224028 , 771.32342877765313 , - 176.61502916214059 , 12.507343278686905 , - 0.13857109526572012 , 9.9843695780195716e-6 , 1.5056327351493116e-7 ]EPSILON = 1e-07 def drop_imag ( z ): if abs ( z . imag ) <= EPSILON : z = z . real return zdef gamma ( z ): z = complex ( z ) if z . real < 0.5 : y = pi / ( sin ( pi * z ) * gamma ( 1 - z )) # สูตรการสะท้อนelse : z -= 1 x = p [ 0 ] for i in range ( 1 , len ( p )): x += p [ i ] / ( z + i ) t = z + g + 0.5 y = sqrt ( 2 * pi ) * t ** ( z + 0.5 ) * exp ( - t ) * x return drop_imag ( y ) """ การใช้การสะท้อนข้างต้น (ดังนั้นโครงสร้าง if-else) เป็นสิ่งจำเป็น แม้ว่ามันอาจดูแปลก ๆ ก็ตาม เนื่องจากมันช่วยให้สามารถขยายการประมาณค่าไปยังค่าของ z ที่Re(z) < 0.5 ซึ่งวิธีการของ Lanczos ไม่ถูกต้อง"""พิมพ์( แกมมา( 1 )) พิมพ์( แกมมา( 5 )) พิมพ์( แกมมา( 0.5 ))

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Lanczos_approximation&oldid=1360454744 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การประมาณค่าแบบ Lanczos

ใน ทางคณิตศาสตร์ การประมาณค่าแบบแลนซอส (Lanczos approximation) เป็นวิธีการคำนวณ ฟังก์ชันแกมมา เชิงตัวเลข ซึ่งเผยแพร่โดย คอร์เนลิอุส แลนซอส ในปี 1964...

การแนะนำ

การประมาณค่าแบบ Lanczos ประกอบด้วยสูตรดังนี้

อนุพันธ์

Lanczos ได้สูตรนี้มาจาก ปริพันธ์ ของ Leonhard Euler

การใช้งานที่เรียบง่าย

การใช้งานต่อไปนี้ใน ภาษาโปรแกรม Python ใช้ได้กับอาร์กิวเมนต์ที่ซับซ้อนและโดยทั่วไปจะให้ผลลัพธ์ที่ถูกต้องในทศนิยม 13 ตำแหน่ง โปรดทราบว่าการละเว้นสัมประสิทธิ์ที่เล็กที่สุด (เช่น เพื่อให้ได้ความเร็ว) จะให้ผลลัพธ์ที่ไม่ถูกต้องอย่างสิ้นเชิง...