Tôi có thể thực hiện tích hợp số biến duy nhất trong Julia bằng cách sử dụng quadgk
. Một số ví dụ đơn giản:Làm thế nào để thực hiện hai tích hợp số biến trong Julia?
julia> f(x) = cos(x)
f (generic function with 1 method)
julia> quadgk(f, 0, pi)
(8.326672684688674e-17,0.0)
julia> quadgk(f, 0, pi/2)
(1.0,1.1102230246251565e-16)
julia> g(x) = cos(x)^2
g (generic function with 1 method)
julia> quadgk(g, 0, pi/2)
(0.7853981633974483,0.0)
julia> pi/4
0.7853981633974483
Các documentation for quadgk dường như không bao hàm một sự hỗ trợ cho hội nhập đa chiều, và đủ chắc chắn tôi nhận được một lỗi nếu tôi cố gắng để lạm dụng nó cho một 2D không thể thiếu:
julia> quadgk(h, 0, pi/2, 0, pi/2)
ERROR: `h` has no method matching h(::Float64)
Tài liệu này cho thấy có một số gói bên ngoài để tích hợp, nhưng không đặt tên cho chúng. Tôi đoán rằng một trong những gói như vậy có thể làm tích phân hai chiều. Gói tốt nhất cho công việc này là gì?
Nếu tôi cố gắng: sử dụng Cubature; f (x) = cos (pi * sin (x [1]) * cos (x [2])) * sin (x [1]); hcubature (f, [0,0], [pi/2, pi/2]) thì Julia xuất hiện để đi vào vòng lặp phân bổ vô hạn (1Gb/phút).Nghiêm túc với f (x) = cos (pi * sin (x [1]) * cos (x [2])), tích phân thành công. –
Vòng lặp phân bổ vô hạn là kết quả của sự thất bại hội tụ. Nó có thể được làm việc xung quanh bằng cách chỉ định một tham số abstol một cách rõ ràng: hcubature (f, [0,0], [pi/2, pi/2], abstol = 1e-8) –
'cos (pi * sin (x [1]) * cos (x [2])) * sin (x [1]) 'tích hợp với số không qua' xmin' và 'xmax' được chỉ định để dung sai không bao giờ được đáp ứng. Chỉ định 'abstol' có vẻ là cách giải quyết đơn giản nhất. Bạn cũng có thể chia 'xmin' và' xmax' thành nhiều vùng rồi tổng hợp các tích phân. – rickhg12hs