Đánh giá sin và cos của bội số nguyên của một góc


8

Khi đánh giá các hài bậc hình trụ, người ta cần đánh giá các hàm lượng giác sin ( m θ ) , có khả năng cho số nguyên lớn mθ [ - π , π ] . Cách tốt nhất để làm điều này trong mã C là gì? Hiện nay, tôi chỉ đánh giá ở góc m θ , nhưng tôi sẽ nghi ngờ rằng các thư viện chuẩn mất độ chính xác tại tranh luận lớn. Tôi đã xem xét sử dụng các công thức góc kép và muốn giảm dần độ lớn của các đối số, nhưng tôi tự hỏi liệu điều đó có phát sinh thêm lỗi không.cos(mθ)tội(mθ)mθ[-π,π]mθ

Câu trả lời:


4

Nếu bạn làm điều đó lặp đi lặp lại, bằng cách tính toán cos ( n θ ) từ tội lỗi ( ( n - 1 ) θ )cos ( ( n - 1 ) θ ) , lỗi điểm sau đó nổi sẽ không thổi lên bởi sự tích lũy . Điều này là do ma trận chuyển tiếp là trực giao. Nó là một ma trận xoay đơn giản.tội(nθ)cos(nθ)tội((n-1)θ)cos((n-1)θ)


Hừm, đó là một điểm tốt. Tuy nhiên, ngay cả khi lỗi không nổ tung, tôi có chắc chắn rằng kết quả đã không trôi đi khỏi câu trả lời "chính xác" là gì không?
Victor Liu

Tôi nghi ngờ rằng kết quả sẽ rất khác so với câu trả lời chính xác. Bạn có thể thử với θ = π / m để bạn biết những gì mong đợi. m= =1000θ= =π/m

Bất cứ khi nào chẵn, tôi sẽ sử dụng công thức góc kép để cắt số mũ làm đôi. Điều này tương ứng với việc tính toán sức mạnh thứ n của ma trận xoay với thuật toán O ( log ( n ) ) . nnÔi(đăng nhập(n))
Erik P.

Bạn đúng. Câu trả lời của tôi được dựa trên giả định rằng tất cả các giá trị trung gian ( ) cũng sẽ được sử dụng. 1,...,m1

7

Tôi đã gặp một vấn đề tương tự trước đây, nhưng tôi lo lắng về tốc độ hơn là độ chính xác (xem bài báo ở đây ). Nếu góc của là kết quả của một ArccOS ( ) , mà thường là trường hợp trong tính toán hình học, bạn có thể sử dụng đa thức Chebyshev được định nghĩa làθhồ quang()

Tk(x)= =cos(khồ quang(x)),hoặc làTk(cos(θ))= =cos(kθ)

và có thể được đánh giá nhanh chóng ans ổn định bằng cách sử dụng mối quan hệ tái phát ba kỳ

Tk(x)= =2xTk-1(x)-Tk-2(x),T0(x)= =1,T1(x)= =x.

Do đó, đối với vấn đề của bạn, bạn có thể đánh giá theo phép nhân và phép cộng m + 1 , miễn là bạn có cos ( ϑ ) .cos(mθ)m+1cos(θ)


2

coskxtộikx

Sự tái diễn (có hiệu quả tương tự như ví dụ 4 trong Bulirsch / Stoer, xem phần phân tích chi tiết) tiến hành như vậy:

cos(θ+ε)= =cosθ-(pcosθ+qtộiθ)tội(θ+ε)= =tộiθ-(ptộiθ-qcosθ)

nơi chúng ta có các hằng số được tính toán trước

p= =2tội2ε2,q= =tộiε

ε

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.