GSL库的使用

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

GSL库的使用

  1. 下载库

    GitHub下载地址:https://github.com/ampl/gsl

  2. 解压库

    下载之后新建一个文件夹并将GSL库解压到当前文件夹

  3. 编译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得到如下的文件

    在这里插入图片描述

  4. 将库加入到VS中

    ①将bin中的文件加入导环境变量

    include加入到VS的C/C++常规中的包含附件目录中
    在这里插入图片描述

    ③加入链接器中
    在这里插入图片描述
    在这里插入图片描述

  5. 测试代码运行

#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

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值