2012-01-18 42 views
14

Tôi đang tìm kiếm một giải pháp cho một thể thiếu đôi đó là nhanh hơn so vớitính tích phân kép trong R nhanh chóng

integrate(function(y) { 
    sapply(y, function(y) { 
    integrate(function(x) myfun(x,y), llim, ulim)$value 
    }) 
}, llim, ulim) 

với ví dụ

myfun <- function(x,y) cos(x+y) 
llim <- -0.5 
ulim <- 0.5 

Tôi tìm thấy một old paper rằng gọi một chương trình FORTRAN được gọi là quad2d, nhưng tôi không thể tìm thấy bất kỳ điều gì khác ngoài một số trang trợ giúp cho MATLAB cho phần còn lại. Vì vậy, tôi đang tìm một thư viện C hoặc FORTRAN có thể làm nhanh gấp đôi tích phân (tức là không có vòng lặp thuận), và có thể được gọi từ R. Tất cả các ý tưởng đều được đánh giá rất cao, miễn là chúng đều tương thích với GPL.

Nếu giải pháp liên quan đến việc gọi các chức năng khác từ các thư viện đã được gửi cùng với R, tôi cũng muốn nghe từ chúng.

+4

Bạn đã xem xét: 'pracma :: dblquad',' pracma: simpson2d', hoặc các chức năng trong các gói hình khối và R2Cuba? –

Trả lời

7

Gói pracma mà Joshua chỉ ra có chứa phiên bản quad2d.

quad2d(myfun, llim, ulim, llim, ulim) 

Điều này cho cùng một câu trả lời, trong phạm vi số, như vòng lặp của bạn, sử dụng hàm mẫu.

Theo mặc định, với hàm mẫu của bạn, quad2d là chậm hơn vòng lặp. Nếu bạn giảm xuống n xuống, bạn có thể làm cho nó nhanh hơn, nhưng tôi đoán nó phụ thuộc vào mức độ hoạt động của bạn và độ chính xác mà bạn sẵn sàng hy sinh cho tốc độ.

+0

Thx cho ví dụ này. Tôi sẽ thử nghiệm nó trên các chức năng thực sự, vì chúng phức tạp hơn một chút. Tôi cần độ chính xác nhất, nhưng tốc độ thực sự là một vấn đề. Tôi sẽ giữ cho bạn cập nhật. –

14

Gói cubature thực hiện tích hợp 2D (và N-D) bằng thuật toán thích ứng. Nó sẽ tốt hơn các phương pháp tiếp cận đơn giản cho hầu hết các tích phân.

+0

Thx cho con trỏ, tôi đang chạy thử nghiệm vào cuối tuần này và xem cái nào khiến tôi hạnh phúc nhất. –

+2

Để tham khảo trong tương lai, phương pháp 'cubature' sẽ là:' adaptIntegrate (hàm (x) cos (x [1] + x [2]), c (llim, llim), c (ulim, ulim)) '. – jbaums

Các vấn đề liên quan