GSL库的使用
-
下载库
GitHub下载地址:https://github.com/ampl/gsl
-
解压库
下载之后新建一个文件夹并将GSL库解压到当前文件夹
-
编译GSl库
①下载之后在解压的文件夹下新建一个“gsl_build”文件夹
②参照https://blog.csdn.net/Gou_Hailong/article/details/134540889,用cmd打开命令窗口
③在命令窗口内输入命令
cmake -G"Visual Studio 16 2019" -DGSL_INSTALL_MULTI_CONFIG=ON -DNO_AMPL_BINDINGS=1 -DCMAKE_INSTALL_PREFIX=%cd%/install -DBUILD_SHARED_LIBS=ON -DMSVC_RUNTIME_DYNAMIC=ON A:/downloads/gsl-master上面命令可以执行的前提是安装了cmake,并添加到环境变量中
命令中的
"Visual Studio 16 2019"为电脑上对应的VS的版本"A:/downloads/gsl-master"为gsl下载之后解压的文件路径解压完成之后在
build文件夹下的install得到如下的文件
-
将库加入到VS中
①将
bin中的文件加入导环境变量②include加入到VS的C/C++常规中的包含附件目录中

③加入链接器中


-
测试代码运行
#include <stdio.h>
#include <gsl/gsl_histogram.h>
#include <gsl/gsl_randist.h>
#include <gsl/gsl_statistics.h>
#include <gsl/gsl_math.h>
#include <gsl/gsl_rng.h>
#include <gsl/gsl_spline.h>
#define N 1000 // 数据点数量
#define BINS 50 // 直方图的分箱数量
int main(void) {
gsl_rng *r = gsl_rng_alloc(gsl_rng_mt19937);
gsl_histogram *h = gsl_histogram_alloc(BINS);
gsl_histogram_set_ranges_uniform(h, 0.0, 10.0); // 定义直方图区间
// 生成正态分布的随机数据
for (int i = 0; i < N; i++) {
double x = gsl_ran_gaussian(r, 1.0) + 5.0; // 均值5.0,标准差1.0
gsl_histogram_increment(h, x);
}
// 打印直方图
printf("\nHistogram:\n");
for (int i = 0; i < BINS; i++) {
double lower, upper;
gsl_histogram_get_range(h, i, &lower, &upper);
printf("%.2f - %.2f: %.2f\n", lower, upper, gsl_histogram_get(h, i));
}
// 生成核密度估计 (Gaussian Kernel)
double bandwidth = 0.3; // 核函数带宽
double step = 0.1;
printf("\nKernel Density Estimation:\n");
for (double x = 0.0; x <= 10.0; x += step) {
double kde = 0.0;
for (int i = 0; i < BINS; i++) {
double lower, upper, count;
gsl_histogram_get_range(h, i, &lower, &upper);
count = gsl_histogram_get(h, i);
double center = (lower + upper) / 2.0;
// 使用高斯核函数估计
kde += count * gsl_ran_gaussian_pdf(x - center, bandwidth);
}
printf("%.2f %.5f\n", x, kde);
}
// 释放内存
gsl_histogram_free(h);
gsl_rng_free(r);
return 0;
}
gsl_rng_free(r);
return 0;
}
运行结果:

参考文献:
https://blog.csdn.net/Gou_Hailong/article/details/134540889

1万+

被折叠的 条评论
为什么被折叠?



