VC++6.0使用MATCOM矩陣庫的方法

最近在做一個項目,甲方要求使用VC6.0來做,(都什麼年代了還在用vc6.0,無力吐槽,奈何甲方就是甲方),項目中設計到很多矩陣運算,並且要在原來的研究成果上來做,原來的成果大部分都是用Matlab實現的,這就需要一個轉化。

對比了一大波矩陣庫(1.C++矩陣運算庫:matcom 2.C++矩陣運算庫:Eigen3 3.C++矩陣運算庫:OpenCV 4.C++矩陣運算庫:ViennaCL 5.C++矩陣運算庫:Armadillo)最後才發現好像只有Matcom支持vc6.0,並且已經被matlab收購,只能去扒拉老版本的拿來用。下面介紹一下使用流程吧

1.修復VC6.0bug

第一步:將filetool.dll文件拷貝到vc安裝目錄下(安裝目錄下有個vc98文件夾,放到該文件夾裏就行)。

第二步:運行任意一個vc6.0工程項目,通過Tools(工具)->Customize(訂製)->Add-ins And Macro Files(附加項和宏文件),點擊“瀏覽”將剛纔複製vc98文件夾裏的DLL添加進去。這是就多了一個工具欄如圖 vc6.0無法使用“添加到工程”解決方法,“A”表示“添加”、“O”表示“打開”。以後就可以通過點擊“A”把文件添加到工程了。

2.創建一個c++工程

第一步:首先,創建一個新的c++工程。我們喜歡在程序中使用printf等函數向計算機屏幕上輸出一些內容,所以我們新建的工程是控制檯模式的。需要強調的是Matrix在owl,mfc或是Actives控件等程序的開發中也能發揮它的強大效率。

VC下創建新工程:VC->file>new>Win32Console Application,選擇空項目

第二步:添加矩陣庫到工程

將v4501.lib、matlib.h、ago4501.dll、v4501v.dll文件放到項目根目錄,點擊“A” 找到v4501v.lib並添加,

第三步:創建新的源文件

在該工程目錄下創建一個新的源文件,命名爲main.cpp,複製必備文件中main.cpp中的代碼過來,運行,不報錯就ok了;

VC:菜單目錄爲:Project->Addto Project->New->c++ source file.命名爲main.

 

 

代碼解釋:

使用matlib.h頭文件:

matlib.h中定義了數據類型和一些常量以及函數。爲了在工程中使用它,請在main.cpp中添加下面這行

#include<matlib.h>

初始化矩陣庫:

在main.cpp中的main函數中添加如下代碼:(參考文件main.cpp)

       initM(MATCOM_VERSION);//初始化

       ////////////

       //你的處理代碼

       .........

       exitM();//退出

關於函數initM和exitM的詳細信息將在“調用函數"一節中介紹。

關鍵點:請編譯和運行程序,而且不應該有錯誤。當然該程序什麼都沒作,但是成功地運行程序表明前面的設置沒有錯誤。

創建矩陣:

Matrix矩陣庫的數據類型被命名爲Mm。比如我們需要三個矩陣:a,b,x.添加下面這句話能夠創建三個矩陣:

         Mm a;

         Mm b;

         Mm x;

a,b,x被構造爲空矩陣。他們目前不含任何元素。當然上面這三句應添加在initM和exitM之間。因此exitM一般是在程序退出時調用。

設置矩陣元素:

現在我們設置矩陣a爲隨機值,矩陣b手動設置:

         a=rand(3);

         b=zeros(3,1);

         b.r(1,1)=3;b.r(2,1)=-1;b.r(3,1)=5;

         display(a);

         display(b);

display函數顯示a和b的值。請注意,我們並沒有爲a手動申請內存,重載運算符=爲我們處理好了內存分配。我們也沒有爲b申請內存,因爲.r(row,col)我我們進行了賦值操作直。

代碼如下:

         #include<matlib.h>

         int main()

         {

              initM(MATCOM_VERSION);

             

               Mm a;

               Mm b;

               Mm x;

               a=rand(3);

               b=zeros(3,1);

              b.r(1,1)=3;b.r(2,1)=-1;b.r(3,1)=5;

               display(a);

               display(b);

            

               exitM();

               return 1;

          }

編譯運行,結果如下:

2.9調用矩陣庫函數

爲了解一個線性方程組,ax=b,我們將調用mldivide函數。添加代碼如下:

              x=mldivide(a,b);

              display(x);

運行結果如下:

2.10獲取矩陣元素

我們用display打印整個矩陣,爲了獲得單個元素,可以使用函數.r(row,col),如下代碼將遍歷整個矩陣元素值:

              printf("\n");

              for ( i=1;i<=x.rows();i++)

              {                  for (int j=1;j<=x.cols();j++)

                 {

                    printf("x(%d,%d)=%14.6g",i,j,x.r(i,j));

                  }

                   printf("\n");

               }

輸出結果如下:


文件下載鏈接: https://download.csdn.net/download/yantao_wang/9965272


參考鏈接:

修復vc6.0

Matcom使用手冊


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章