![C_Builder與Matlab混合編程的兩種方法_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/1/d2fd73c2-4e77-4f6c-82c8-a74b1b87537e/d2fd73c2-4e77-4f6c-82c8-a74b1b87537e1.gif)
![C_Builder與Matlab混合編程的兩種方法_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/1/d2fd73c2-4e77-4f6c-82c8-a74b1b87537e/d2fd73c2-4e77-4f6c-82c8-a74b1b87537e2.gif)
![C_Builder與Matlab混合編程的兩種方法_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/1/d2fd73c2-4e77-4f6c-82c8-a74b1b87537e/d2fd73c2-4e77-4f6c-82c8-a74b1b87537e3.gif)
![C_Builder與Matlab混合編程的兩種方法_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/1/d2fd73c2-4e77-4f6c-82c8-a74b1b87537e/d2fd73c2-4e77-4f6c-82c8-a74b1b87537e4.gif)
![C_Builder與Matlab混合編程的兩種方法_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/1/d2fd73c2-4e77-4f6c-82c8-a74b1b87537e/d2fd73c2-4e77-4f6c-82c8-a74b1b87537e5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、科 學 技 術 與 工 程6卷C+Builder 與 Matlab 混合編程的兩種方法杜高鵬翟正軍 1*徐雋(西北工業(yè)大學 軟件學院 , 西安 710065; dgp_2003 ; 西北工業(yè)大學計算機學院 1, 西安 710072摘 要 詳細論述了 C+Builder 與 Matlab 混合編程的兩種實現(xiàn)方法 。 一是在 C+Builder 中使用 COM 技術調(diào)用 Matlab 數(shù)據(jù) 。 二是脫離 Matlab 環(huán)境 , 通過動態(tài)連接庫方式實現(xiàn)對 Matlab 工具箱函數(shù)的調(diào)用 。 分別給出一個詳細的例子 。 這兩種方法都充分發(fā)揮了 C+Builder 與 Matlab 的優(yōu)勢 , 為科學研
2、究和工程技術提供了更強的技術支持 。關鍵詞C+Builder MatlabCOM 組件Mediva 軟件平臺 DLL中圖法分類號 TP312文獻標識碼BMatlab 是一個高度集成的系統(tǒng) , 它把數(shù)值計算和可視化環(huán)境集成到一起 , 非常直觀 , 而且提供了 大量的函數(shù) , 使其越來越受到人們的喜愛 。 它集科 學 計 算 、 圖 象 處 理 、 聲 音 處 理 于 一 體 , 具 有 極 高 的 編程效率 。 近年來 , Matlab 已經(jīng)從最初的 “ 矩陣實驗 室 ” 滲透到科學與工程計算的多個領域 , 在自動控 制 、 信號處理 、 神經(jīng)網(wǎng)絡 、 模糊邏輯 、 小波分析等多 個方向 , 都
3、有著廣泛的應用 。 Borland C+Builder 是 一種新穎的可視化編程語言 , 它既具有 C+語言的 靈活性 、 高效性 , 又具有可視化編程的便利性 , 功能 豐富強大 , 界 面友好 , 使用 十分方便 , 但是在矩陣 運 算 、 數(shù)值分 析 、 工程計算 等方面 , 功能 則稍嫌不 足 ; 在工程應用中 , 我們一般用 C+Builder 語言編寫應 用 程 序 , 實 現(xiàn) 交 互 界 面 、 數(shù) 據(jù) 采 集 和 端 口 操 作 等 , 但 C+Builder 在數(shù)值處理分析和算法工具等方面 , 其效率遠遠低于 Matlab 語言 。 在準確方便地繪制數(shù) 據(jù) 圖 形 方 面 ,
4、 Matlab 語 言 更 具 有 無 可 比 擬 的 優(yōu) 勢 。 此外 , Matlab 還提供功能強大的工具箱 。但 Matlab 的 缺點是不能實現(xiàn)端口操作和實時控制 。 因此 , 若能 將兩者結(jié)合運用 , 實現(xiàn)優(yōu)勢互補 , 將大大提高工作 效率 。1C+Builder 與 Matlab 混合編程的實現(xiàn)方法C+Builder 與 Matlab 混合編程有兩種實現(xiàn)方法 。一種是基于 Matlab 環(huán)境支持 , 通過在 C+Builder 中使用 COM 技術調(diào)用 Matlab 數(shù)據(jù)實現(xiàn) ; 另一種則是完全 脫離 Matlab 環(huán)境 , 通過動態(tài)連接庫方式實現(xiàn)對 Matlab 工 具 箱 函
5、 數(shù) 的 調(diào) 用 , 這 可 以 通 過 一 種 開 發(fā) 平 臺Mediva 來實現(xiàn) 。 相對來說 , 前者的限制因素較多 , 而后者則較為方便靈活 。1.1COM 方法的實現(xiàn)COM 是組件對象模型的簡稱 , 是 Windows 對象 的二進制標準 。 為 Windows 提供了統(tǒng)一的 , 面向?qū)ο蟮?, 可擴充的通訊協(xié)議 。 這意味著描述一個對象的可執(zhí)行代碼 (.dll 或 .exe 文件的代碼 可以被其它對象 執(zhí)行 。 即使兩個對象使用不同語言來編寫的 , 他們 可以用 COM 標準來進行通信 。 在 C+Builder 中使用COM 技術調(diào)用 Matlab 數(shù)據(jù)實現(xiàn)方法如下 :(1 根據(jù)
6、實際需要在 Matlab 中開發(fā)算法 , 寫成函數(shù)文件的形式 (注意 :不能是腳本文件 , 必須是函數(shù) 文件 ;(2 利用 Matlab 的 COM Builder 將 M 函數(shù)編譯為COM 組件 ;(3 在 C+Builder 中調(diào)用 COM 組件 , 得到輸出 。下面給出一個實例加以分析 。問題 :實驗對象為 :G (s =1/(Js2+Bs 在 Matlab 中 采用 M 函數(shù)的形式 , 利用 ODE45求解對象方程 , 然后 在 C+Builder 中進行仿真 , 跟蹤給定信號 。2005年 12月 2日收到第一作者簡介 :杜高鵬 (1980 , 男 , 陜西西安人 , 碩士研究生 ,
7、 研究 方向 :計算機網(wǎng)絡及數(shù)據(jù)庫 。*通訊作者簡訊 :翟正軍 , (1965 , 男 , 教授 , 碩士生導師 。 研究方 向 :計算機測控與仿真 。第 6卷 第 7期 2006年 4月1671-1815(2006 07-0886-04科 學 技 術 與 工 程Science Technology and Engineering Vol. 6No. 7Apr. 20062006Sci. Tech. Engng. c杜高鵬 , 等 :C+Builder 與 Matlab 混合編程兩法 7期1 在 Matlab 中編寫程序 genzong.m 和 cha.m 其代碼如下 :function b=
8、genzong (a ;xk=a(1 ; a(2;para=a(3 ; ts=a(4 ; tspan=0ts;tt,xx=ode45(' cha' ,tspan,xk,para ;xk=xx(length(xx, ; ;y=xk(1 ; y1=xk(2 ;b(1=y ; b(2=y1;以及對象方程 :function dy=cha(t,y,flag,parau=para ; J=0.0067; B=0.1;dy=zeros (2, 1 ; dy (1 =y (2 ; dy (2 =-B/J*y (2 +u/J ;2 用 Matlab 的 COM Builder 制 COM 組件
9、首先 , 設置 Matlab COM Builder 所使用的外部編 譯器 , 在 Matlab 命令窗口下輸入 mbuild setup , 然后選 擇合適的編譯器 , 在這里選擇 Microsoft Visual Studio 6.0, 其它的按照提示即可 。 其次 , 在 Matlab 命令窗口 下輸入命令 comtool , 啟動 COM Builder 的圖形用戶界 面 , 然 后 使 用 File->New Project 建 立 新 工 程 , 在 Component name 中輸入要生 成的 COM 組件的 名字 , 例如需輸入名字 xj 。 通過 Add 和 Remo
10、ve 按鈕可以方 便地為組件添加和刪除類 。 在這里 , 筆者為這個組 件添加一個類 xj 。 在 Compile Code in 里面推薦選擇 C 。 如果要使用 Matlab 的圖形庫 , 那么就要在 Compile options 中 選 中 Use Handle Graphics Library 。 選 中 Show verbose output 可以在編譯的時候輸出 詳細的 過程信息 。 一個組件可以包含許多類 , 添加的方法 就是在 Project Settings 里面添加 。 給一個類添加一個 方法非常簡單 :先選中一個類 , 然后使用按鈕 Add File 添加 M 文件就可
11、以了 , 該 M 文件的名稱就是 COM 組件的方法 。3 在 C+Builder 中使用生成的 COM 組件點擊 C+Builder 的 Project->Import Type Library , 在 上 面 的 窗 口 中 找 到 xj 1.0Type Library Version 1.0, 點擊 Install 按鈕 。 此時就在 AxtiveX 控件頁安裝 了 xj 控件 , 建立 一個工程文 件 project1, 在 Form 上 放 置一個 IstripChart 控件 , 一個 Timer 控件 (運行時不可 見 和兩個按鈕控件 Button1, Button2。 雙
12、擊 Button1, 添加如下代碼 :void _fastcall TForm1:Button1Click(TObject *Senderxk1=0; xk2=0;para=0; ts=0.001; EK_1=0; k=0;Timer1->Enabled=true ;雙擊 Timer1, 添加如下代碼 :void _fastcall TForm1:Timer1Timer(TObject *Senderk=k+1;SDZ=sin(2*3.1415*k*ts ; /給定信號double src4; double out2; /傳出數(shù)據(jù)數(shù)組SAFEARRAY InSafeArray ; /用于
13、傳入的安全數(shù)組TVariant a ; TVariant b ; /傳入傳出 COM 的變體src0=xk1; src1=xk2; src2=para ; src3=0.001; /tsInSafeArray.cDims=1; /設置輸入安全數(shù)組InSafeArray.fFeatures=FADF_AUTO ;InSafeArray.cbElements=sizeof(float ;InSafeArray.rgsabound0.lLbound=0;InSafeArray.cLocks=1;InSafeArray.rgsabound0.cElements=4;InSafeArray.pvData
14、=src ;a. SetSAFEARRAY(&InSafeArray ;a.vt=VT_R8|VT_ARRAY ;xj1->genzong(1,&b,a ; /調(diào)用 COM 的方法memcpy(out,b.parray->pvData,2*sizeof(double ;xk1=out0; xk2=out1; /傳出數(shù)據(jù)EK=SDZ-xk1; dEK=(EK-EK_1/0.001; U=20*EK+0.5*dEK ; if (U>=10 U=10; if (U<=-10 U=-10;para=U ; EK_1=EK ;iStripChart1->Be
15、ginUpdate( ; /仿真曲線的繪制int TimeIndex=iStripChart1->AddIndexTime(Now( ;iStripChart1->ChannelData0TimeIndex=xk1;iStripChart1->ChannelData1TimeIndex=SDZ ;iStripChart1->EndUpdate( ;雙擊 Button2, 添加如下代碼 :void _fastcall TForm1:Button2Click(TObject *SenderTimer1->Enabled=false ;運行程序 , 得到仿真界面 。用
16、COM 方法實現(xiàn) C+Builder 與 Matlab 混合編程 簡單易懂 。 如果用戶運行時想要脫離 Matlab 環(huán)境 , 只 需 在 Matlab 中 通 過 菜 單 Component ->Package Component 將組件打包即可 。1.2Mediva 軟件平臺Mediva 是 Mathtools 公司推出的一種 Matlab 編譯 開發(fā)軟件平臺 , 提供對 Matlab 程 序文件 (M 文件 的 解釋執(zhí)行和開發(fā)環(huán)境支持 。 Mediva 軟件平臺本身的 功能相當強大 , 提供近千個 Matlab 的基本功能函數(shù) , 通過必要的設置 , 就可以直接實現(xiàn)與 C+的混合編
17、 程 , 而不必再依 賴 Matlab ; 同時 , Mediva 還提 供編譯 887科 學 技 術 與 工 程 6卷轉(zhuǎn)換功能 , 能夠?qū)?Matlab 函數(shù)或編寫的 Matlab 程序轉(zhuǎn) 換為 C+形式的 DLL , 從而實現(xiàn)脫離 Matlab 環(huán)境對 Matlab 函數(shù)和過程的有效調(diào)用 , 這樣就有可能實現(xiàn) 對 Matlab 強大的工具箱函數(shù)的利用 。Mediva 的缺點是 C+與 Matlab 混合編寫的應用 軟件必須攜帶必要的 DLL , 從而增大了軟件的體積 (約 4M , 同時 也不能對所 有的 Matlab 函數(shù)提 供 支 持 , 例如采用類庫進行設計的部分函數(shù) 。 但盡管如
18、此 , 對于控制系統(tǒng)計算機設計 、 分析的工作來說 , Mediva 仍不失為一個好的工具 。 其實現(xiàn)方式和步驟 如下 :本文假設已經(jīng)安裝了 Mediva 軟件或已經(jīng)得到必 要的兩個動態(tài)連接庫 mdv4300.dll 和 ago4300.dll 。 1.2.1Lib 文件的生成在 Dos 下用 C+Builder 中的 Implib.exe , 通過命令 生成 mdv4300.lib :implib mdv4300.lib mdv4300.dll , 將上述兩個 DLL 文件和此 Lib 文件拷貝到當前目錄 下 。1.2.2實現(xiàn)與 Matlab 的混合編程Matlab.h 包含了 Mediva
19、 中所有類型 、 常量 、 函數(shù) 的說明和定義 , 必須將此頭文件放于程序 的第一 行 。 Mediva 給出的 Matlab 函數(shù)形式并不特殊 , 如繪 線函數(shù) Plot , 在 Mediva 中說明為 :Mm DLLI plot (cMm varargin ; varargin 與 Matlab 中 的 意 義 是 一 樣 的 , 與 輸入變量的個數(shù)相對應 。 所有可以直接使用 的函 數(shù)都在 Matlib.h 頭文件中定義 , 而在 mdv4300.dll 中 實現(xiàn) 。但在 C+Builder 中使用 Mediva 提 供 的 Matlab 函 數(shù)的格式 , 與 Matlab 編程稍有不同
20、 , 這主要體現(xiàn)在 C+中必須進行必要的說明上 。 例如要用繪線函數(shù) Plot 來繪制數(shù)組 x 100的紅色圖線 。 在 Matlab 中調(diào)用 為 Plot (x , 'r' ; 在 C+中 調(diào) 用 則 為 :Plot (CL (x , TM ("r" , 其中 CL 是一個關鍵字 , 是多變量輸入時所必 須使用的 , 用以指明調(diào)用的變量 ; 而 TM 則指明 , 這是 一個字符 。下面給出一個示例程序 , 其功能是對一個 1024點的輸入數(shù)組進行 FFT 變換 , 并繪制變換后頻譜實 部的火柴桿圖 , 最后將原數(shù)據(jù)和變換后的數(shù)據(jù)寫入 數(shù)據(jù)文件中 。#inc
21、lude "matlib.h"/必須包含的頭文件#include vcl.h #pragma hdrstop#include "TryMatcomU.h"#pragma package(smart_init#pragma resource "*.dfm"TForm1*Form1;_fastcall TForm1:TForm1(Tcomponent*Owner:Tform(Ownervoid _fastcall TForm1:Button1Click(Tobject *Senderint k=0;initM (MATCOM_VERSIO
22、N ; /必須進行的初始化Mm cur1,cur2; /定義變量cur1=zeros (128 ; cur2=zeros (128 ; /變量初始化for (k=1; k<=128; k+cur1.r (k =randM ( ; /生成一個隨機數(shù)列figure (1 ;plot (cur1 ; /圖形顯示該數(shù)列cur2=fft(cur1,128 ; /做 128點 fft 變換figure(2 ; /繪制 fft 變換后實部的火柴桿圖 , 注意此處多變量輸 入的格式stem(CL(cur1,real(cur2,TM("r" ;fid=fopen(filename,mo
23、de,format opensexitM( ; /退出調(diào)用如果完全使用 C+來實現(xiàn)本程序的工作 , 其代 碼將超過 300行 ! 由此可以看出 , C+Builder 與 Matlab 函數(shù)的混合編程可以帶來多么大的方便 !1.2.3變量內(nèi)部狀態(tài) /數(shù)據(jù)的觀察方法Mediva 使用的所有變量均定義為 Mm 類型 。 如果 在 C+Builder 中觀察 Mm 類型變量的內(nèi)部狀態(tài) /數(shù)據(jù) , 要稍麻煩一些 。 但在調(diào)試程序時 , 這又是不可避免 的一步 , 這里舉例給出變量觀察的方法 。例如對上面生成的 cur2數(shù)列進行觀察 :*cur2.pr 0.1892cur2(1 的實部*cur2.pi
24、0.0013cur2(1 的虛部2結(jié)語(1 基于 Matlab 環(huán)境支持 , 通過在 C+Builder 中 使 用 COM 技 術 調(diào) 用 Matlab 數(shù) 據(jù) 實 現(xiàn) C+Builder 與 Matlab 的混合編程的優(yōu)勢很明顯 , 在 C+中不易編寫 的求解常微分方程 , 在 MATLAB 中只需寥寥數(shù)行便 能求解 , 只需在 C+Builder 中寫好數(shù)據(jù)接口便能實 現(xiàn)仿真 。(2 Matlab 提供了可外部連接的 DLL 文件 , 通過888杜高鵬 , 等 :C+Builder 與 Matlab 混合編程兩法7期 Two Methods of C+Builder and the Ma
25、tlab Mix ProgrammingDU Gaopeng , ZHAI Zhengjun 1*, XU Jun(Software College , Northwestern Polytechnical University , Xi'an 710065; Computer College ofNorthwestern Polytechnical University 1, Xi'an 710072Abstract Two realization methods of C+Builder and the Matlab mix programming are elaborat
26、ed in detail. First , transfer the Matlab data by useing the COM technology in C+Builder ; Second , separating from the Matlab environment , transfer Matlab toolbox function through dynamic connection storehouse way are presented.And a detail example is given. These two kinds of methods both gave fu
27、ll play to C+Builder and advantage of Matlab , and provided the stronger technical support for the scientific research and the project technology. Key words C+Builder Matlab Com module Mediva software platform DLL 將其轉(zhuǎn)換為相應的 Lib 文件 , 并加以必要的設置 , 就可 以在 C+Builder 中直接 進行 Matlab 函數(shù) 調(diào)用 , 實現(xiàn)C+Builder 語言與 Mat
28、lab 語言的混合編程 。參考文獻1Borland/Inprise , 梁志剛 , 等譯 . C+Builder 5開發(fā)人員指南 . 北京 :機械工業(yè)出版社 , 20002北 京 寶 蘭 -英 博 思 信 息 技 術 有 限 公 司 . Borland C+Builder 4標準教程 . 北京 :清華大學出版社 , 20003Hollingworth J 等 , 著 . 康向東 , 等譯 . C+Builder 5程序設計大 全 . 北京 :機械工業(yè)出版社 , 20024羅建軍 . Matlab 教程 . 北京 :電子工業(yè)出版社 , 20055潘愛民 . COM 原理與應用 . 北京 :清華大
29、學出版社 , 2005!An Effective Audit Mechanism for Detecting Authority Promoting AttackWU Hao , JIANG Xiangtao(School of Computer and Communication , Hunan University , Changsha 410082Abstract Providing a new aduiting mechanism for detecting authority promoting attack , based on modifing Linux kernel , adds aduiting mechanism in system call-execve. Through monitor the changes of process's real user ID , effective ID and save set-user-ID , i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 班級自我管理提升計劃
- 急診安全文化建設實踐計劃
- 實驗室安全規(guī)范與培訓計劃
- 學校教學活動安排計劃
- 秘書在團隊溝通中的角色計劃
- 小班三維課程與教育理念實踐計劃
- 2025年美司那項目建議書
- 2025年中國異構計算行業(yè)市場運行態(tài)勢及發(fā)展趨勢預測報告-智研咨詢發(fā)布
- 2025年多通道腦電圖機項目建議書
- 淮安市2024-2025學年上學期高一期末考試地理試題(含答案)
- 2024年國家基本公衛(wèi)-老年人健康管理-考試復習題庫(含答案)
- 第三講:虹吸管及水泵的水力計算
- 網(wǎng)絡系統(tǒng)集成(第二版) 課件第一章 網(wǎng)絡系統(tǒng)集成緒論
- 口腔科院感知識培訓針刺傷
- 土地管理學課件
- 真菌性角膜炎的護理
- 《認識人民幣》完整版
- 工程施工風險研判報告及安全風險管控防范應對措施
- 科普作家協(xié)會會員
- ptmeg生產(chǎn)工藝技術
- 新型顯示行業(yè)Mini LED Micro LED Micro OLED多點開花產(chǎn)業(yè)鏈如何聚焦
評論
0/150
提交評論