最近在做一個項目,甲方要求使用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
參考鏈接: