



全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
收稿日期 2006 04 11 作者簡(jiǎn)介 王紅衛(wèi) 1947 男 湖南衡陽(yáng)人 南華大學(xué)數(shù)理學(xué)院講師 主要研究方向 力學(xué)教學(xué)和科研工作 第 20 卷第 2 期南華大學(xué)學(xué)報(bào) 自然科學(xué)版 Vol 20 No 2 2006 年 6 月Journal of Nanhua University Science and Technology Jun 2006 文章編號(hào) 1673 0062 2006 02 0076 03 Visual c 中 MATLAB 數(shù)學(xué)函數(shù)庫(kù)的封裝 王紅衛(wèi)1 肖建清1 2 1 南華大學(xué) 數(shù)理學(xué)院 湖南 衡陽(yáng) 421001 2 中南大學(xué) 資源與安全工程學(xué)院 湖南 長(zhǎng)沙 410083 摘 要 在土木 建筑等工程領(lǐng)域的數(shù)值計(jì)算中 VC 和 MATLAB 的混合編程可以 充分發(fā)揮各自的優(yōu)勢(shì) 提高計(jì)算效率 節(jié)省大量的人力物力 本文簡(jiǎn)要介紹了 MAT LAB 與 VC 混合編程的幾種方法 提出了在 VC 環(huán)境中封裝 MATLAB 數(shù)學(xué)函數(shù)庫(kù) 的基本思路 并通過(guò)一個(gè)實(shí)例 演示了 VC 中構(gòu)建數(shù)值計(jì)算環(huán)境以及封裝 MAT LAB 數(shù)學(xué)函數(shù)庫(kù)的具體步驟 關(guān)鍵詞 VC MATLAB 數(shù)學(xué)函數(shù)庫(kù) 混合編程 中圖分類號(hào) TP311 文獻(xiàn)標(biāo)識(shí)碼 B Encapsulation of MATLAB Math Library in Visual c WANG Hong wei1 XIAO Jian qing1 2 1 School of Mathematics and Physics Nanhua University Hengyang Hunan 421001 China 2 College of Resource and Safety Engineering Central South University Changsha Hunan 410083 China Abstract In the field of civil engineering and architecture engineering etc active program ming with VC and MATLAB can make the most of respective advantages improve computational efficiency and save a lot of human and material resources In this paper sev eral methods for active programming with VC and MATLAB are discussed briefly and an essential way of encapsulating the MATLAB math library in the environment of VC is advanced Meanwhile via an example the detailed steps of constructing the environment of numerical calculation and encapsulating the MATLAB math library are provided Key words VC MATLAB math library active programming 0 前言 隨著工程實(shí)踐中計(jì)算機(jī)的普及 MATLAB 強(qiáng) 大的數(shù)值運(yùn)算能力得到了廣泛的關(guān)注 其開(kāi)放式 的構(gòu)架模式 讓人們可以將自己開(kāi)發(fā)的優(yōu)秀的應(yīng) 用程序集加入到 MATLAB 工具的行列 這樣 許 多領(lǐng)域前沿的研究者和科學(xué)家都可以將自己的成 果集成到 MATLAB 之中 被全人類繼承和利用 因此 MATLAB 從發(fā)布之日至今的 20 多年中 一 直保持著旺盛的生命力 但是 MATLAB 的 m 代碼 是解釋性執(zhí)行的 程序執(zhí)行效率低 對(duì)大規(guī)模的數(shù) 值計(jì)算和分析力不從心 而且 MATLAB 程序不能 脫離其運(yùn)行環(huán)境 因此不適于開(kāi)發(fā)商用軟件 如果 能將 MATLAB 強(qiáng)大的數(shù)值運(yùn)算核心 MATLAB 數(shù) 學(xué)函數(shù)庫(kù) 打包后用于開(kāi)發(fā)新的應(yīng)用環(huán)境 那么 工程技術(shù)人員就可以節(jié)省大量的底層開(kāi)發(fā)時(shí)間 可以將所有的精力都集中到工程實(shí)際問(wèn)題的解決 中 而 C 語(yǔ)言代碼執(zhí)行效率比 MATLAB 高得多 而且在開(kāi)發(fā)中結(jié)合 c 語(yǔ)言的可重用特性 可 隨意地將代碼植入到任何一個(gè)自主開(kāi)發(fā)的應(yīng)用程 序中 故而 在計(jì)算機(jī)上編程實(shí)現(xiàn)工程實(shí)際問(wèn)題的 數(shù)值計(jì)算和仿真時(shí) 如果結(jié)合 MATLAB 和 VC 的優(yōu)點(diǎn) 取長(zhǎng)補(bǔ)短 則可以縮短開(kāi)發(fā)周期 取得 更好的效果 1 VC 與 MATLAB 混合編程 雖然 MATLAB 是一個(gè)完全獨(dú)立的編程和數(shù) 據(jù)運(yùn)算的集成環(huán)境 使用它可以方便地做很多工 作 但是 很多時(shí)候僅僅靠 MATLAB 環(huán)境還是不 能很好地完成任務(wù) 比如說(shuō) MATLAB 程序中出現(xiàn) 循環(huán)時(shí) MATLAB 運(yùn)行起來(lái)非常吃力 速度很慢 以前許多用其它語(yǔ)言編寫的算法程序如果要移植 到 MATLAB 環(huán)境中運(yùn)行 就需要重新編寫為 M 文 件 浪費(fèi)許多人力和物力 別的編程環(huán)境如果要使 用 MATLAB 的某些優(yōu)秀的功能時(shí) 又找不到合適 的辦法 因此 MATLAB 與外部的數(shù)據(jù)和程序交互 是很有意義的 在這樣的背景之下 MATLAB 應(yīng)用 程序接口應(yīng)時(shí)而生 MATLAB 應(yīng)用程序接口是一 個(gè)功能完善的外部程序接口函數(shù)庫(kù) 通過(guò)這些函 數(shù)可以完成與 C FORTRAN 等語(yǔ)言之間的聯(lián)合編 程 MATLAB 應(yīng)用程序接口包括以下幾個(gè)方面的 內(nèi)容 通過(guò) MEX 文件在 MATLAB 環(huán)境中調(diào)用 別的語(yǔ)言編寫的程序和算法 其特點(diǎn)是 對(duì)于早期 用 C 語(yǔ)言等其它高級(jí)語(yǔ)言編寫的算法和程序 不 需要重新將其編寫成 MATLAB 中的 M 文件 只要 加入一個(gè)被 MATLAB 所識(shí)別的入口函數(shù) mex Function 最后編譯形成一個(gè)標(biāo)準(zhǔn)的動(dòng)態(tài)鏈接 庫(kù) Windows 系統(tǒng)中為 DLL 所以 MATLAB 調(diào)用 MEX 文件的實(shí)質(zhì)就是動(dòng)態(tài)鏈接庫(kù)的標(biāo)準(zhǔn)調(diào)用 通過(guò) MAT 文件實(shí)現(xiàn) MATLAB 與別的編程環(huán)境的 數(shù)據(jù)交互 MAT 文件是 MATLAB 數(shù)據(jù)存儲(chǔ)的默認(rèn) 文件格式 可以使用 MAT 文件來(lái)導(dǎo)入數(shù)據(jù)到 MATLAB 中和從 MATLAB 導(dǎo)出數(shù)據(jù) 它為 MAT LAB 與其他軟件平臺(tái)交流數(shù)據(jù)提供了一種機(jī)制 通過(guò) MATLAB 計(jì)算引擎實(shí)現(xiàn)別的編程環(huán)境調(diào) 用 MATLAB 計(jì)算模塊 MATLAB 計(jì)算引擎允許用 戶在自己的應(yīng)用程序中對(duì) MATLAB 函數(shù)進(jìn)行調(diào) 用 將 MATLAB 作為一個(gè)計(jì)算引擎使用 讓其在 后臺(tái)運(yùn)行 這樣可以簡(jiǎn)化前臺(tái)用戶程序的設(shè)計(jì)任 務(wù) 通過(guò) MATLAB 編譯器建立脫離 MATLAB 環(huán)境獨(dú)立運(yùn)行的應(yīng)用程序 MATLAB 編譯器是 MATLAB 提供的一個(gè)非常有用的工具 通過(guò)它可 以把 M 文件編譯成 C 或 C 代碼 從而在 C 或 C 語(yǔ)言中進(jìn)行調(diào)用 產(chǎn)生脫離 MATLAB 但仍 能運(yùn)用 MATLAB 數(shù)值計(jì)算功能的獨(dú)立應(yīng)用程序 2 VC 中數(shù)值計(jì)算環(huán)境的構(gòu)建 工程實(shí)際中 很多時(shí)候我們都會(huì)涉及到大規(guī) 模的矩陣計(jì)算問(wèn)題 對(duì)于熟悉 C 語(yǔ)言編程的工程 技術(shù)人員來(lái)說(shuō) MATLAB 數(shù)據(jù)的列向存儲(chǔ)機(jī)制與 C 語(yǔ)言的橫向存儲(chǔ)機(jī)制經(jīng)常引發(fā)一些低級(jí)別的錯(cuò) 誤 而這些錯(cuò)誤又是難以檢查的 而且 如果我們 想使用 MATLAB 強(qiáng)大的計(jì)算模塊時(shí) 還必須安裝 一個(gè)如此龐大 MATLAB 應(yīng)用程序的話 考慮到計(jì) 算機(jī)的運(yùn)算速度等等各方面的因素 許多人最終 都放棄了這種想法 但是 如果能將整個(gè)的 MAT LAB 計(jì)算模塊重新建立在自己的數(shù)據(jù)結(jié)構(gòu)之上 的話 那么 不僅可以按照自己的思維來(lái)組織工程 實(shí)際中的信息 也可以利用 C 語(yǔ)言的重用機(jī) 制 將此計(jì)算模塊移植到任何一個(gè)自主開(kāi)發(fā)的應(yīng) 用程序當(dāng)中 提高工作效率 為了說(shuō)明 以下建立一個(gè)簡(jiǎn)單的矩陣類 ma trix h matrix cpp typedef struct 定義矩陣元素 int iRow iColum 元素所在行 列位置 double dValue 元素值 MatrixElem class Matrix friend mxArray DataConversion Matrix m 自定義數(shù)據(jù)轉(zhuǎn)換成 MATLAB 數(shù)據(jù) friend Matrix DataConversion mxArray m MATLAB 數(shù)據(jù)轉(zhuǎn)換成自定義數(shù)據(jù) friend Matrix Calculate Matrix A Ma trix B 求解線性方程組 private int iNumRow iNumColum 矩陣的大 小 行 列數(shù)目 MatrixElem elems 結(jié)構(gòu)指針 指向存 77第 20 卷第 2 期 王紅衛(wèi)等 Visual c 中 MATLAB 數(shù)學(xué)函數(shù)庫(kù)的封裝 貯矩陣元素的地址 矩陣類作為其它類的一個(gè)基類 可以實(shí)現(xiàn)兩 維數(shù)組的存貯 運(yùn)算符的重載更方便了矩陣類的 使用 下面以其中的一個(gè)函數(shù) Calculate 為例來(lái) 演示具體的封裝方法 3 MATLAB 數(shù)學(xué)函數(shù)庫(kù)的封裝 在 MATLAB 系統(tǒng)中用 mex setup 命令和 mbuild setup 命令來(lái)配置 Microsoft Visual C C version 6 0 編譯器時(shí) 將自動(dòng)安裝 MATLAB Visual Studio Add in 安裝 Add in 后將在 VC 的新 建工程窗口中加入一項(xiàng) MATLAB Project Wizard 可以引導(dǎo)開(kāi)發(fā)人員選擇建立四種與 MATLAB 交 互的 VC 工程 安裝 Add in 后還將在 VC 中增加 一組工具欄 其中包括四個(gè)按鈕 功能分別為 在 工程中加入 文件 打開(kāi) MATLAB 矩陣值查看窗 口 打包發(fā)布向?qū)?MATLAB Add in 幫助 利用其 中的打包發(fā)布向?qū)Э梢詫⒐こ涛募约肮こ讨杏?到的 MATLAB 函數(shù)庫(kù)和運(yùn)行庫(kù)打成一個(gè)壓縮包 以便于發(fā)布 VC 中的 MATLAB 工程向?qū)Ш痛虬?發(fā)布功能給 VC 和 MATLAB 的混合編程帶來(lái)了不 少便利 是非常實(shí)用的工具 通過(guò)它 可以方便地 應(yīng)用 C 語(yǔ)言 mex 程序 也可以將 M 代碼文件嵌入 到 VC 工程中 還可以生成脫離 MATLAB 環(huán)境而 獨(dú)立運(yùn)行的程序和動(dòng)態(tài)鏈接庫(kù)文件 3 1 MATLAB 中編譯源 m 文件 先在 MATLAB 中編寫如下 m 文件 solver m function x solver k y x k y 用以求解線性方程 在 MATLAB 環(huán)境中執(zhí)行 mcc t L c solver m 命令 生成 solver c 和 sol ver h 兩個(gè)文件 3 2 VC 中設(shè)置編譯環(huán)境 建立一個(gè) VC 工程 如 Example 首先設(shè)置 VC 頭文件搜索路徑和庫(kù)文件搜索路徑 從 Tools Options 中選擇 Directories 屬性頁(yè) include files 添 加頭文件搜索路徑 extern include 和 extern include cpp 和庫(kù)文件搜索路徑 extern lib win32 和 extern lib win32 microsoft MS VC60 然后 從 Project Settings 中選擇 C C 屬性頁(yè) 在 Preprocessor definitions 編輯框中添加 以下 3 個(gè)字符串 MSVC IBMPC MSWIND 再選擇 Link 屬性頁(yè) 添加以下庫(kù)文件 libmmfile lib lib matlb lib libmx lib libmat lib libmatpm lib sgl lib libmwsglm lib 3 3 VC 中函數(shù)的封裝 將 solver c 和 solver h 拷貝到 Example 目錄 下并向工程添加這兩個(gè)文件 在 matrix h 文件的 頭部加入 include solver h 和 include mat h 然后修改實(shí)現(xiàn)函數(shù) Matrix Matrix Calculate const Matrix A const Matrix B 求解 AX B 線性方程組 int m1 n1 m2 n2 m1 A GetRow 獲得矩陣的行數(shù) n1 A GetColum 獲得矩陣的列數(shù) m2 B GetRow n2 B GetColum mxArray x1 NULL 構(gòu)造 MATLAB 矩 陣 mxArray x2 NULL mxArray result NULL x1 DataConversion A 將自定義矩陣 轉(zhuǎn)換成 MATLAB 矩陣 x2 DataConversion B result mlfSolver x1 x2 調(diào)用函數(shù)計(jì)算 線性方程組 Matrix X X DataConversion result 將計(jì)算結(jié)果 轉(zhuǎn)換成自定義矩陣類型 mxDestroyArray x1 mxDestroyArray x2 mxDestroyArray result return X 返回結(jié)果數(shù)據(jù) 4 結(jié)束語(yǔ) 如何最大限度地利用現(xiàn)有軟件開(kāi)發(fā)平臺(tái) 尤 其是跨平臺(tái)進(jìn)行專業(yè)軟件的開(kāi)發(fā) 這是一個(gè)值得 思考和研究的問(wèn)題 充分高效的利用不同軟件平 臺(tái)各自的優(yōu)勢(shì) 勢(shì)必能有效的縮短開(kāi)發(fā)周期 提高 系統(tǒng)性能 這無(wú)疑對(duì)專業(yè)軟件的開(kāi)發(fā)具有重要意義 下轉(zhuǎn)第 82 頁(yè) 87南華大學(xué)學(xué)報(bào) 自然科學(xué)版 2006 年 6 月 圖 2 支架作用荷載與鋼管樁反力關(guān)系 Fig 2 Loads on the scaffolding and reaction force of steel pipe piles 圖 3 橫向工字鋼上鋼管軸向應(yīng)力分布圖 Fig 3 Axial stress of steel pipes 5 結(jié)論 由鋼管樁支撐的支架體系 具有傳遞和分配 荷載的作用 靠近鋼管樁支撐位置的鋼管軸力大 遠(yuǎn)離鋼管樁支撐位置的鋼管軸力小 在計(jì)算支架 體系承載力時(shí)鋼管軸力均勻分布的假定不成立 斜桿應(yīng)盡量沿上游與下游對(duì)稱布置 同時(shí)要將支 架體系作為整體結(jié)構(gòu)進(jìn)行考慮 縱橫梁的共同作 用使支架體系承載力大大提高 參考文獻(xiàn) 1 劉學(xué)慶 大跨連續(xù)槽形梁混合支架體系的設(shè)計(jì)與施 工 J
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Cefadroxil-13C6-BL-S-578-sup-13-sup-C-sub-6-sub-生命科學(xué)試劑-MCE
- 江門職業(yè)技術(shù)學(xué)院《數(shù)字合成基礎(chǔ)(AE)》2023-2024學(xué)年第一學(xué)期期末試卷
- 武漢晴川學(xué)院《理論與實(shí)踐(二)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江長(zhǎng)征職業(yè)技術(shù)學(xué)院《案例與論文寫作》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024-2025學(xué)年宿州市重點(diǎn)中學(xué)數(shù)學(xué)七年級(jí)第一學(xué)期期末學(xué)業(yè)水平測(cè)試模擬試題含解析
- 江蘇省南通港閘區(qū)五校聯(lián)考2024-2025學(xué)年化學(xué)九年級(jí)第一學(xué)期期末監(jiān)測(cè)試題含解析
- 大連海洋大學(xué)《全科醫(yī)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 企業(yè)資金流動(dòng)的審計(jì)策略分析
- 遼寧特殊教育師范高等專科學(xué)?!冬F(xiàn)代食品營(yíng)養(yǎng)與安全自科類》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025屆北京理工大附中分校七年級(jí)數(shù)學(xué)第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 濟(jì)南世創(chuàng)友聯(lián)有機(jī)硅科技有限公司年產(chǎn)1000 噸特種硅彈性體項(xiàng)目環(huán)評(píng)資料環(huán)境影響
- 標(biāo)準(zhǔn)檢驗(yàn)指導(dǎo)書(SIP)-鈑金
- DB11 T 627-2009 好氧降解法治理生活垃圾非衛(wèi)生填埋場(chǎng)監(jiān)測(cè)技術(shù)規(guī)范
- 職業(yè)中等專業(yè)學(xué)校計(jì)算機(jī)應(yīng)用專業(yè)課程標(biāo)準(zhǔn)
- 《工業(yè)戰(zhàn)略性新興產(chǎn)業(yè)分類目錄(2023)》
- 海灘沖浪課程行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 圍墻維修施工方案(3篇)
- 設(shè)備安裝調(diào)試服務(wù)合同
- 壓瘡醫(yī)療護(hù)理
- 三農(nóng)村能源利用方案手冊(cè)
- 《高血壓腎損害》課件
評(píng)論
0/150
提交評(píng)論