Potrafię wykonywać integrację numeryczną jednej zmiennej w Julii przy użyciu quadgk
. Kilka prostych przykładów:Jak wykonać dwie integracje numeryczne zmiennych w 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
documentation for quadgk nie wydaje się sugerować poparcie dla wielowymiarowej integracji, a na pewno wystarczy otrzymuję komunikat o błędzie, jeśli próbują nadużywać go za integralną 2D:
julia> quadgk(h, 0, pi/2, 0, pi/2)
ERROR: `h` has no method matching h(::Float64)
Dokumentacja sugeruje, że istnieją pewne pakiety zewnętrzne do integracji, ale ich nie wymienia. Zgaduję, że jeden taki pakiet może zrobić dwuwymiarowe całki. Jaki jest najlepszy taki pakiet do tego zadania?
Gdybym Spróbuj: wykorzystaniem kubaturze; f (x) = cos (pi * sin (x [1]) * cos (x [2])) * sin (x [1]); hcubatura (f, [0,0], [pi/2, pi/2]) , a następnie Julia pojawia się w nieskończonej pętli alokacji (1 Gb/minutę).Co ciekawe z f (x) = cos (pi * sin (x [1]) * cos (x [2])), całka się udaje. –
Nieskończona pętla alokacji była konsekwencją niepowodzenia konwergencji. Można go obejść, określając wprost parametr abstol: hcubatura (f, [0,0], [pi/2, pi/2], abstol = 1e-8) –
'cos (pi * sin (x [1]) * cos (x [2])) * sin (x [1]) 'integruje się z zerem nad podanymi' xmin' i 'xmax', więc tolerancja nigdy nie jest spełniona. Określenie 'abstol' wydaje się najłatwiejszym rozwiązaniem. Można również podzielić 'xmin' i' xmax' na wiele regionów, a następnie zsumować integrację. – rickhg12hs