青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

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

Blitz++與MTL兩大數值計算程序庫(C++)的簡介

Blitz++ MTL 兩大數值計算程序庫 (C++) 的簡介

Blitz++ MTL 都是基于 C++ template 高效數值計算程序庫,不過他們專注于不同的方向。

Blitz++ 提供了一個 N 維( 1—10 )的 Array , 這個 Array 類以 reference counting 技術實現,支持任意的存儲序 (row-major C-style 數組, column-major Fortran-style 數組 ) ,數組的切割 (slicing), 子數組的提取 (subarray), 靈活的 Array 相關表達式處理。另外提供了可以產生不同分布的隨機數 (F,Beta,Chi-Square ,正態,均勻分布等 ) 的類也是很有特色的。

MTL 專注于線性代數相關的計算任務,如各種形式矩陣的生成 ( 對角,共軛,稀疏,對稱等 ) ,相關的計算,變換,以及與一維向量的運算。

兩個程序庫對于從 Matlab 導入導出數據都有不錯的支持。

本文主要介紹如何在 Visual C++7.1 編譯器下運用這兩個程序庫。

以前的 VC6 編譯器由于對 ISO C++98 標準的支持不夠,特別是在 template 方面,以至于很難編譯這種完全用 template 技術構造起來的程序庫。 Blitz++ 是完全不支持 VC6 的。

到了 VC7.1 ,由于對于 ISO 標準的支持達到了 98% ,使得我們可以很輕松的編譯使用這兩個程序庫。

不過這兩個程序庫的文檔不是那么友好,特別是 MTL ,僅僅提供了類似于 reference 的文檔,對于具體的使用方法則不作介紹。 Blitz++ 相對來說好一些,還提供一份介紹性的入門文檔 。所以使用這兩個程序庫閱讀其源代碼往往是必要的。當然了,兩個程序庫都是 template 代碼,源代碼必定是全開放的。

先來介紹一下配置吧

1,? Blitz++, 目前最高版本是 0.7 Blitz++ 已經成為 SourceForge 的項目了,所以可以在 SourceForge.net 下載到。下載后解壓縮,你會看到 \Blitz++-0.7\blitz \Blitz++-0.7\random 兩個文件夾,這是 blitz 的源代碼所在處。 \Blitz++-0.7\manual 是文檔所在文件夾。 \Blitz++-0.7\benchmarks,\Blitz++-0.7\examples \Blitz++-0.7\testsuite 中都有很多好的使用實例可供參考。

現在將 VC++ IDE Include 設置為 \Blitz++-0.7 ,因為 blitz 源碼中都有這樣形式的 #include ,#include 。或者就干脆把兩個源碼文件夾整個得 copy include 文件夾內。然后將 blitz 文件夾下的 config.h 改為其它名字,而將 config-VS.NET2003.h 的名字改為 config.h OK, 現在你就可以編譯所有的 testsuite benchmarks 了。

1,? MTL 的配置相對來說麻煩一點,現在 http://www.osl.iu.edu/research/mtl/ 這里下載一個 VC++7 的,不過還不能馬上用。由于 VC++7.1 對標準的支持更近了一步,同時對于某些語法細節的檢查更為嚴格 ( 主要是對于 typename template partial specialization ),我們要對代碼做一些小小地修改,特別是 mtl/mtl_config.h 這個文件。有一些地方要加入 typename 。另外有兩個模板偏特化的情況需要修改,加上 template <> 。在這里 http://newsuppy.go.nease.net/mtl.zip 我提供了一個修改完成的版本,不過我不保證我的修改可能引入的新的 bugs ,所以請謹慎使用。 MTL 的內部使用一定數量的 STL 組件和算法。 MTL 的源代碼都在 mtl 文件夾內,由于 mtl 內部的 include 都是 #include “…” 的形式,使用時把 mtl 文件夾復制到當前 project 下就可以。如果要設 VC++ Include 目錄,則應該先把所有的 #include “…” 改為 #include? <…> 這樣的形式。

不過剛開始使用 MTL 還是有一些不太容易讓人接受的地方。比如 mtl::matrix 這個模板類并不能夠產生實際的矩陣對象,而要通過它的 type 成員產生一個對應模板參數的類型,再通過這個類型來實例化對象。

比如 typedef mtl::matrix< SPAN>, rectangle<>, dense<>, row_major >::type Matrix; Matrix A;

這里的 A 才是真正的矩陣對象,而 Matrix 則是一個元素為 float ,矩形,密集,行主 (C-style) 的矩陣類。

?????? 下面我提供三個簡單的入門例子解釋 MTL 的使用。分別有矩陣的加法,乘法,轉置,求逆以及一個線性方程組求解的例子。

?????? 另外 mtl test contrib 文件夾下也有很多不錯的示例代碼可以查閱。

MTL 使用示例 1 ,矩陣的加法,乘法和轉置。

?

#include

#include

#include "mtl/mtl.h"???????????????????????????????????????????????????????????????????????????????????????

#include

using namespace std;

using namespace mtl;

??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

template < class Matrix>

void print_matrix(Matrix& mat,const string& description)

{

?????? std::cout << description;

?

?????? std::cout <<'[';

?????? for (Matrix::iterator i = mat.begin(); i!=mat.end();++i)

?????? {

?????? ? for (Matrix::OneD::iterator j =(*i).begin(); j!=(*i).end();++j)

?????? ? {

????????????? ? std::cout <<'\t'<<*j;

?????? ? }

?

?????? ? std::cout <<((i+1== mat.end())?"\t]\n":? "\n");

?????? }

}

?

int main(int argc,char* argv[])

{

? typedef matrix<float, rectangle<>, dense<>, row_major>::type Matrix;

?

? const Matrix::size_type MAX_ROW =3, MAX_COL =3;

?

? Matrix? A(MAX_ROW,MAX_COL),B(MAX_ROW,MAX_COL),C(MAX_ROW,MAX_COL);

?

? // fill Matrix A with the index syntax

? for (Matrix::size_type i=0; i<MAX_ROW;++i)

? {

?????? ? for (Matrix::size_type j=0; j<MAX_COL;++j)

?????? ? {

????????????? ? A(i, j)= Matrix::value_type(rand()%50);

?????? ? }

? }

?

? // fill Matrix B with the iterator syntax

? for (Matrix::iterator i=B.begin(); i!=B.end();++i)

? {

?????? ? for (Matrix::OneD::iterator j=(*i).begin(); j!=(*i).end();++j)

?????? ? {

????????????? ? *j = Matrix::value_type(rand()%50);

?????? ? }

? }

?

? print_matrix(A,"A=\n");

? print_matrix(B,"B=\n");

?

? // Matrix C = A + B

? add(A, C);

? add(B,C);

? print_matrix(C,"C = A + B? \n");

?

? // Matrix C = A * B^T,? B^T: transpose of B

? transpose(B);

? print_matrix(B,"B^T=\n");

? zero_matrix(C);??????? // because mult(A, B, C): C += A*B
? mult(A,B,C);

? print_matrix(C,"C = A * B^T\n");

? return 0 ;

}

?

2 ,下面是一個線性方程組的解法

#include

#include

#include

#include "mtl/mtl.h"

#include "mtl/lu.h"

#include

using namespace std;

using namespace mtl;

?

int main(int argc,char* argv[])

{

? typedef matrix<float, rectangle<>, dense<external>, row_major>::type Matrix;

? // dense : data copy from a float array,not generate them with yourself

?

? const Matrix::size_type MAX_ROW =3, MAX_COL =3;

?

? // solve the equation Ax=b

? // { 4x - y + z = 7

? //??? 4x - 8y + z= -21

? //?? -2x + y + 5z = 15 }

? // A = [ 4 -1 1

? //????????? 4 -8 1

? //????????? -2 1 5 ]

? // b = [7 - 21 15]^T

? float a[]={4.0f,-1.0f,1.0f,4.0f,-8.0f,1.0f,-2.0f,1.0f,5.0f};

? Matrix A(a, MAX_ROW, MAX_COL);

???

? typedef matrix<float, rectangle<>, dense<>, row_major>::type LUMatrix;

? LUMatrix LU(A.nrows(), A.ncols());

? mtl::copy(A, LU);

?

? typedef dense1D<float> Vector;

? Vector pvector(A.nrows());

? lu_factor(LU, pvector);

?

? Vector b(A.nrows()), x(A.nrows());

? b[0]=7.0f, b[1]=-21.0f, b[2]=15.0f;

? lu_solve(LU, pvector, b, x);

?

? for (Vector::iterator i=x.begin(); i!=x.end();++i)

?????? ? cout <<*i <<'\t';

?

? system("pause");

? return 0 ;

}

?

3 ,矩陣求逆

#include

#include

#include

#include "mtl/mtl.h"

#include "mtl/lu.h"

#include

using namespace std;

using namespace mtl;

?

template < class Matrix>

void print_matrix(Matrix& mat,const string& description)

{????????????????????????????????????????????????????????????????????????????????????????????

?????? std::cout << description;

?

?????? std::cout <<'[';

?????? for (Matrix::iterator i = mat.begin(); i!=mat.end();++i)

?????? {

?????? ? for (Matrix::OneD::iterator j =(*i).begin(); j!=(*i).end();++j)

?????? ? {

????????????? ? std::cout <<'\t'<<*j;

?????? ? }

?

?????? ? std::cout <<((i+1== mat.end())?"\t]\n":? "\n");

?????? }

}

?

int main(int argc,char* argv[])

{

? typedef matrix<float, rectangle<>, dense<external>, row_major>::type Matrix;

? // dense : data copy from a float array,not generate them with yourself

?

? const Matrix::size_type MAX_ROW =3, MAX_COL =3;

?

? // inverse matrix A

? // A = [ 4 -1 1

? //????????? 4 -8 1

? //????????? -2 1 5 ]

? float a[]={4.0f,-1.0f,1.0f,4.0f,-8.0f,1.0f,-2.0f,1.0f,5.0f};

? Matrix A(a, MAX_ROW, MAX_COL);

???

? typedef matrix<float, rectangle<>, dense<>, row_major>::type CMatrix;

? CMatrix LU(A.nrows(), A.ncols());

? mtl::copy(A, LU);

?

? typedef dense1D<float> Vector;

? Vector pvector(A.nrows());

? lu_factor(LU, pvector);

?

? CMatrix InvA(A.nrows(), A.ncols());

? lu_inverse(LU, pvector, InvA);

?

? print_matrix(A,"A = \n");

? print_matrix(InvA,"A^(-1) = \n");

? system("pause");

? return 0 ;

}

?

?

參考: 1 ,數值方法 (Matlab ) 3rd

?????????? John H.Mathews, Kurtis D.Fink 著, 陳渝,周璐,錢方 等譯

?????? 2 Matlab 6.5 的文檔 ??? The MathWorks, Inc.


作者Blog: http://blog.csdn.net/newsuppy/

posted on 2006-07-01 13:26 楊粼波 閱讀(3111) 評論(1)  編輯 收藏 引用

評論

# re: Blitz++與MTL兩大數值計算程序庫(C++)的簡介 2008-08-20 16:20 littlewater

不知道MTL71版本能不能更新一下,下載不能t.T  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品视频一区二区三区| 日韩视频一区二区在线观看| 久久精品三级| 免费日韩一区二区| 99在线精品视频| 国产精品毛片a∨一区二区三区|国| 亚洲欧美另类久久久精品2019| 久久成人精品电影| 亚洲国产婷婷香蕉久久久久久99| 欧美区视频在线观看| 亚洲综合电影| 亚洲国产91| 亚洲女人天堂av| 一区二区在线视频观看| 欧美日韩一二三四五区| 欧美亚洲尤物久久| 亚洲欧洲在线免费| 久久久国产91| 在线综合+亚洲+欧美中文字幕| 国产日韩专区| 欧美精品午夜视频| 欧美呦呦网站| 日韩视频欧美视频| 猫咪成人在线观看| 亚洲一区二区三区在线视频| 精品91免费| 欧美香蕉大胸在线视频观看| 久久这里有精品视频| 一本一本久久a久久精品综合麻豆| 久久久久久久高潮| 亚洲无玛一区| 亚洲电影在线| 国产美女精品视频免费观看| 欧美国产一区二区在线观看| 欧美一区二视频在线免费观看| 亚洲国产裸拍裸体视频在线观看乱了中文| 午夜久久一区| 日韩视频精品在线| 在线成人中文字幕| 国产精品一区二区久久国产| 欧美成人tv| 久久久噜噜噜久久中文字幕色伊伊| 一区二区三区久久精品| 亚洲国产福利在线| 久久香蕉国产线看观看av| 亚洲一区久久| 一个色综合导航| 亚洲黄页一区| 伊人成年综合电影网| 国产欧美精品在线播放| 欧美日韩一区二区三区高清| 欧美高清视频免费观看| 久久人体大胆视频| 久久激情视频久久| 欧美一区不卡| 亚久久调教视频| 亚洲欧美在线aaa| 亚洲午夜在线观看| 在线亚洲伦理| 日韩午夜免费视频| 亚洲美女免费精品视频在线观看| 欧美国产日韩xxxxx| 免费观看日韩av| 男人的天堂亚洲| 噜噜爱69成人精品| 蜜臀久久99精品久久久久久9| 久久久久91| 另类专区欧美制服同性| 乱人伦精品视频在线观看| 久久在线视频| 欧美成人免费全部| 亚洲高清123| 亚洲高清不卡| 亚洲精品之草原avav久久| 日韩视频不卡中文| 亚洲午夜久久久久久久久电影院| 亚洲一级片在线观看| 亚洲午夜久久久久久久久电影网| 亚洲一区二区三区四区五区黄| 亚洲午夜影视影院在线观看| 西西人体一区二区| 久久xxxx精品视频| 久久综合婷婷| 欧美精品自拍偷拍动漫精品| 欧美色道久久88综合亚洲精品| 欧美性久久久| 国产亚洲在线观看| 亚洲国产片色| 中文av一区二区| 欧美主播一区二区三区| 老司机一区二区三区| 亚洲福利视频一区| 99av国产精品欲麻豆| 亚洲欧美日韩综合aⅴ视频| 久久精品国产亚洲aⅴ| 嫩草国产精品入口| 欧美日韩在线观看一区二区| 国产九九精品视频| 亚洲成人在线网站| 一区二区日韩| 久久久免费精品视频| 亚洲国产日韩欧美一区二区三区| 一区二区欧美激情| 欧美一区二区视频免费观看| 欧美大片网址| 国产精品亚洲欧美| 亚洲韩国日本中文字幕| 亚洲一区二区三区免费视频| 久久久久久久久久看片| 亚洲人成7777| 久久成人国产| 欧美视频一区二区三区在线观看| 国产一区二区三区网站| 一级日韩一区在线观看| 久久久精品日韩欧美| 亚洲精选在线观看| 久久国产主播| 国产精品福利在线观看网址| 亚洲国产精品ⅴa在线观看 | 日韩亚洲欧美成人一区| 午夜亚洲激情| 亚洲激情小视频| 欧美一区二区黄色| 欧美色播在线播放| 亚洲国产一成人久久精品| 欧美一区午夜视频在线观看| 亚洲日本成人在线观看| 欧美诱惑福利视频| 国产精品欧美日韩一区| 99riav国产精品| 欧美成人精精品一区二区频| 午夜精品99久久免费| 欧美天堂亚洲电影院在线播放| 亚洲欧洲一级| 美女在线一区二区| 性欧美videos另类喷潮| 国产精品大片| 夜夜嗨av一区二区三区网站四季av | 久久久精品国产一区二区三区| 日韩视频免费看| 欧美 日韩 国产 一区| 韩国v欧美v日本v亚洲v| 性欧美长视频| 夜夜精品视频| 欧美日韩国产天堂| 99国产成+人+综合+亚洲欧美| 麻豆久久婷婷| 久久人人九九| 伊人久久大香线| 久久久久久久综合狠狠综合| 午夜精品电影| 国产乱码精品一区二区三| 午夜欧美电影在线观看| 一本大道久久a久久精二百| 欧美日韩国产系列| 一区二区三区国产精品| 亚洲精品色婷婷福利天堂| 欧美—级在线免费片| 亚洲人成久久| 亚洲国产视频直播| 欧美精品偷拍| 一级日韩一区在线观看| 9久草视频在线视频精品| 欧美视频一区二区三区…| 亚洲视频一二区| 亚洲视频高清| 国产精品综合视频| 久久理论片午夜琪琪电影网| 欧美自拍偷拍| 亚洲国产高清一区二区三区| 欧美激情性爽国产精品17p| 欧美韩国一区| 亚洲伊人久久综合| 亚洲欧美日韩综合aⅴ视频| 国产午夜精品视频免费不卡69堂| 久久精品免视看| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲三级免费电影| 日韩视频在线一区二区| 国产精品久久久久久久电影| 欧美中文字幕在线观看| 久久国产精品久久国产精品| 在线成人激情| 最新成人在线| 国产精品尤物| 欧美成人tv| 欧美日韩精品不卡| 欧美在线视频二区| 久久综合九色99| 亚洲午夜av| 久久精品国产久精国产爱| 亚洲国产视频一区| 一区二区三区视频免费在线观看 | 久久亚洲精品视频| 欧美韩日一区二区三区| 性做久久久久久免费观看欧美| 久久久精彩视频| 亚洲视频电影图片偷拍一区| 先锋影音国产一区| 亚洲美女电影在线|