提问人:Student Debil 提问时间:11/8/2023 更新时间:11/9/2023 访问量:23
在 julia 中与 HCubature 集成
Integrating with HCubature in julia
问:
我有一个问题。 假设我们有一个依赖于 3 个变量的函数: f(x,y,z) = x+y+z 我想对它进行关于 x 和 y 的积分,并使 z 保持不变。我们可以取 z = 0 或其他任何值。
我试过很简单:
using HCubature
f(x,y,z) = x+y+z
result = hcubature((x,y)->f(x,y,0),(0,0),(1,1))
但它给出了一个错误
ERROR: LoadError: MethodError: no method matching (::var"#1#2")(::StaticArraysCore.SVector{2, Float64})
Closest candidates are:
(::var"#1#2")(::Any, ::Any) at ~/magisterka/sandbox.jl:5
Stacktrace:
[1] (::HCubature.GenzMalik{2, Float64})(f::var"#1#2", a::StaticArraysCore.SVector{2, Float64}, b::StaticArraysCore.SVector{2, Float64}, norm::typeof(LinearAlgebra.norm))
@ HCubature ~/.julia/packages/HCubature/QvyJW/src/genz-malik.jl:121
[2] hcubature_(f::var"#1#2", a::StaticArraysCore.SVector{2, Float64}, b::StaticArraysCore.SVector{2, Float64}, norm::typeof(LinearAlgebra.norm), rtol_::Int64, atol::Int64, maxevals::Int64, initdiv::Int64)
@ HCubature ~/.julia/packages/HCubature/QvyJW/src/HCubature.jl:61
[3] hcubature_(f::Function, a::Tuple{Int64, Int64}, b::Tuple{Int64, Int64}, norm::Function, rtol::Int64, atol::Int64, maxevals::Int64, initdiv::Int64)
@ HCubature ~/.julia/packages/HCubature/QvyJW/src/HCubature.jl:132
[4] hcubature(f::var"#1#2", a::Tuple{Int64, Int64}, b::Tuple{Int64, Int64}; norm::Function, rtol::Int64, atol::Int64, maxevals::Int64, initdiv::Int64)
@ HCubature ~/.julia/packages/HCubature/QvyJW/src/HCubature.jl:179
[5] hcubature(f::var"#1#2", a::Tuple{Int64, Int64}, b::Tuple{Int64, Int64})
@ HCubature ~/.julia/packages/HCubature/QvyJW/src/HCubature.jl:179
[6] top-level scope
@ ~/magisterka/sandbox.jl:5
如何将 f(x,y,z) 与固定 z 集成? 我仍然试图理解 HCubature 包,所以我会感谢任何帮助
答:
0赞
SGJ
11/9/2023
#1
HCubature 中的被积数将单个向量作为参数,而不是多个参数。这适用于您的示例:(x,y)
julia> using HCubature
julia> f(x,y,z) = x+y+z;
julia> hcubature(r->f(r[1],r[2],0), (0,0), (1,1))
(1.0, 0.0)
评论