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

健康,快樂,勇敢的寧帥!!

努力、努力、再努力! 沒有什么能阻止我對知識的渴望。

 

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

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

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

posted on 2006-11-22 23:33 ningfangli 閱讀(909) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)值計算


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導(dǎo)航

統(tǒng)計

公告

Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

常用鏈接

留言簿(4)

隨筆檔案

文章分類

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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久久久久久久vr | 国产亚洲欧洲| 亚洲二区视频| 亚洲男人的天堂在线aⅴ视频| 亚洲欧美在线一区二区| 久久午夜av| 欧美一级视频| 欧美精品一区在线播放| 久久久久久久波多野高潮日日| 欧美国产一区二区| 毛片基地黄久久久久久天堂| 国产精品久久久久一区二区三区| 亚洲国产99精品国自产| 亚洲一区免费在线观看| 欧美精品www| 欧美国产视频一区二区| 国产日韩欧美黄色| 亚洲欧美日韩精品在线| 午夜精品久久久99热福利| 国产一区二区看久久| 欧美精品videossex性护士| 亚洲一区二区三区精品在线观看 | 亚洲毛片网站| 久久综合九色99| 久久青青草原一区二区| 国产亚洲精品福利| 欧美激情综合五月色丁香小说| 亚洲午夜电影网| 午夜精品福利一区二区蜜股av| 激情视频一区| 久久高清一区| 久久精品人人做人人综合| 国产日韩一区二区三区在线| 欧美夫妇交换俱乐部在线观看| 亚洲一区一卡| 亚洲美女在线看| 一个色综合av| 欧美日韩综合在线免费观看| 日韩一级精品| 亚洲国产老妈| 亚洲一区区二区| 91久久精品日日躁夜夜躁国产| 免费在线日韩av| 91久久夜色精品国产九色| 99精品欧美一区| 影音先锋在线一区| 欧美.www| 久久这里只有| 久久国产精品免费一区| 亚洲精品免费一二三区| 亚洲一区在线观看视频| 亚洲三级免费电影| 国产精品午夜国产小视频| 久久er精品视频| 亚洲国产cao| 欧美电影免费观看高清| 一区二区三区视频观看| 国产乱码精品一区二区三区不卡| 欧美在线免费看| 午夜精品久久久99热福利| 亚洲深夜福利在线| 日韩亚洲欧美在线观看| 91久久久在线| 91久久国产综合久久| 亚洲第一页在线| 亚洲激情一区二区三区| 亚洲国产欧美在线 | 亚洲经典自拍| 亚洲欧洲一区二区天堂久久 | 国产精品视频在线观看| 国产精品家教| 老司机一区二区三区| 久久久久免费| 一区二区三区精品视频在线观看| 久久精品主播| 老鸭窝毛片一区二区三区| 久久亚洲高清| 亚洲一级二级在线| 亚洲日产国产精品| 99xxxx成人网| 一区二区欧美日韩| 亚洲欧美在线免费| 久久久久久黄| 欧美激情精品久久久久久蜜臀 | 欧美高清不卡| 欧美性色综合| 国产主播一区二区三区四区| 欧美日本乱大交xxxxx| 欧美午夜一区二区| 国产欧美一区二区精品仙草咪| 欧美精品色网| 国产精品婷婷| 一区在线免费| 在线综合+亚洲+欧美中文字幕| 亚洲综合精品一区二区| 久久精品国产99精品国产亚洲性色 | 亚洲欧美日韩国产一区二区三区| 在线欧美影院| 国产夜色精品一区二区av| 影音先锋亚洲精品| 一区二区三区日韩欧美| 欧美一区二区国产| 亚洲在线观看| 久久男女视频| 亚洲靠逼com| 亚洲黄网站黄| 午夜精品影院| 西西裸体人体做爰大胆久久久| 久久青草久久| 国产精品日韩欧美综合| 亚洲区国产区| 欧美资源在线| 久久久久国产精品www| 亚洲国产精品专区久久| 亚洲欧美怡红院| 欧美日本韩国一区| 国内偷自视频区视频综合| 正在播放亚洲| 亚洲综合精品| 欧美激情精品久久久久久久变态 | 免费成人av资源网| 欧美国产日韩免费| 亚洲欧美成人在线| 欧美日韩精品一二三区| 欧美视频观看一区| 在线观看成人小视频| 午夜久久久久久| 最新中文字幕亚洲| 久久婷婷综合激情| 国产丝袜美腿一区二区三区| 亚洲网站在线播放| 亚洲国产裸拍裸体视频在线观看乱了| 午夜精品一区二区三区电影天堂 | 亚洲国产精品成人va在线观看| 午夜精品亚洲一区二区三区嫩草| 欧美日韩国产精品| 亚洲韩国青草视频| 这里只有精品电影| 亚洲国产精品久久久久| 久久黄金**| 国产午夜精品一区二区三区欧美| 亚洲色图制服丝袜| 亚洲精品久久久久久久久久久久久| 久久久久免费视频| 黄色成人av在线| 日韩一级免费| 亚洲国产日韩欧美在线动漫| 久久蜜桃资源一区二区老牛| 国精产品99永久一区一区| 午夜一区二区三区在线观看| 一本色道久久综合亚洲精品高清| 欧美—级高清免费播放| 日韩视频在线一区| 亚洲国产一区二区三区在线播| 男同欧美伦乱| 亚洲欧洲日本在线| 亚洲高清视频一区二区| 欧美成人小视频| 国产伦理一区| 亚洲欧美在线免费观看| 亚洲一品av免费观看| 国产精品久久久久久久久久免费看| 亚洲在线视频免费观看| 制服诱惑一区二区| 国产精品午夜在线| 久久国内精品视频| 久久久久久久久伊人| 亚洲国产高清在线观看视频| 香蕉久久夜色| 性久久久久久久| 一区二区在线视频播放| 欧美成熟视频| 欧美日韩国产色综合一二三四| 这里是久久伊人| 午夜精品一区二区三区电影天堂| 国内精品美女在线观看| 欧美激情一区| 欧美日韩综合精品| 久久精品一区二区国产| 裸体女人亚洲精品一区| 国产日韩欧美一区二区三区在线观看| 欧美在线一二三区| 久久在精品线影院精品国产| 亚洲国产专区| 宅男噜噜噜66一区二区 | 亚洲高清精品中出| 欧美视频在线观看免费网址| 欧美伊人影院| 免费一级欧美片在线观看| 一本色道久久综合亚洲精品高清| 亚洲午夜免费视频| 在线播放豆国产99亚洲| 亚洲人成网站在线观看播放| 国产毛片一区| 亚洲日本va午夜在线电影| 国产精品系列在线| 亚洲国产精品传媒在线观看|