如何用gsl库手册来计算矩阵

在Ubuntu Linux下创建使用GSL函数库的工程_Linux教程_Linux公社-Linux系统门户网站
你好,游客
在Ubuntu Linux下创建使用GSL函数库的工程
来源:Linux社区&
作者: suneverust
GSL是一个开源的,用C/C++写成的数学函数库,非常流行也非常实用。
我们用cmake 创建 Makefile 文件,熟悉cmake的朋友应该知道,cmake可以直接产生MS studio, Eclipse,QT 等开发环境的工程文件。这里我们产生通用的Makfile文件。
14.04 下载、安装、配置的相关知识
Ubuntu 14.04系统下载地址:
Windows 7下硬盘安装Ubuntu 14.04图文教程
1. 在Ubuntu Linux下安装GSL:&
打开Synaptic Package Manager, 安装libgsl0-dev 和libgsl0ldbl
2.& 创建FindGSL.cmake 文件,然后将FindGSL.cmake 移动到 "/usr/share/cmake-2.8/Modules"COMMENTS: .cmake文件很重要,是CMakeLists.txt中findpackage命令的基础,如果没有Find*.cmake文件,在cmake执行findpackage命令是会报错的。
---------------------------------------------------------------------------------------
# Try to find gnu scientific library GSL# See# http://www.gnu.org/software/gsl/& and# http://gnuwin32.sourceforge.net/packages/gsl.htm## Once run this will define:## GSL_FOUND& & &
= system has GSL lib## GSL_LIBRARIES&
= full path to the libraries#& & on Unix/Linux with additional linker flags from "gsl-config --libs"## CMAKE_GSL_CXX_FLAGS& = Unix compiler flags for GSL, essentially "`gsl-config --cxxflags`"## GSL_INCLUDE_DIR& & & = where to find headers## GSL_LINK_DIRECTORIES = link directories, useful for rpath on Unix# GSL_EXE_LINKER_FLAGS = rpath on Unix## Felix Woelk 07/2004# Jan Woetzel## rmatik.uni-kiel.de# --------------------------------
IF(WIN32)# JW tested with gsl-1.8, Windows XP, MSVS 7.1, MSVS 8.0SET(GSL_POSSIBLE_ROOT_DIRS${GSL_ROOT_DIR}$ENV{GSL_ROOT_DIR}${GSL_DIR}${GSL_HOME}$ENV{GSL_DIR}$ENV{GSL_HOME}$ENV{EXTERN_LIBS_DIR}/gsl$ENV{EXTRA}# "C:/home/jw/source2/gsl-1.8")FIND_PATH(GSL_INCLUDE_DIRNAMES gsl/gsl_cdf.h gsl/gsl_randist.hPATHS ${GSL_POSSIBLE_ROOT_DIRS}PATH_SUFFIXES includeDOC "GSL header include dir")
FIND_LIBRARY(GSL_GSL_LIBRARYNAMES gsl libgslPATHS& ${GSL_POSSIBLE_ROOT_DIRS}PATH_SUFFIXES libDOC "GSL library dir" )
FIND_LIBRARY(GSL_GSLCBLAS_LIBRARYNAMES gslcblas libgslcblasPATHS& ${GSL_POSSIBLE_ROOT_DIRS}PATH_SUFFIXES libDOC "GSL cblas library dir" )
SET(GSL_LIBRARIES ${GSL_GSL_LIBRARY})
#MESSAGE("DBG\n"#& "GSL_GSL_LIBRARY=${GSL_GSL_LIBRARY}\n"#& "GSL_GSLCBLAS_LIBRARY=${GSL_GSLCBLAS_LIBRARY}\n"#& "GSL_LIBRARIES=${GSL_LIBRARIES}")
ELSE(WIN32)
IF(UNIX)SET(GSL_CONFIG_PREFER_PATH&"$ENV{GSL_DIR}/bin"&"$ENV{GSL_DIR}"&"$ENV{GSL_HOME}/bin"&"$ENV{GSL_HOME}"&CACHE STRING "preferred path to GSL (gsl-config)")FIND_PROGRAM(GSL_CONFIG gsl-config&${GSL_CONFIG_PREFER_PATH}&/usr/bin/&)# MESSAGE("DBG GSL_CONFIG ${GSL_CONFIG}")
IF (GSL_CONFIG)
&MESSAGE(STATUS "GSL using gsl-config ${GSL_CONFIG}")&# set CXXFLAGS to be fed into CXX_FLAGS by the user:&EXEC_PROGRAM(${GSL_CONFIG}&
ARGS --cflags&
OUTPUT_VARIABLE& GSL_CXX_FLAGS )&#SET(GSL_CXX_FLAGS "`${GSL_CONFIG} --cflags`")
&# set INCLUDE_DIRS to prefix+include&EXEC_PROGRAM(${GSL_CONFIG}&
ARGS --prefix&
OUTPUT_VARIABLE GSL_PREFIX)&SET(GSL_INCLUDE_DIR ${GSL_PREFIX}/include CACHE STRING INTERNAL)
&# set link libraries and link flags
&#SET(GSL_LIBRARIES "`${GSL_CONFIG} --libs`")
&# extract link dirs for rpath&EXEC_PROGRAM(${GSL_CONFIG}&
ARGS --libs&
OUTPUT_VARIABLE& GSL_CONFIG_LIBS )&SET(GSL_LIBRARIES "${GSL_CONFIG_LIBS}")
&# split off the link dirs (for rpath)&# use regular expression to match wildcard equivalent "-L*"&# with& is a space or a semicolon&STRING(REGEX MATCHALL "[-][L]([^ ;])+"&
GSL_LINK_DIRECTORIES_WITH_PREFIX&
"${GSL_CONFIG_LIBS}" )&#& & & MESSAGE("DBG& GSL_LINK_DIRECTORIES_WITH_PREFIX=${GSL_LINK_DIRECTORIES_WITH_PREFIX}")
&# remove prefix -L because we need the pure directory for LINK_DIRECTORIES
&IF (GSL_LINK_DIRECTORIES_WITH_PREFIX)&
STRING(REGEX REPLACE "[-][L]" "" GSL_LINK_DIRECTORIES ${GSL_LINK_DIRECTORIES_WITH_PREFIX} )&ENDIF (GSL_LINK_DIRECTORIES_WITH_PREFIX)&SET(GSL_EXE_LINKER_FLAGS "-Wl,-rpath,${GSL_LINK_DIRECTORIES}" CACHE STRING INTERNAL)&#& & & MESSAGE("DBG& GSL_LINK_DIRECTORIES=${GSL_LINK_DIRECTORIES}")&#& & & MESSAGE("DBG& GSL_EXE_LINKER_FLAGS=${GSL_EXE_LINKER_FLAGS}")
&#& & & ADD_DEFINITIONS("-DHAVE_GSL")&#& & & SET(GSL_DEFINITIONS "-DHAVE_GSL")&MARK_AS_ADVANCED(&
GSL_CXX_FLAGS&
GSL_INCLUDE_DIR&
GSL_LIBRARIES&
GSL_LINK_DIRECTORIES&
GSL_DEFINITIONS)&MESSAGE(STATUS "Using GSL from ${GSL_PREFIX}")
ELSE(GSL_CONFIG)
&INCLUDE(UsePkgConfig) #needed for PKGCONFIG(...)
&MESSAGE(STATUS "GSL using pkgconfig")&#& & & PKGCONFIG(gsl includedir libdir linkflags cflags)&PKGCONFIG(gsl GSL_INCLUDE_DIR GSL_LINK_DIRECTORIES GSL_LIBRARIES GSL_CXX_FLAGS)&IF(GSL_INCLUDE_DIR)MARK_AS_ADVANCED(& &
GSL_CXX_FLAGS& &
GSL_INCLUDE_DIR& &
GSL_LIBRARIES& &
GSL_LINK_DIRECTORIES)
&ELSE(GSL_INCLUDE_DIR) MESSAGE("FindGSL.cmake: gsl-config/pkg-config gsl not found. Please set it manually. GSL_CONFIG=${GSL_CONFIG}")&ENDIF(GSL_INCLUDE_DIR)
ENDIF(GSL_CONFIG)
ENDIF(UNIX)ENDIF(WIN32)
IF(GSL_LIBRARIES)IF(GSL_INCLUDE_DIR OR GSL_CXX_FLAGS)
SET(GSL_FOUND 1)
ENDIF(GSL_INCLUDE_DIR OR GSL_CXX_FLAGS)ENDIF(GSL_LIBRARIES)
# ==========================================IF(NOT GSL_FOUND)# make FIND_PACKAGE friendlyIF(NOT GSL_FIND_QUIETLY)IF(GSL_FIND_REQUIRED)&MESSAGE(FATAL_ERROR "GSL required, please specify it's location.")ELSE(GSL_FIND_REQUIRED)&MESSAGE(STATUS& & &
"ERROR: GSL was not found.")ENDIF(GSL_FIND_REQUIRED)ENDIF(NOT GSL_FIND_QUIETLY)ENDIF(NOT GSL_FOUND)
-----------------------------------------------------------------------------------------
3. 准备工作做完,下面开始创建我们自己的程序。创建hello.c-----------------------------------------------#include&
&int main (void)& {& &double x = 5.0;& &double y = gsl_sf_bessel_J0 (x);& &printf ("J0(%g) = %.18e\n", x, y);& &return 0;& } -----------------------------------------------创建CMakeLists.txt-----------------------------------------------------
cmake_minimum_required (VERSION 2.8) project(hello) &set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}") &find_package(GSL REQUIRED) include_directories(${GSL_INCLUDE_DIRES} ${GSLCBLAS_INCLUDE_DIRS}) link_libraries(${GSL_LIBRARIES} ${GSLBLAS_LIBRARIES}) &target_link_libraries (${GSL_LIBRARIES} ${GSLBLAS_LIBRARIES}) add_executable(hello hello.c) -----------------------------------------------------cmake . && make
就会产生可执行文件 &hello&
更多Ubuntu相关信息见 专题页面
本文永久更新链接地址:
相关资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
Visual Studio 2010使用GSL函数库设置教程
下载积分:900
内容提示:Visual Studio 2010使用GSL函数库设置教程
文档格式:DOC|
浏览次数:11|
上传日期: 10:15:33|
文档星级:
该用户还上传了这些文档
Visual Studio 2010使用GSL函数库设置教程
官方公共微信&&&&GSL科学计算库(GSL--GNU Scientific Library)
GSL科学计算库(GSL--GNU Scientific Library)
GNU科学计算库 GNU Scientific Library是一个跨平台的科学计算库。可以满足日常科学计算的大部分需要。它包含了矩阵运算、数值计算,傅里叶分析,小波分析、统计分析、最优化等数学需要的方方面面的知识。
包含两个文件:gsl-1.8.exe和gsl-1.8-src.exe
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
开发技术下载排行一、GSL的下载、安装
  下载地址:&下载&Complete package, except sources和Sources两个exe文件
  安装从下载的两个文件gsl-1.8.exe和gsl-1.8-src.exe,如我的安装在:D:\GSL\ 目录下:  
二、设置编译环境
(1)对于VS2010:
&1、生成lib文件。发现安装目录lib下并没有libgsl.lib,libgslcblas.lib这两个文件,倒是有两个扩展名为def和a(linux下库文件包格式)的文件,因此必须进行转换。
& 开始菜单,要用VS带的CMD命令行去跑,不能用windows系统下的CMD!!!
& 进入gsl库的lib目录下依次输入以下两条语句:&&& lib /machine:i386 /def:libgsl.def&&& lib /machine:i386 /def:libgslcblas.def
再看lib目录下,发现有了libgsl.lib,libgslcblas.lib这两个文件。
方式一(不推荐)
将..\GnuWin32l\bin中的libgsl.dll和libgslcblas.dll复制到D:\Program Files\Microsoft Visual Studio 10.0\VC\Bin;将\include整个Gsl目录复制到D:\Program Files\Microsoft Visual Studio 10.0\VC\include下;\lib目录下的所有.lib文件全部复制到D:\Program Files\Microsoft Visual Studio 10.0\VC\Lib下。
(如果这样添加了其实下面指定的前两个都不需要,因为在系统中已经有了这些文件,但不建议按这种方法指定,这样会使系统VC库中的东西非常混乱,强烈建议使用下面这种指定路径的方法!!)
方式二(推荐)
在Project -& tracking-& Configuration Properties -& C/C++ -& General -& Additional Include Directories 中增加头文件路径。
在Project -& tracking&-& Configuration Properties -& C/C++ -& General -&&Additional Library Directories 中增加库文件路径。
在Project -& tracking&&-& Configuration Properties -& Linker -& Input -& Additional Dependencies 中增加所依赖的库文件libgsl.lib和libgslcblas.lib。
重要tips:需要在c/c++的command line里添加& /D "GSL_DLL"
&(注:Project -& tracking&&-& Configuration Properties -&C/C++-&Command line)
(2) 对于VC6:
  生成lib文件:发现安装目录lib下并没有libgsl.lib,libgslcblas.lib这两个文件,倒是有两个扩展名为def和a(linux下库文件包格式)的文件,因此必须进行转换。
& & 这里可以直接用windows命令行,在命令行中切换到D:\GSL\GnuWin32\lib
& & lib /machine:i386 /def:libgsl.def
& & lib /machine:i386 /def:libgslcblas.def
& & 运行以上命令后再看lib目录下,发现有了libgsl.lib,libgslcblas.lib这两个文件,这就对了,进入下一步。
& & 将D:\GSL\GnuWin32\bin中的libgsl.dll和libgslcblas.dll复制到..\VC\Bin下;
& & 将D:\GSL\GnuWin32\include目录下的整个gsl文件夹拷贝到..\VC\include下;
& & 将D:\GSL\GnuWin32\lib目录下的所有.lib文件全部复制到..\VC98\Lib下。
& & 新建一个VC6工程用于测试,然后进入项目-&属性-&连接器-&输入,在&附加依赖项&一栏加入库文件 libgsl.lib libgslcblas.lib,用空格隔开,并在
  Project setting-&C++-&Project Options加入/D "GSL_DLL",并点击OK
三、测试用例
1 #include &gsl/gsl_spline.h&
2 #include &cstdio&
3 #include &cstdlib&
4 #include &cmath&
6 void Display()
const size_t n = 4;
double x[] =
{0,0.333336,0.666666,1};
double y[] =
{0,0.5,0.9,0};
gsl_interp* interps[3] =
{NULL,NULL,NULL};
interps[0] = gsl_interp_alloc(gsl_interp_linear,n);
interps[1] = gsl_interp_alloc(gsl_interp_polynomial,n);
interps[2] = gsl_interp_alloc(gsl_interp_cspline,n);
gsl_interp_init(interps[0],x,y,n);
gsl_interp_init(interps[1],x,y,n);
gsl_interp_init(interps[2],x,y,n);
gsl_interp_accel* acc = gsl_interp_accel_alloc();
21 int main(int argc, char** argv)
Display();
阅读(...) 评论()2931人阅读
GSL-GNU scientific Library(94)
& & & &如果在程序中需要调用gsl中的矩阵类型,首先需要声明#include&gsl/gsl_matrix.h&&&&&&& 与向量一样,gsl中的矩阵同样也构建在数据块之上。其声明如下:[cpp]&&需要仔细说明的是矩阵中tda的意义。举一个矩阵的例子:1 &2 &3 &X &X &X4 &5 &6 &X &X &X&& & &这个矩阵中&X&表示未使用的内存单元。则在这个矩阵中,size1=2,size2=3,而实际列数tda=6。这样的规定与c语言中二维数组的存储格式为行优先有关。因此gsl_matrix中block-&data内存块的实际大小为size1*tda*sizeof(double)。 gsl在矩阵中还设置了一个size2参数正是体现了内容与描述分离的思想。&& & &类似于向量,gsl也提供了各种关于矩阵内存分配的函数:[cpp]&&&& & &这些函数的作用容易从函数名中理解。需要注意的是其中alloc与calloc函数创建的矩阵中owner=1,而alloc_from_block与alloc_from_matrix中owner=0。如同vector 中的owner一样,不同的取值将影响gsl_matrix_free的动作。即如果owner=1,则销毁矩阵时将同时销毁矩阵所对应的数据块,而如果owner=0,则销毁矩阵的同时不会销毁对应的数据块。&&&&& 如果需要访问矩阵中的第i+1行,j+1列的元素,可以使用下面的两个函数:[cpp]&&& && 当然,gsl也允许以向量为单位访问矩阵元素。下面的两个函数将把给定向量中的元素拷贝到矩阵中行或列元素:[cpp]&& & 或者,反过来,亦可将矩阵中某行或者某列拷贝到给定的向量中:&&&[cpp]&此外,我们还可利用如下的两个函数直接根据矩阵中的数据创建新的向量:&&&[cpp]&&&&&&& 值得注意的是,与前面两个函数的拷贝方法不同,以这种方式创建的向量中的数据只是对矩阵中相应数据的一种引用,这一点在函数的源代码中得到验证:[cpp]&有趣的是,新创建的向量中v-&block域实际上为空指针。&&&&& gsl中还提供了一些根据矩阵元素创建vector view类型的函数:[cpp]&&&&& 其中,gsl_matrix_diagonal将由矩阵的对角元素创建vector view,gsl_matrix_subdiagonal则将获得矩阵的第k层下对角元元素,而gsl_matrix_superdiagonal则获得矩阵的第k层上对角元元素。注意,这些函数并不要求矩阵为方阵。例如,对于下面的矩阵a:&&&& 则gsl_matrix_diagonal(a)将返回向量(11,22,33)的view,gsl_matrix_subdiagonal(a,1)将返回向量(21,32)的view,而gsl_matrix_subdiagonal(a,1)将将返回向量(12,23)的view。&&&& 当然,既然是view数据类型,则意味着这些向量只是对矩阵中原有数据的引用。我们以gsl_matrix_diagonal函数为例说明之:[cpp]&&&&& 其中的宏定义与《gsl数据类型之向量》文末中的定义是相同的。特别注意到v向量中的stride域被设置成m-&tda+1,而读源代码可知,使用gsl_vector_get(v,i)获取v中的第i+1个元素时,函数将返回v-&data[i * v-&stride],这就不难理解gsl是如何实现对矩阵对角元的引用的。&&&& gsl中还有一些对矩阵整体赋值的函数,常用的有下面三个函数:[cpp]&&&& 而更多的涉及矩阵操作的函数信息可以参见手册http://www.gnu.org/software/gsl/manual/html_node/Matrices.html&&& 此外矩阵也有相应的matrix view类型的数据结构,可以实现提取子矩阵等功能,限于篇幅,这里不再展开介绍。有兴趣的读者可以参考手册matrix views一节http://www.gnu.org/software/gsl/manual/html_node/Matrix-views.html
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8209673次
积分:93922
积分:93922
排名:第8名
原创:1130篇
转载:2963篇
评论:1344条
(4)(10)(2)(3)(13)(13)(4)(9)(62)(16)(8)(23)(9)(37)(73)(34)(31)(120)(128)(183)(23)(69)(75)(1)(171)(33)(148)(168)(145)(27)(144)(139)(208)(61)(59)(10)(10)(32)(2)(7)(34)(24)(9)(39)(25)(32)(46)(20)(44)(8)(21)(43)(49)(100)(113)(136)(35)(55)(15)(29)(41)(15)(50)(17)(20)(182)(206)(43)(27)(19)(17)(13)(1)(40)(5)(3)(4)(21)(71)(73)(19)(2)(2)(1)(1)(1)(6)(3)}

我要回帖

更多关于 gsl库 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信