คำถามติดแท็ก numerical-limitations

2
วิธีการคำนวณมุมที่มีเสถียรภาพของตัวเลขระหว่างเวกเตอร์
เมื่อใช้สูตรคลาสสิกสำหรับมุมระหว่างสองเวกเตอร์: α=arccosv1⋅v2∥v1∥∥v2∥α=arccos⁡v1⋅v2‖v1‖‖v2‖\alpha = \arccos \frac{\mathbf{v_1} \cdot \mathbf{v_2}}{\|\mathbf{v_1}\| \|\mathbf{v_2}\|} หนึ่งพบว่าสำหรับมุมเล็ก / เฉียบพลันมากมีการสูญเสียความแม่นยำและผลลัพธ์ไม่ถูกต้อง ดังที่อธิบายไว้ในคำตอบของ Stack Overflow คำตอบเดียวคือใช้อาร์กแทนเจนต์แทน: α=arctan2(∥v1×v2∥,v1⋅v2)α=arctan⁡2(‖v1×v2‖,v1⋅v2)\alpha = \arctan2 \left(\|\mathbf{v_1} \times \mathbf{v_2}\|, \mathbf{v_1} \cdot \mathbf{v_2} \right) และสิ่งนี้ย่อมให้ผลลัพธ์ที่ดีกว่า อย่างไรก็ตามฉันสงสัยว่าสิ่งนี้จะให้ผลที่ไม่ดีกับมุมที่อยู่ใกล้กับπ/2π/2\pi / 2หรือไม่ เป็นอย่างนั้นเหรอ? ถ้าเป็นเช่นนั้นมีสูตรใดที่จะคำนวณมุมอย่างแม่นยำโดยไม่ตรวจสอบความอดทนภายในifสาขาหรือไม่?

2
การเพิ่มมาตรฐานเพื่อทำให้ SVD มีความเสถียรเท่าไร
ฉันใช้ SVD ของ Intel MKL ( dgesvdผ่าน SciPy) และสังเกตว่าผลลัพธ์จะแตกต่างกันอย่างมากเมื่อฉันเปลี่ยนความแม่นยำระหว่างfloat32และfloat64เมื่อเมทริกซ์ของฉันมีเงื่อนไขไม่ดี / ไม่เต็มอันดับ มีแนวทางเกี่ยวกับจำนวนขั้นต่ำของการทำให้เป็นมาตรฐานที่ฉันควรเพิ่มเพื่อให้ผลลัพธ์ที่ไม่ไวต่อการเปลี่ยนแปลงfloat32-> float64หรือไม่? โดยเฉพาะการทำ A = UDVTA=UDVTA=UDV^{T}ฉันเห็นว่า L∞L∞L_\infty บรรทัดฐานของ VTXVTXV^{T}Xย้ายประมาณ 1 เมื่อฉันเปลี่ยนความแม่นยำของระหว่างและfloat32float64L2L2L_2 บรรทัดฐานของ AAA คือ 10510510^5 และมีค่าลักษณะเฉพาะประมาณ 200 ศูนย์จากทั้งหมด 784 กำลังทำ SVD λ ฉัน+ AλI+A\lambda I + A กับ λ =10- 3λ=10−3\lambda=10^{-3} ทำให้ความแตกต่างหายไป

2
เสถียรภาพเชิงตัวเลขของพหุนาม Zernike ลำดับสูงขึ้น
ฉันพยายามคำนวณลำดับที่สูงขึ้น (เช่นm=0, n=46) ช่วงเวลา Zernike สำหรับภาพบางภาพ อย่างไรก็ตามฉันพบปัญหาเกี่ยวกับพหุนามเรเดียน (ดูวิกิพีเดีย ) นี่คือพหุนามที่กำหนดในช่วงเวลา [0 1] ดูรหัส MATLAB ด้านล่าง function R = radial_polynomial(m,n,RHO) R = 0; for k = 0:((n-m)/2) R = R + (-1).^k.*factorial(n-k) ... ./ ( factorial(k).*factorial((n+m)./2-k) .* factorial((n-m)./2-k) ) ... .*RHO.^(n-2.*k); end end RHO > 0.9แต่นี้เห็นได้ชัดว่าวิ่งเข้าไปในปัญหาตัวเลขที่อยู่ใกล้กับ ฉันลองปรับโครงสร้างใหม่เพื่อpolyvalคิดว่าอาจมีอัลกอริทึมที่ดีกว่าเบื้องหลัง แต่ก็ไม่ได้แก้อะไรเลย การแปลงเป็นการคำนวณเชิงสัญลักษณ์ได้สร้างกราฟที่ต้องการ แต่ช้ามากแม้กระทั่งกราฟที่เรียบง่ายเช่นที่แสดง มีวิธีที่มีเสถียรภาพเชิงตัวเลขในการประเมินชื่อพหุนามที่มีลำดับสูงเช่นนี้หรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.