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

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

編輯:關於VC++

在前面的介紹中,只是簡介紹了VC與Matlab程序設計的幾個簡單例子,很多關鍵性的知識都沒有介紹(例如函數的輸入輸出格式,VC中調用工具箱函數,編譯器的使用,幾種方法的混合使用等等)在以後的文章中,將會對這些知識進行介紹(因此標題也改了一下,呵呵,如果有錯誤的地方,還望大家多多指點)VC調用Matlab的方法有多種,為了對混合編程有一個大概認識,將常用的幾種方法中介紹一下:

一、通過Matlab Engine方式

Matlab Engine是指一組Matlab提供的接口函數,支持C語言, Matlab Engine采用C/S(客戶機/服務器)模式,Matlab作為後台服務器,而C程序作為前台客戶機,通過Windows的動態控件與服務器通信,向Matlab Engine傳遞命令和數據信息,從Matlab Engine接受數據信息。用戶可以在前台應用程序中調用這些接口函數,實現對Matlab Engine的控制。采用這種方法幾乎能利用Matlab全部功能,但是需要在機器上安裝Matlab軟件,而且執行效率低,因此在實際應用中不采用這種方法,在軟件開發中也不可行,我認為適合個人使用或做演示用,因此不打算介紹。

二、直接調用Matlab的C/C++數學函數庫

Matlab中提供了可以供C/C++語言調用的C/C++數學函數庫,其中包含了大量用C\C++語言重新編寫的Matlab數學函數,這些函數涉及到線形代數、數值分析、傅立葉變換、多項式計算、解微分方程等,並且函數庫中提供了大量各種矩陣操作函數,在VC中可以直接使用這些函數,通過這些函數可以在VC中方便的實現在Matlab中矩陣運算功能。可以看出用這種方法可以很靈活的調用Matlab來編寫應用程序,但要求讀者對C\C++語言比較熟悉,可以看出使用這種方法調用Matlab的工具箱函數有很大困難。適合對C\C++語言比較熟悉的用戶使用,

三、用Matlab自帶的Matlab Compiler

Matlab Compiler的作用是將m文件轉化成C/C++代碼(也就是通常所用的mcc命令),這種源代碼需要用C/C++編譯器編譯連接成獨立應用程序,在將m文件轉成獨立應用程序的過程中生成的C/C++文件,原則上是可以被其它的C/C++代碼調用的,編譯器可以通過設置mcc命令的選項,將m文件編譯成動態鏈接庫文件、C/C++文件、可執行文件等一系列文件。到matlab R21.1為止,Matlab Compiler的m程序轉換成C/C++代碼功能有很多限制:

不能轉換腳本m文件,只能轉換m函數;

不能使用matlab對象;

不能用input或者eval操作matlab空間變量;

不能動態地命名變量,然後用load或者save命令來操作;

不能處理具有嵌套調用其他m文件的m文件;

不能使用MATLAB內聯函數;

四、使用matlab的combuilde工具

COM是component object module的簡稱,它是一種通用的對象接口,任何語言只要按照這種接口標准,就可以實現調用它。matlab6.5新推出來的combuilder就是把用matlab編寫的程序做成com組件,供其他語言調用。該方法實現簡單,通用性強,而且幾乎可以使用Matlab的任何函數(注意:不支持腳本文件,腳本文件使用時要改為函數文件),因此在程序較大、調用工具箱函數或調用函數較多時推薦使用,這也是Matlab公司(Matlab公司就是Mathworks公司)推薦的使用方法。

五、使用matcom工具。

這是個第三方控件,很小(8M多),原本屬於mathtool公司,後來被Mathworks公司合並了,使用該工具可以將m腳本文件和m函數轉化成相同功能的C\C++文件,相比其它方法使用matcom具有如下優點:

轉換過程簡單(由matcom工具自動實現),容易實現;

可以方便的生成動態鏈接庫文件(dll)和可執行文件(exe);

不僅可以轉換獨立的腳本文件,也可以轉換嵌套腳本文件;

設置環境後,可以使用Matlab的工具箱函數;

但matcom也有以下不足:

對struct等類的支持有缺陷,對class數據類型;

部分繪圖語句無法實現或得不到准確圖象,尤其是三維圖象;

因此在不涉及到三維做圖以及m文件不大的情況下推薦使用。

以上幾種方法可以單獨使用,也可以混合使用。這裡簡單的介紹了VC和matlab接口的幾種方法,讀者可以根據需要選擇適合自己的方法。需要說明的是上以上幾種方法並不是相互獨立的,而是有相互聯系的,比如使用C/C++函數庫與使用編譯器,對於實現相同功能的程序,直接調用函數庫與使用編譯器最終生成的代碼可能相差不大,只不過一個是直接在VC中寫C/C++代碼,一個是在Matlab中寫好m代碼,然後通過編譯器將m代碼轉化成相同功能的C/C++代碼,而在轉化的過程中也需要調用相應的C/C++函數庫文件。在後面的文章中將從第二種方法開始進行介紹。

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