GSL¶
简介¶
GSL(GNU Scientific Library)是专门为应用数学和科学技术领域的数值计算提供支持的软件库。GSL使用C语言编写,同时也为其他语言做了相应的封装。GSL在GNU通用公共许可下是免费的。该函数库提供了广泛的数学算法的实现函数,包括随机数生成器,特殊函数和最小二乘拟合等等。目前该函数库提供有超过1000个函数,这些函数包含的范围有:复数计算、多项式求根、特殊函数、向量和矩阵运算、排列、组合、排序、线性代数、特征值和特征向量、快速傅里叶变换(FFT)、数值积分、随机数生成、随机数分布、统计、蒙特卡洛积分、模拟退火、常微分方程组、插值、数值微分、方程求根、最小二乘拟合、小波变换等。
GSL使用说明¶
思源一号上的GSL¶
创建gsltest目录并进入该目录:
mkdir gsltest
cd gsltest
在该目录下编写如下mygsl.c文件:
#include <stdio.h>
#include <gsl/gsl_linalg.h>
int main()
{
double a_data[] = {1.0, 0.6, 0.0, 0.0, 1.5, 1.0, 0.0, 1.0, 1.0};
double inva[9];
int s, i, j;
gsl_matrix_view m = gsl_matrix_view_array(a_data, 3, 3);
gsl_matrix_view inv = gsl_matrix_view_array(inva, 3, 3);
gsl_permutation *p = gsl_permutation_alloc(3);
printf("The matrix is\n");
for (i = 0; i < 3; ++i)
{
for (j = 0; j < 3; ++j)
{
printf(j == 2 ? "%6.3f\n" : "%6.3f ", gsl_matrix_get(&m.matrix, i, j));
}
}
gsl_linalg_LU_decomp(&m.matrix, p, &s);
gsl_linalg_LU_invert(&m.matrix, p, &inv.matrix);
printf("The inverse is\n");
for (i = 0; i < 3; ++i)
{
for (j = 0; j < 3; ++j)
{
printf(j == 2 ? "%6.3f\n" : "%6.3f ", gsl_matrix_get(&inv.matrix, i, j));
}
}
gsl_permutation_free(p);
return 0;
}
在该目录下编写如下gsltest.slurm脚本:
#!/bin/bash
#SBATCH --job-name=gsltest
#SBATCH --partition=64c512g
#SBATCH --ntasks-per-node=1
#SBATCH -n 1
#SBATCH --output=%j.out
#SBATCH --error=%j.err
ulimit -s unlimited
ulimit -l unlimited
module load gcc/9.3.0
module load gsl/2.7-gcc-9.3.0
gcc mygsl.c -o mygsl -lgsl -lgslcblas -lm
./mygsl
使用如下命令提交作业:
sbatch gsltest.slurm
作业完成后在.out文件中可看到如下结果:
The matrix is
1.000 0.600 0.000
0.000 1.500 1.000
0.000 1.000 1.000
The inverse is
1.000 -1.200 1.200
0.000 2.000 -2.000
0.000 -2.000 3.000
pi2.0上的GSL¶
此步骤和上文完全相同;
此步骤和上文完全相同;
在该目录下编写如下gsltest.slurm脚本:
#!/bin/bash
#SBATCH --job-name=gsltest
#SBATCH --partition=small
#SBATCH --ntasks-per-node=1
#SBATCH -n 1
#SBATCH --output=%j.out
#SBATCH --error=%j.err
ulimit -s unlimited
ulimit -l unlimited
module load gcc/9.2.0
module load gsl/2.5-gcc-9.2.0
gcc mygsl.c -o mygsl -lgsl -lgslcblas -lm
./mygsl
使用如下命令提交作业:
sbatch gsltest.slurm
作业完成后在.out文件中可看到如下结果:
The matrix is
1.000 0.600 0.000
0.000 1.500 1.000
0.000 1.000 1.000
The inverse is
1.000 -1.200 1.200
0.000 2.000 -2.000
0.000 -2.000 3.000
参考资料¶
最后更新:
2024 年 10 月 14 日