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