gpt4 book ai didi

c - Julia:调用 GSL 函数

转载 作者:行者123 更新时间:2023-11-30 15:19:18 28 4
gpt4 key购买 nike

我正在尝试使用 GSL 数值积分函数 QNG 在 Julia 中积分一个简单的函数。 C 中函数的形式为

int gsl_integration_qng (const gsl_function * f, double a, double b,
double epsabs, double epsrel, double * result, double * abserr, size_t * neval)

我正在尝试执行以下集成

f(x) = x^2
a, b, epsabs, epsrel = 0.0, 1.0, 1.0e-2, 1.0e-2
result, abserr = 0.0, 0.0
neval = 0x123456789abcdef
0x0123456789abcdef
t = ccall( (:gsl_integration_qng, "libgsl"), Int32,
(Ptr{Void}, Float64, Float64, Float64, Float64, Ptr{Float64}, Ptr{Float64},Csize_t),
&f, a, b, epsabs, epsrel, &result, &abserr, neval)

感谢任何帮助。

最佳答案

I wrote a blog post awhile ago on how to do this在不同的 GSL 集成功能上。

其要点是:

定义参数类型函数

function integrand{T,T2,T3}(x::T,dim::T2,params::T3)
A = 1.0 / (pi * pi * pi)
return A / (1.0 - cos(unsafe_load(x,1))*cos(unsafe_load(x,2))*cos(unsafe_load(x,3)))::Cdouble
end

然后获取指针

integrand_c = cfunction(integrand,Cdouble,(Ptr{Cdouble},Ptr{Cdouble},Ptr{Cdouble}))

然后ccall GSL 函数,并将函数指针作为参数之一。在我的例子中:

ccall((:monte_carlo_integrate,"/home/crackauc/Public/libMonte.so"),Int32,(Ptr{Void},Ptr{Cdouble},Ptr{Cdouble},Int32,Int32,Ptr{Cdouble},Ptr{Cdouble},Csize_t),integrand_c,x,y,mode,dim,xl,xu,calls)

关于c - Julia:调用 GSL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30777823/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com