程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 精通VC與Matlab聯合編程(六)

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

編輯:關於VC++

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版本中使用會出現錯誤。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved