与 Julia 中的 HCuature 集成

问题描述 投票:0回答:1

我有一个问题。 假设我们有一个依赖 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 包,所以我将感谢任何帮助

julia numerical-integration
1个回答
0
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.