• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            vc.net2003下安裝和使用blitz++詳細指南

            @author:armylau

            @date:2004-8-12

            ?

            一.起因

            安裝和使用 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 下圖為我的配置

            ?

            include?

            使用 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;

            ?

            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));

            ???? 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>

            posted on 2006-07-01 13:34 楊粼波 閱讀(1672) 評論(0)  編輯 收藏 引用

            欧美久久综合九色综合| 欧美午夜精品久久久久免费视| 久久精品国产精品亚洲下载| 欧美一级久久久久久久大片| 无码人妻久久一区二区三区免费丨| 国产欧美久久一区二区| 亚洲精品NV久久久久久久久久| 婷婷伊人久久大香线蕉AV| 国产成人久久久精品二区三区| 国产成人无码精品久久久性色| 情人伊人久久综合亚洲| 国产成人综合久久精品红| 伊人久久大香线蕉精品| 97久久国产综合精品女不卡| 久久久精品久久久久久| 99久久超碰中文字幕伊人| 久久精品无码一区二区WWW| 国产巨作麻豆欧美亚洲综合久久| 色诱久久久久综合网ywww| 久久免费香蕉视频| 91精品国产91久久久久久青草 | 99久久做夜夜爱天天做精品| 久久综合九色综合久99 | 久久se精品一区二区影院 | 91麻豆国产精品91久久久| 免费国产99久久久香蕉| 精品国产乱码久久久久久郑州公司| 欧美一区二区久久精品| 四虎亚洲国产成人久久精品| 伊人久久大香线焦综合四虎| 久久美女网站免费| 久久99热只有频精品8| 五月丁香综合激情六月久久| 久久精品国产日本波多野结衣| 四虎久久影院| 国产精品亚洲综合久久| 久久久久精品国产亚洲AV无码| 99久久综合国产精品免费| 久久精品国产亚洲AV香蕉| 亚洲精品美女久久久久99| 亚洲AV无码久久|