vc.net2003下安装和使用blitz++详细指南

一.起因

安装和使用 blitz++ 时经常遇到问 , 查看了 ccboy 写的《 VC++ _NET 2003 –安装和使用 Boost 1_30 和 Blitz++0_6 》,但他写的不详细 , Blitz 的官方文档也不清楚 , 只好自己来 , 花了不少时间才初步弄清楚。

 

二. Blitz 简介

大家知道 Fortran 是公认的科学计算编程语言 , 大量数值计算库都是基于 fortran 的 , 如 lapack. 而 blitz++ 则为科学计算人员提供了面向对象的 C++ 的数值计算程序库 , 速度能与 fortran77/90 匹配 .

    用过 matlab 的人知道 , matlab 是一种基于矩阵的第四代语言 , 它将每个变量都视作矩阵 , 赋值起来比起 c/c++/java 等主流语言起来非常方便 , 而 blitz++ 也提供了这种矩阵的强大操作 , 而且性能比起 matlab 要快很多 , 这是因为两种的语言特性所决定的 .

    Blitz++ 最新的版本中提供了数组和向量 ( 即矩阵 ), 随机数产生器 , 小向量和矩阵 .

    值得注意的是 , 与其它数值计算包相比较 , blitz 是非常有个性的 , 它不求高大全 , 如它并没有提供所有的矩阵操作功能 , 如求特征向量 ,FFT 分析 等 . 它的特点在于面向对象、数组操作语法和模板操作( But the main focus of blitz is on array syntax   and stencil operations ) [4] 。矩阵操作功能,想起 STL 中的VALARRY 了吗? VALARRAY 中的功能这里都实现和加强了。这个在测试项目 MT1 中可以初步显示 .

 

三.安装与测试

1)    安装 Blitz++-0.7 通用代码

首先要安装最原始的代码包 , 源代码是跨平台的 , 只要 blitz 支持 .

在 http://www.oonumerics.org/blitz/ 下只有 0.6 版本的 , 最新的版本是 0.7, 在 http://sourceforge.net/project/showfiles.php?group_id=63961 .解压缩 , 如到 C:\vc\Blitz++-0.7\

 

2)    安装 Blitz-VS.NET1.5 -FOR vs.net2003 项目

如果想 blitz 能在 VS.net 下使用 , 就要定义相应的宏 , 使用相应的头文件 , lib 和 blitz++ 提供的类就行 . 而宏定义 ,Lib 的编译项目文件 , 这些工作 Julian Cummings 已经为我们做好 . 在 blitz++ 的主页上查看 supported platforms, 看到 blitz for vs.net, 循提示去到 blitz 在 sourceforge 的 cvs 下查找 , 在cvs 目录下 http://cvs.sourceforge.net/viewcvs.py/blitz/blitz , 下载两个文件 : Blitz-VS.NET.zip 和 README-VS.NET.txt, 我下载时的这两个文件的最新版本分别是 1.6 和 1.1

 

 

将 blitz-VS.NET zip 解压缩 , 它的主目录与 C:\vc\Blitz++-0.7 的相同 , 我们假设它为 C:\vc\Blitz-VS.NET1.6 , 目录结构如下 :

Blitz\

Blitz-Testsuite\

Blitz-Library.ncb

Blitz-Library.sln

Blitz-Library.suo

 

blitz\ 里面是 config.h, 它定义了 blitz 相关的宏变量 , 如 BZ_HAVE_COMPLEX, BZ_HAVE_STL 等等 , 这是每个项目必须用到的 .

 

blitz 目录里面还有一个 VC 项目文件 , 这个项目是用来生成 blitz.lib 文件的, 稍后我们将提到如何设置生成。

 

3)    生成 blitz.lib

启动 vs.net2003, 设置 : 工具 -> 选项 -> 项目 ->VC++ 目录 , 在 ” 包含文件 ” 中添加 blitz-0.7 的路径 ( 即 cl 中的 /I 参数 ) ,如 C:\vc\blitz 。 下图为我的配置

 

 

使用 vs.net2003 打开为 C:\vc\Blitz-VS.NET1.6\blitz\ blitz.vcproj, 如上所述 , 我们正是用这个项目来产生 blitz.lib 的 . 它所使用的源文件就是Blitz++-0.7\src\globals.cpp, 因为代码原作者为了保持代码的唯一份 , 所以没有包括到这个 for vs.net 的压缩包中 , 你要将原 Blitz++ 目录下的 src 目录拷贝到这里 . 如将 C:\vc\Blitz++-0.7\src 拷贝到 C:\vc\Blitz-VS.NET1.6\src

    编译生成 blitz.lib. 编译时会出现错误提示 , 如 error PRJ0019: 工具从 ”copying blitz_d.lib..” 不必理会 , 这是 blitz 的 BUG, 在 DEBUG 或 release目录下已经生成了我们所需的文件 ,debug 版本的为 blitz_d.lib, release 版本的为 blitz.lib.

    此时 , 为了以后的版本都能使用此 lib 文件 , 我们可以配置一下全局选项 :

首先在 \Blitz-VS.NET1.6\ 下新建一 lib 目录 , 将 blitz.lib 和 blitz_d.lib 拷贝进去 . 在工具 -> 选项 -> 项目 ->VC++ 目录 -> 库文件下添加我们 lib 的路径

 

 

 

4) 编译和测试 blitz-testsuit

用 vs.net2003 打开 Blitz-Library.sln, 里面包括了 54 个测试用例 .

将 Blitz++-0.7 下的 testsuite 目录拷贝到 Blitz-VS.NET1.6, 原因也是为了保持代码的唯一性 , 据作者所说 [4] .

要确认这点 , 可以打开项目配置文件 vsproj, 用文本编辑器如 notepad 打开 , 查看

<Files>

       <Filter

           Name="Source Files"

           Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">

           <File

              RelativePath="..\..\testsuite\ctors.cpp">  

           </File>

       </Filter>

    </Files>

 

  确定项目选项输入库为 blitz_d.lib 或 blitz.lib

    编译 , 执行 . 

 

1) 如测试 ABA1, 这是求数组的最大值的测试

源代码为 :

#include

BZ_USING_NAMESPACE(blitz)

int main()

{

    Array<double,1> psiElem(3);

    psiElem =

      -0.121990517304243,-0.099118834514638,-0.164750336116265;

 

    double psi_max = blitz::max(psiElem);

    cout << "psiElem = " << psiElem << endl;

    cout << "psi_max = " << psi_max << endl;

}

 

结果为 :

psiElem = 3

 [ -0.121991 -0.0991188  -0.16475  ]

psi_max = -0.0991188

 

2) 测试 MT1 – 主要测试矩阵赋值与操作语法 ,index 的使用等等 .

源码 :

#include

 

BZ_USING_NAMESPACE(blitz)

 

#if 0

 

BZ_DECLARE_STENCIL2(kinEnergy,A,B)

B=Laplacian3D(A);

BZ_END_STENCIL_WITH_SHAPE(shape(-1,-1,-1),shape(1,1,1))

 

typedef complex<double> T_num;

 

typedef Array array3d;,3>

 

int main()

{

     const int N=5;

     array3d A(N,N,N);

     array3d B(N,N,N);

 

     // Fill a three-dimensional array with a Gaussian function

     firstIndex i;

     secondIndex j;

     thirdIndex k;

     float midpoint = 15/2.;

     float c = - 1/3.0;

     A = exp(c * (sqr(i-midpoint) + sqr(j-midpoint)

         + sqr(k-midpoint)));

 

     applyStencil(kinEnergy(), A, B);

 

     Array out_view(B.data(),shape(N*N*N));,1>

     cout << out_view;

}

#endif

 

BZ_DECLARE_STENCIL2(footprint,A,B)

B = Laplacian2D4(A);

BZ_END_STENCIL_WITH_SHAPE(shape(-2,-2),shape(+2,+2))

 

int main()

{

     int N = 9;

     Array<double,2> A(N,N), B(N,N);

     A = 0;

     A(4,4) = 1;

     applyStencil(footprint(), A, B);

     cout << B(Range(2,6),Range(2,6)) << endl;

}

 

结果为 :

5 x 5

[         0         0        -1         0         0

          0         0        16         0         0

         -1        16       -60        16        -1

          0         0        16         0         0

          0         0        -1         0         0 ]

 

 

 

五.在自己的项目中使用

一个很简单的例子 ,

新建个人项目后 , 注意以下几件事 :

1. 添加了 lib 或正确配置了 lib 的路径 : 将 blitz.lib 拷贝到项目下或在项目属性中配置好引用路径 .

2. 添加了 config.h, 将原来我们编译 blitz.lib 的宏定义文件拷贝过来 .

3. 使用了 using namespace blitz

4. 正确使用 blitz 的库对象

 

#include "stdafx.h"

#include "config.h"

#include

#include

 

using namespace blitz;

 

int main()

{

     complex<int> c(4,8);

     cout << c << endl;

 

     Array<int,2> ar(2,2) ;

     ar =1,1,

         2,2;

     cout << ar <;>

}

 

 

 

在编译时 , 各种配置都要非常小心 , 一不小心就会出错 , 按照以上的步骤一步一步来 , 应该不会有太大的错误 , 有任何问题或建议 , 可与我联系 armylau@163.com

 

六.参考文献:

1.    [blitz] blitz 官方主页,文档

2.    [IBM] C 和 C++ 的矩阵库-评估和比较 Meschach 、 Cooperware 矩阵和 Blitz.htm   http://www-900.ibm.com/developerWorks/cn/linux/other/matrix/index.shtml

3.    [ccboy] ccboy 写的 VC++ _NET 2003 –安装和使用 Boost 1_30 和 Blitz++0_6

4.    [Julian C.]emails

 

/File/DIV>

时间: 2024-10-30 12:54:06

vc.net2003下安装和使用blitz++详细指南的相关文章

在Centos6.5系统下安装java开发环境详细步骤

Centos6.5系统下安装java开发环境的步骤如下 一.安装jdk 1.查看Linux自带的JDK是否已安装 java ?version 如果出现openjdk,最好还是先卸载掉openjdk,在安装sun公司的jdk. 2.查看jdk信息 rpm -qa|grep java 3.卸载OpenJDK,执行以下操作: rpm -e --nodeps tzdata-java-2012c-1.el6.noarchrpm -e --nodeps java-1.7.0-openjdk-1.7.0.45

Linux下安装与使用MySQL详细介绍_Mysql

一.安装Mysql 1.下载MySQL的安装文件安装MySQL需要下面两个文件:MySQL-server-4.0.16-0.i386.rpm MySQL-client-4.0.16-0.i386.rpm下载地址为:http://dev.mysql.com/downloads/mysql-4.0.html,打开此网页,下拉网页找到"Linux x86 RPM downloads"项,找到"Server"和"Client programs"项,下载需

linux下安装Squid代理的详细配置教程_服务器其它

1.如果系统中还没有装squid,按以下顺序输入命令后即可完成安装 # wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE18.tar.gz //下载Squid代理安装包 # tar -zxvf squid-3.0.STABLE18.tar.gz //解压Squid安装包 # cd squid-3.0.STABLE18 # ./configure --prefix=/usr/local/squid --sysconfd

XenServer 5.6环境下安装Windows Server 2012详细过程(图文)_XenServer

之前一直都是使用vmware和hyper v环境,出于学习的目的,打算尝试下citrix xenserver,首先从安装开始. 环境配置如下:Windows Server 2008 R2和XenServer 5.6服务器各一台,下文以XenServer举例,如何在虚拟机中安装Windows Server 2012.(事实上5.6安装Server2012有点问题,不过暂时不影响体验)听说Xenserver6是可以直接使用SCVMM2012进行管理的,所以作为底层的Hyper-Visor,用什么系统

XenServer 安装及虚拟机部署详细指南_XenServer

1 了解服务器配置 1.1 查看服务器CPU是否支持虚拟化 1.1.1 目的 目前Inter和AMD生产的主流CPU都支持虚拟化技术,但很多电脑或主板BIOS出厂时默认禁用虚拟化技术 1.1.2 方法 setp1: 重启服务器后按F2或F10进入BIOS界面(不同主板型号进入BIOS所需按键不同) setp2:将BIOS显示切换到Process的面板,由于主板不一样其BIOS中显示关键词也不一样,主要是找到Virtual或Virtualization将其设置为Enabled setp3:退出BI

在VS.net下安装使用blitz++科学计算库

我做图像处理经常要用到矩阵运算,最常用到的工具就是matlab.不过matlab也就只能用在实验,真正做程序的时候,好多东西都要自己写,很麻烦.在网上搜了一下科学计算库,找到了三个,gsl.blitz++和MTL,没时间仔细研究哪个效率更高了,听了Oscargreat的推荐,开始用blitz++.       blitz++的代码下载下来发现,只是适合linux下编译,幸好在网上搜到了几篇不错的文档,在其指导下顺利的编译了blitz.lib. 体验:VC++ .NET 2003 –安装和使用Bo

ubantu-有没有好文推荐?关于Ubantu下安装openstack的?

问题描述 有没有好文推荐?关于Ubantu下安装openstack的? 仅安装了Ubantu,基础略薄弱,有没有好的教程推荐,如何在Ubantu下安装openstack?越详细越好... 解决方案 是Ubuntu,不是Ubantu. 我也是刚上手Linux的Ubuntu distribution,感觉命令好难学. 最近在搞个SDN的MiniNet平台,也非常难安,不过想想自己安装也比较有成就感,所以一直没放弃. 题主的情况,建议直接看官网,官网怎么教你就怎么做,肯定比某些博客来的靠谱. 到目前为

Android NDK r8 Cygwin CDT 在window下开发环境搭建 安装配置与使用 详细图文讲解

android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创) 一直想搞NDK开发却一直给其他事情耽搁了,参考了些网上的资料今天终于把环境搭建起来了,把过程记录下来分享给大家. 内容目录: 1.默认基础环境 2.NDK下载与配置 3.安装Cygwin 4.用NDK编译 5.安装CDT插件 6.安装Sequoyah插件 7.JNI编译环境配置 画了一个思维导图让大家一目了然配置过程   -------------------------

bundler 怎么在ubuntu下安装和编译 详细一点 现有教程操作完后不能成功!

问题描述 bundler 怎么在ubuntu下安装和编译 详细一点 现有教程操作完后不能成功! bundler 怎么在ubuntu下安装和编译 详细一点 现有教程操作完后不能成功! 解决方案 参考下http://wenku.baidu.com/link?url=NgJF6QDZ7Dnl3rLlCiWtPRP9MMnOVDhNqGkL2ceC5ZwWQ-adUTNS-Dm8mKSVtInWTnUSZfsg5dZ5E7OskbwDW7H7bp3EN9ogz8q5nDd_BgO 解决方案二: 先说说什