前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VS2005下使用GSL-1.15小结

VS2005下使用GSL-1.15小结

作者头像
用户4645519
发布2020-09-07 10:50:36
7530
发布2020-09-07 10:50:36
举报
文章被收录于专栏:嵌入式学习嵌入式学习

最近在复习高等数学,有时为了验证顺便复习下C语言,看了看自己下载收集的软件,发现C语言有一个数学工具包,是GNU开发的,叫做GSL——GNU Scientific Library,中文:C++科学计算库,主页为www.gnu.org/s/gsl/,主要是在linux环境下运行的,幸好牛人们已经做好了windows版的移植(有条件的就在linux下编译gsl喽),有:Gsl for Windows - GnuWin32 - SourceForge,https://code.google.com/p/oscats/(gsl-1.15-dev-win32.zip 5.9 MB),也可以在windows下安装MSYS或是cygwin下编译源代码获得适合在windows下运行的动态链接库等,具体的我也不太清楚,网上看了,具体的编译流程比较复杂,索性直接下载牛人们编译好的。

目前,gsl最新版本是1.16,本人下载的是高手预编译好的的1.15版(也有适用于VC6.0的较低版本的GSL-1.4,http://www6.in.tum.de/~kiss/WinGsl.htm,也有gsl-1.8.exe的),够用就行。在ishare共享网里有下载。

这里先介绍怎么在VS2005上使用GSL。

我在网上下载了VS2005的绿色版本,保留VC++部分,GSL的安装步骤如下:

1、将bin文件下的两个.dll文件复制到C:\Program Files\Microsoft Visual Studio 10.0\VC\bin文件夹下。 2、将lib文件下的两个.lib文件复制到C:\Program Files\Microsoft Visual Studio 10.0\VC\lib文件夹下。 3、将include文件下的gsl文件夹复制到C:\Program Files\Microsoft Visual Studio 10.0\VC\include文件夹下。 具体的目录要具体分析,只要找到VC的目录即可顺藤摸瓜。 在VS上建立一个“不带预编译文件的空项目”,该方式下不需要#include "stdafx.h"(试验总结),而后添加C文件,

示例代码如下:

代码语言:javascript
复制
/*
 int gsl_integration_qng (const gsl_function * f,

                        double a, double b,

                        double epsabs, double epsrel,

                        double *result, double *abserr,

                        size_t * neval);

这个函数将用10点、21点、43点、87点的gauss-krondrod积分来计算直到误差在允许范围之内,
函数返回积分结果result、使用的积分点数neval、绝对误差值估计值abserr。a,b是积分上下限,
epsabs为绝对误差上限,epsrel为相对误差上限。

f是一个结构体,它指明要积分的表达式函数。
*/


//#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <gsl/gsl_sf_bessel.h>
#include <gsl/gsl_integration.h>

//visualsan@yahoo.cn
double fx(double x, void*params)
{
	return sin(x)/x;
}

//visualsan@yahoo.cn
double fcos(double x, void*params)
{
	return cos(x)/x;
}

//int _tmain(int argc, _TCHAR* argv[])
int main (void)
{
	printf("hello world\n");

	double x;
	x=5.0;
	double y = gsl_sf_bessel_J0(x);
	printf( "J0(%g) = %.18e\n", x, y );

	gsl_function f;
	f.function=fx;

	double r,er;
	unsigned int n;
	gsl_integration_qng(&f,1,2,1e-10,1e-10,&r,&er,&n);

	printf("result=%f\n",r);
	printf("abserr=%f\n",er);
	printf("neval=%d\n",n);

	gsl_function f_cos;
	f_cos.function=fcos;

	double cos_r,cos_er;
	unsigned int cos_n;

	printf("hello world\n");

	gsl_integration_qng(&f_cos,1,2,1e-10,1e-10,&cos_r,&cos_er,&cos_n);
	printf("cosine result=%f\n",cos_r);
	printf("cosine abserr=%f\n",cos_er);
	printf("cosine neval=%d\n",cos_n);

	printf("hello world\n");
	printf("hello world\n");

	return 0;
}

如果此时编译,或有很多错误,而后确认下“右击项目名,选择“属性>>C/C++>>高级”中是否是“编译为C++代码”(编译为C代码不通过),在“C/C++>>预编译头”选择“不使用预编译”最后,需要设置附加依赖库,项目属性->链接器->输入>Additional Dependencies(附加依赖项) 添加:libgsl-0.lib libgslcblas-0.lib,这样编译后,就可以了,运行结果为:

代码语言:javascript
复制
hello world
J0(5) = -1.775967713143382600e-001
result=0.659330
abserr=0.000000
neval=21
hello world
cosine result=0.085577
cosine abserr=0.000000
cosine neval=21
hello world
hello world
请按任意键继续. . .

当然,也可以把gsl库安装在DEV C++中,VS6.0,这些以后记录。另外,在VS2005建立过程中也以选择带#include "stdafx.h"的工程,然而,我很不喜欢这样!据说是为了加快编译速度的,可我习惯了Linux里的编程方式,so....... 以上步骤均由实验总结而得到的。哪里不对的请指点,谢谢!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-04-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档