精通VC與Matlab聯合編程(六)

精通VC與Matlab聯合編程(六)

作者:鄧科

下載源代碼

淺析VC與MATLAB聯合編程<一>
淺析VC與MATLAB聯合編程<二>
淺析VC與MATLAB聯合編程<三>
淺析VC與MATLAB聯合編程<四>
淺析VC與MATLAB聯合編程<五>

  Matlab C/C++函數庫是Matlab擴展功能重要的組成部分,包含了大量的用C/C++語言重新編寫的Matlab函數,主要包括初等數學函數、線形代數函數、矩陣操作函數、數值計算函數、特殊數學函數、多項式函數、插值函數等,用戶可以在自己的C/C++程序中調用這些函數,實現複雜的矩陣計算功能,從而減少程序設計工作量,需要說明的是C函數庫和C++函數庫是兩個不同的函數庫。
在使用前需要進行安裝:
在Matlab命令窗口中輸入:
mbuild -setup
按照提示選擇VC的編譯器,完成後在Matlab命令窗口中輸入:
mex -setup
同樣選擇VC的編譯器,就完成編譯器的安裝和配置。
首先介紹下C函數庫,C數學函數庫所需要的庫函數在該目錄下:Matlab根目錄:/extern/lib
下面來看matlab自帶的一個使用C函數庫的例子(所有使用c函數例子在:matlab根目錄/extern/examples/cmath):

 * ex1.c
 *
 * Copyright (c) 1995-1999 by The Mathworks, Inc. All Rights Reserved.
 */
 
/* $Revision: 1.6 $ */
 
#include <stdio.h>
#include <stdlib.h>     /* used for EXIT_SUCCESS */
#include <string.h>

#include "matlab.h"/*matlab.h爲C數學函數庫的頭文件

static double real_data[] = { 1, 2, 3, 4, 5, 6 };
static double cplx_data[] = { 7, 8, 9, 10, 11, 12 };

int main()
{
    /* 聲明兩個mxArray矩陣變量並賦初值爲NULL */
    mxArray *mat0 = NULL;
    mxArray *mat1 = NULL;

    /* 使用自動內存管理*/
    mlfEnterNewContext(0, 0);

    /* 創建矩陣mat0,mat1並賦值 */
    mlfAssign(&mat0, mlfDoubleMatrix(2, 3, real_data, NULL));/*該矩陣爲2*3矩陣
    mlfAssign(&mat1, mlfDoubleMatrix(3, 2, real_data, cplx_data));/*該矩陣爲2*3矩陣,併爲複數矩陣

    /* 打印矩陣 */
    mlfPrintMatrix(mat0);
    mlfPrintMatrix(mat1);

    /* 釋放矩陣所佔的內存*/
    mxDestroyArray(mat0);
    mxDestroyArray(mat1);

    /* 禁用自動內存管理*/
    mlfRestorePreviousContext(0, 0);

    return(EXIT_SUCCESS);
}
三、如果有圖像,請在圖像文件中表明圖像索引編號,如“myappimg1.gif”,“myappimg2.gif”等,在圖像顯示的下方註明圖像描述:


圖一 程序運行結果

下面在VC中實現該程序的功能,步驟如下:
1、在VC中打開ex1.c文件(該文件在該目錄下:matlab根目錄/extern/examples/cmath)
2、設置頭文件和庫文件路徑:工具->選擇,目錄
在inlude選項中添加如下路徑:
D:/matlab/extern/include/cpp
D:/matlab/extern/include
結果如圖2:


圖二 頭文件路徑設置

在Library選項中添加如下路徑:如圖三 D:/matlab/extern/lib/win32/microsoft/msvc60 D:/matlab/extern/lib D:/matlab/bin

圖三 庫文件路徑設置

3、添加庫文件:工程->設置->Link 在General選項中的“對象庫/模塊”中將目錄D:/matlab/extern/lib/win32/microsoft/msvc60目錄下的所有庫文件名寫上:如圖四


圖四 庫文件添加

  所有設置完成後就可以運行了。 Matlab內建函數庫包括Matlab C數學函數中最基本的數學函數,任何使用C數學函數庫編寫的應用程序必須使用Matlab內建函數。Matlab M文件函數庫包含了從M文件轉換來的函數,這些函數相比內建函數其內容更加豐富,並且包含了大量特殊功能函數在Matlab C函數庫中,Matlab陣列被聲明爲mxArray的結構體,該結構體的定義在目錄Matlab/extern/include/matrix.h文件中,很好的理解mxArray結構體有助於使用Matlab C數學庫。
Matlab C內建數學庫常用的函數有:
通用功能函數;
運算符和特殊矩陣;
基本的矩陣操作函數
初等數學函數
線形代數函數
數據分析和傅立葉轉換函數
字符串函數
文件輸入輸出函數
常用數據類型函數

Matlab M文件函數庫
運算和特殊功能功能函數
基本的矩陣操作函數
基本數學函數
特殊數學函數
線形代數函數
數值分析和傅立葉變換函數
多項式和插值函數
函數的函數和常微分方程
字符串函數
文件讀寫函數
數據類型函數
稀疏矩陣函數   
  以上函數的用法在Matlab幫助文擋中有介紹。與Matlab C函數庫類似,Matlab C++函數庫也包括Matlab C++內建數學庫和Matlab M文件函數庫,並在Matlab C函數庫的基礎上對許多函數進行了類封裝,使得C++語言可以利用重載、繼承等功能對C++庫函數進行調用。Matlab C++函數庫與Matlab C函數庫的區別在於Matlab C++函數庫用類定義數據結構,而Matlab C函數庫用結構體來定義數據結構。要說明的是:Matlab7.0版本不再使用C/C++函數庫,因此以上方法在7.0版本中使用會出現 
發佈了23 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章