Liệu biến đổi


15

Tôi đã từng nghe một cách ngẫu nhiên rằng khi một người đang cố gắng thực hiện một cách tích phân dạng

0f(x)J0(x)dx

với mượt mà và hoạt động tốt (ví dụ: bản thân nó không dao động cao, không có tính cách, v.v.), thì nó sẽ giúp độ chính xác để viết lại thànhf(x)

1π0π0f(x)cos(xtộiθ)dxdθ

và thực hiện tích phân bên trong số đầu tiên. Tôi không thể thấy bất kỳ lý do nào tôi nên mong đợi nó hoạt động, nhưng một lần nữa độ chính xác của phương pháp số hiếm khi rõ ràng.

Tất nhiên tôi biết cách tốt nhất để thực sự làm điều đó là sử dụng một phương pháp được tối ưu hóa cho các tích phân dao động như thế này, nhưng vì tò mò, giả sử tôi hạn chế sử dụng một số quy tắc bậc hai. Bất cứ ai cũng có thể xác nhận hoặc bác bỏ rằng thực hiện chuyển đổi này có xu hướng cải thiện độ chính xác của tích phân? Và / hoặc chỉ cho tôi một nguồn giải thích nó?


1
Tích hợp trên ... Đó là một trong các định nghĩa không thể thiếu của hàm Bessel. 0θπ
David Z

4
Vì vậy, câu hỏi của bạn là: Với generic -point cầu phương thức Q N [ ] trên [ 0 , )Q N π [ ] trên [ 0 , π ] , là Q N M [NQN[][0,)QπN[][0,π] tệ hơn hoặc tốt hơn Q M π [ Q N [ f (QNM[fJ0] . QπM[QN[f(x)cos(xtộiθ)]]
Stefano M

@StefanoM đúng, đúng vậy.
David Z

FWIW, một trong những phương pháp hiệu quả nhất để đánh giá hàm Bessel theo thứ tự zeroth là quy tắc hình thang, được biết đến để cho kết quả rất chính xác khi tích hợp các tích phân định kỳ trong một khoảng thời gian (thậm chí tốt hơn so với tiêu chuẩn Gaussian tiêu chuẩn thông thường). Vì vậy: nó có thể giúp, nó có thể không.
JM

Câu trả lời:


3

Tôi không nghĩ rằng nó làm cho bất kỳ sự khác biệt. Bạn phải chọn cầu phương đủ cao để tích trên để nó tương đương với hàm Bessel J 0 . Tôi đã chọn thứ tự 20 trong ví dụ dưới đây, nhưng bạn luôn phải hội tụ liên quan đến chức năng và khoảng chính xác mà bạn tích hợp. Sau đó, tôi đã hội tụ với n , thứ tự của phương trình bậc hai Gaussian của tích phân trên x . Tôi đã chọn f ( x ) = e - x x 2 và sử dụng tên miền [ 0 , x max ] , bạn có thể thay đổi x bên dưới. Tôi đã nhận:θJ0nxf(x)= =e-xx2[0,xtối đa]xtối đa

 n      direct         rewritten
 1  0.770878284949  0.770878284949
 2  0.304480978430  0.304480978430
 3  0.356922151260  0.356922151260
 4  0.362576361509  0.362576361509
 5  0.362316789057  0.362316789057
 6  0.362314010897  0.362314010897
 7  0.362314071949  0.362314071949
 8  0.362314072182  0.362314072182
 9  0.362314072179  0.362314072179
10  0.362314072179  0.362314072179

n= =9

Đây là mã:

from scipy.integrate import fixed_quad
from scipy.special import jn
from numpy import exp, pi, sin, cos, array

def gauss(f, a, b, n):
    """Gauss quadrature"""
    return fixed_quad(f, a, b, n=n)[0]

def f(x):
    """Function f(x) to integrate"""
    return exp(-x) * x**2

xmax = 3.

print " n      direct         rewritten"
for n in range(1, 20):
    def inner(theta_array):
        return array([gauss(lambda x: f(x) * cos(x*sin(theta)), 0, xmax, n)
            for theta in theta_array])
    direct = gauss(lambda x: f(x) * jn(0, x), 0, xmax, n)
    rewritten = gauss(inner, 0, pi, 20) / pi
    print "%2d  %.12f  %.12f" % (n, direct, rewritten)

xmax[0,]f(x)rewritten = gauss(inner, 0, pi, 20) / pi


Tôi nghi ngờ bạn đúng, các thử nghiệm của riêng tôi đã cho thấy kết quả tương tự.
David Z
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.