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

牽著老婆滿街逛

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

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

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

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

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

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

兩個程序庫對于從 Matlab 導(dǎo)入導(dǎo)出數(shù)據(jù)都有不錯的支持。

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

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

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

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

先來介紹一下配置吧

1,? Blitz++, 目前最高版本是 0.7 Blitz++ 已經(jīng)成為 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 中都有很多好的使用實例可供參考。

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

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

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

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

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

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

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

MTL 使用示例 1 ,矩陣的加法,乘法和轉(zhuǎn)置。

?

#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 ,數(shù)值方法 (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兩大數(shù)值計算程序庫(C++)的簡介 2008-08-20 16:20 littlewater

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


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   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>
            亚洲男人av电影| 久久精品国产99精品国产亚洲性色| 亚洲国产精品一区二区久 | 亚洲欧洲日韩在线| 激情亚洲成人| 在线免费一区三区| 在线精品福利| 亚洲黄色三级| 99精品视频一区二区三区| 亚洲美女91| 亚洲视频专区在线| 午夜一级久久| 久久久噜噜噜久噜久久| 久久综合色天天久久综合图片| 久久亚洲精品一区二区| 欧美电影免费观看高清| 亚洲激情图片小说视频| 亚洲精品一区二区网址| 亚洲一级网站| 久久国产主播精品| 欧美大尺度在线| 欧美日韩国产综合视频在线观看| 欧美午夜免费| 狠狠入ady亚洲精品经典电影| **性色生活片久久毛片| 99视频精品免费观看| 亚洲综合成人在线| 久久视频精品在线| 亚洲日本成人| 午夜精品亚洲| 欧美 日韩 国产在线| 欧美午夜免费电影| 狠狠久久亚洲欧美| 在线亚洲免费视频| 久久久久国产精品一区| 亚洲国产二区| 亚洲女女女同性video| 久久噜噜噜精品国产亚洲综合| 欧美第一黄色网| 国产精品自拍网站| 亚洲韩国日本中文字幕| 亚洲女同性videos| 欧美成人免费播放| 亚洲一区二区三区四区五区午夜| 久久九九99视频| 欧美视频在线视频| 伊人久久亚洲影院| 亚洲午夜久久久久久尤物| 久久久另类综合| 日韩午夜中文字幕| 久久久久国产一区二区三区四区| 欧美日韩精品在线播放| 黄色一区二区在线| 亚洲影院一区| 亚洲国产精品成人综合色在线婷婷| 亚洲影院在线观看| 欧美国产精品久久| 韩国av一区二区三区在线观看| 在线一区二区视频| 欧美国产精品va在线观看| 亚洲女人小视频在线观看| 欧美精品三级日韩久久| 韩国久久久久| 性欧美videos另类喷潮| 亚洲国产小视频在线观看| 欧美专区18| 国产精品视频导航| 在线一区二区三区四区| 欧美激情一区二区三区全黄 | 亚洲区国产区| 久久精品日韩欧美| 亚洲视频在线观看网站| 欧美va亚洲va国产综合| 韩国女主播一区二区三区| 午夜精品视频| 一区二区三区四区国产| 欧美日本韩国一区| 亚洲人体一区| 欧美国产日韩在线| 久久男女视频| 国内外成人免费激情在线视频| 午夜在线精品| 亚洲性夜色噜噜噜7777| 欧美视频免费在线| 99re这里只有精品6| 亚洲国产毛片完整版| 久久综合狠狠综合久久激情| 国产一区二区高清不卡| 久久国产精品亚洲77777| 亚洲一级片在线看| 国产精品久久久一本精品| 亚洲天堂av在线免费观看| 亚洲精品一区二区三区婷婷月| 欧美激情精品久久久久久久变态 | 日韩视频中文字幕| 亚洲国产精品www| 欧美成人自拍视频| 亚洲人体一区| 亚洲七七久久综合桃花剧情介绍| 欧美电影免费| 艳妇臀荡乳欲伦亚洲一区| 亚洲高清不卡av| 欧美激情一区二区三区在线| 亚洲精品日本| 亚洲乱码一区二区| 欧美亚洲成人精品| 香蕉久久夜色精品国产| 亚洲欧美综合精品久久成人| 国产午夜精品视频| 久久综合九色综合久99| 久久免费黄色| 亚洲精品影视| 一区二区三区你懂的| 国产精品日韩| 久久久久久穴| 欧美成人高清| 亚洲午夜伦理| 欧美亚洲视频一区二区| 亚洲二区在线| 亚洲精品你懂的| 欧美日韩在线不卡| 欧美一区午夜精品| 久久人人97超碰人人澡爱香蕉| 亚洲精品乱码久久久久久日本蜜臀 | 欧美大片免费| 欧美日韩国产123| 午夜视频久久久久久| 久久久久九九九九| 99这里只有久久精品视频| 亚洲视频久久| 在线观看日产精品| 99re6热只有精品免费观看 | 欧美国产欧美亚洲国产日韩mv天天看完整| 农夫在线精品视频免费观看| 一本色道88久久加勒比精品 | 欧美成人激情在线| 亚洲在线中文字幕| 久久久精品性| 亚洲视频精品在线| 久久国产加勒比精品无码| 亚洲免费高清| 欧美与黑人午夜性猛交久久久| 亚洲三级免费电影| 亚洲欧美另类中文字幕| 亚洲人成啪啪网站| 亚洲永久免费| 亚洲麻豆视频| 欧美一区二区视频观看视频| 99国产精品99久久久久久| 欧美亚洲综合在线| 一区二区欧美精品| 久久欧美肥婆一二区| 亚洲欧美日韩国产一区| 免费欧美日韩| 欧美在线一级视频| 欧美精品一区在线观看| 久久亚洲精品伦理| 国产精品露脸自拍| 亚洲激情一区二区三区| 很黄很黄激情成人| 亚洲一区二区三区高清| 亚洲靠逼com| 久久www成人_看片免费不卡| 宅男噜噜噜66一区二区| 久久天天躁狠狠躁夜夜av| 西西裸体人体做爰大胆久久久| 欧美不卡高清| 久久一区二区三区四区五区| 国产精品日韩在线一区| 亚洲日本va在线观看| 亚洲国产精品999| 欧美在线播放高清精品| 亚洲在线视频观看| 欧美精品 日韩| 欧美福利视频在线观看| 韩国av一区二区三区| 亚洲女人天堂成人av在线| 亚洲午夜视频在线| 欧美激情精品久久久久久变态| 免费观看日韩av| 国产自产2019最新不卡| 亚洲欧美日韩精品久久久| 亚洲一区二区三区在线看| 欧美激情国产日韩| 欧美激情导航| 亚洲国产一二三| 久久野战av| 噜噜噜久久亚洲精品国产品小说| 国产欧美在线播放| 亚洲天堂av高清| 亚洲综合999| 国产精品草草| 亚洲午夜一区| 欧美亚洲免费电影| 国产精品手机在线| 亚洲欧美精品| 久久久av网站| 影音先锋中文字幕一区| 久久久久一区二区三区| 免费看亚洲片|