GSL

简介

GSL(GNU Scientific Library)是专门为应用数学和科学技术领域的数值计算提供支持的软件库。GSL使用C语言编写,同时也为其他语言做了相应的封装。GSL在GNU通用公共许可下是免费的。该函数库提供了广泛的数学算法的实现函数,包括随机数生成器,特殊函数和最小二乘拟合等等。目前该函数库提供有超过1000个函数,这些函数包含的范围有:复数计算、多项式求根、特殊函数、向量和矩阵运算、排列、组合、排序、线性代数、特征值和特征向量、快速傅里叶变换(FFT)、数值积分、随机数生成、随机数分布、统计、蒙特卡洛积分、模拟退火、常微分方程组、插值、数值微分、方程求根、最小二乘拟合、小波变换等。

集群中的GSL

安装列表

序号

集群

版本

模块名

编译环境

位置

1

hpckapok1

2.7

gsl/2.7

gcc13.3.0

/share/software/gsl

2

hpckapok2

2.8

gsl

gcc8.5

/public/software/apps/gsl/2.8

使用方法

1.创建gsltest目录并进入该目录

mkdir gsldir
cd gsldir

2.在该目录下编写计算矩阵的特征值和特征向量testgsl.c文件

#include <stdio.h>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_eigen.h>

int main() {
    gsl_matrix * m = gsl_matrix_alloc(3, 3);
    gsl_vector * eval = gsl_vector_alloc(3);
    gsl_matrix * evec = gsl_matrix_alloc(3, 3);

    gsl_matrix_set(m, 0, 0, 1.0);
    gsl_matrix_set(m, 0, 1, 2.0);
    gsl_matrix_set(m, 0, 2, 3.0);
    gsl_matrix_set(m, 1, 0, 2.0);
    gsl_matrix_set(m, 1, 1, 4.0);
    gsl_matrix_set(m, 1, 2, 5.0);
    gsl_matrix_set(m, 2, 0, 3.0);
    gsl_matrix_set(m, 2, 1, 5.0);
    gsl_matrix_set(m, 2, 2, 6.0);

    gsl_eigen_symmv_workspace * w = gsl_eigen_symmv_alloc(3);
    gsl_eigen_symmv(m, eval, evec, w);
    gsl_eigen_symmv_free(w);

    gsl_eigen_symmv_sort(eval, evec, GSL_EIGEN_SORT_ABS_DESC);

    printf("Eigenvalues:\n");
    for (int i = 0; i < 3; i++) {
      printf("%g\n", gsl_vector_get(eval, i));
  }

  printf("\nEigenvectors:\n");
  for (int i = 0; i < 3; i++) {
      gsl_vector_view evec_i = gsl_matrix_column(evec, i);
      printf("Eigenvector %d: \n", i + 1);
      gsl_vector_fprintf(stdout, &evec_i.vector, "%g");
  }

  gsl_matrix_free(m);
  gsl_vector_free(eval);
  gsl_matrix_free(evec);
  return 0;
}

3.在该目录下编写如下testgsl.slurm脚本

#!/bin/bash

#SBATCH --job-name=gsltest
#SBATCH --partition=cpuXeon6458
#SBATCH --ntasks-per-node=1
#SBATCH -n 1
#SBATCH --output=%j.out
#SBATCH --error=%j.err

ulimit -s unlimited
ulimit -l unlimited
module swap gnu12 gcc/13.3.0
module load gsl/2.7
gcc testgsl.c -o testgsl -lgsl -lgslcblas -lm
./testgsl

4.提交testgsl.slurm脚本

sbatch testgsl.slurm

5.作业完成后在.out文件中可看到如下结果:

Eigenvalues:
11.3448
-0.515729
0.170915

参考资料

  1. GSL官方文档

Contributor:X君


最后更新: 2025 年 06 月 30 日