Tỷ lệ tính toán của các hàm lượng giác


8

Tôi cần phải tính các hàm: và trong đó và và thường rất nhỏ ( ). Có cách nào chung để tạo ra các thuật toán có độ chính xác cao cho các hàm "đặc biệt" như thế này không? g(x)=sinax

f(x)=sin1xx
a[0,1]x[0,π
g(x)=sinaxsinx
a[0,1]x«1x[0,π2]x1

Câu trả lời:


9

Thực hiện mở rộng đa thức (quy tắc của la laHopital) cho cả liệt kê và mẫu số và bạn có được một hàm hợp lý, với nhỏ , sẽ xấp xỉ tốt chức năng.x

Ví dụ:

sinaxsinxax13!(ax)3+x13!x3+=a13!a3x2+113!x2+.

Bạn có thể làm tốt hơn nếu bạn có ý tưởng về phạm vi giá trị mà bạn muốn đánh giá. Sau đó, bạn có thể thay thế khai triển Taylor xung quanh ở trên bằng phép nội suy phù hợp hơn của phương pháp chiếu cho phạm vi .x 0 = 0 xxx0=0x


4

Cách tiếp cận của tôi là sử dụng phần mềm như SymPy như sau:

from sympy import var, sin, S
var("x a")
g = sin(a*x)/sin(x)
gseries = g.series(x, 0, 10).removeO()
s = {x: S(1)/100, a: S(1)/2}
print gseries.subs(s).n(30)
print g.subs(s).n(30)
print "%.17f" % g.subs({x: 1./100, a: 1./2})

bản in nào:

0.500006250065104828565736800905
0.500006250065104828565736868886
0.50000625006510480

Số đầu tiên là một chuỗi mở rộng Taylor cắt ngắn ở 10 điều khoản, số thứ hai là đánh giá chính xác. SymPy sử dụng số học chính xác, trong ví dụ này tôi đã sử dụng x = 1/100 và a = 1/2, nhưng bạn có thể chơi với điều đó. Cuối cùng, tôi đánh giá nó đến 30 chữ số thập phân để người ta có thể dễ dàng so sánh các số. Số thứ ba là một đánh giá độ chính xác kép bằng cách sử dụng số float của Python.

Trong trường hợp này, dường như với tôi là không có sự hủy bỏ. Nhưng đối với các biểu thức khác, việc đánh giá độ chính xác kép trực tiếp có thể không đủ chính xác và sau đó mở rộng chuỗi là một cách để đánh giá nó. Cái khác là xấp xỉ hợp lý, tôi đã sử dụng MiniMaxApproximationtrong Mathicala trong quá khứ với thành công lớn.

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.