




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第13章MATLAB外部程序接口技術13.1MATLAB與Office軟件的混合使用13.2MATLAB數據接口13.3MATLAB與其他語言的接口13.1MATLAB與Office軟件的混合使用為了在Word環境下調用MATLAB的計算功能,需要調用MATLAB的Notebook軟件工具,它為Word提供M-Book.dot模板。利用該模板創建的Word文檔通常稱為M-Book文檔。1.Notebook的安裝與啟動>>notebook-setup13.1.1在Word中使用MATLAB2.Notebook菜單項M-Book模板定義了Word與MATLAB進行通信的宏指令、文檔樣式和工具欄。3.單元的使用在MATLABNotebook中,凡是在Word與MATLAB之間進行傳遞的內容稱為單元(cell),它是Notebook與MATLAB交互的基本單位。(1)輸入輸出單元定義輸入單元的方法輸入單元執行后產生藍色的輸出單元。(2)自動初始化單元(3)單元組4.計算區計算區(calczone)是一個由普通Word文本、輸入單元和輸出單元組成的連續區,用于描述某個具體的作業或問題。在計算區里,用戶可以根據描述問題的需要,安排段落、標題、分欄,而不受計算區外的有關格式的約束。定義計算區的方法13.1.2在Excel中使用MATLAB通過SpreadsheetLink,可以在Excel工作區和MATLAB工作空間之間進行數據交換,也可以使用插件方式在Excel中調用MATLAB的算法。1.SpreadsheetLink的安裝與啟動2.SpreadsheetLink的操作(1)將Excel表格中的數據導出到MATLAB工作空間中(2)從MATLAB工作空間導入數據到Excel表格中(3)調用MATLAB函數進行運算13.2MATLAB數據接口MATLAB提供多種方法支持將磁盤文件和剪貼板中的數據導入到MATLAB的工作區,最簡單的辦法是使用數據導入向導(可通過在“主頁”選項卡“變量”命令組中選擇“導入數據”命令按鈕或在命令行窗口執行uiimport命令來激活它),而在M文件中則可以使用MATLAB文件操作函數。13.2.1文件操作1.文件打開與關閉(1)fopen函數fid=fopen(filename,permission)r 以讀方式打開一個文件。w
以寫方式打開一個文件。a 打開一個文件,隨后的操作可在該文件末尾添加數據r+ 以讀和寫方式打開一個文件fopen默認打開二進制文件,如果打開的是文本文件,則需在上述允許方式后加t,如rt、wt等。例如:F1=fopen('old.txt','rt')F2=fopen('new.dat','r+')(2)fclose函數fclose函數用于關閉已打開的文件,其調用格式為:status=fclose(fid)2.文件的讀寫(1)fscanf函數fscanf函數用于讀取文本文件的內容,并按指定格式存入矩陣,其調用格式為:[A,count]=fscanf(fid,fmt,size)例如:x=fscanf(fid,'%5d',100);y=fscanf(fid,'%5d',[10,10]);(2)fprintf函數fprintf函數可以將數據按指定格式寫入到文本文件中,其調用格式為:count=fprintf(fid,fmt,A)例13-1計算當x=[0.0,0.1,0.2,…,1.0]時,f(x)=ex的值,并將結果寫入文件demo1.txt。程序如下:x=0:0.1:1;Y=[x;exp(x)];fid=fopen('demo1.txt','w');fprintf(fid,'%6.2f%12.8f\n',Y);fclose(fid);(3)fgetl與fgets函數除上述對文本文件進行讀寫操作的函數外,讀取文本文件的函數還有fgetl和fgets,它們按行讀取數據,其調用格式為:line=fgetl(fid)line=fgets(fid,nchar)例13-2讀出例13-1生成的文件demo1.txt中的數據。fid=fopen('demo1.txt','r');while1line=fgetl(fid);ifline<0breakenddisp(line)endfclose(fid);(4)textscan函數如果一個文件中的數據全部由ASCII字符組成,且數據間有間隔符(如空格、逗號、分號、制表位),則文件稱為有格式文件。有格式文件可以使用文本輸入函數textscan讀取數據,函數調用格式為:C=textscan(fid,fmt,N,param,value)例13-3假定文件textdemo.txt中有以下格式的數據:NameEnglishChineseMathmaticsWang 9998100Li 988970Zhang 809097Zhao 776587從該文件中將前3個數據讀入到grades的程序段如下:fid=fopen('textdemo.txt','r');grades=textscan(fid,'%s%d%d%d',3,'headerlines',1);(5)fread函數該函數從文件中讀入二進制數據,其調用格式為:[A,count]=fread(fid,size,precision,skip)例13-4假設文件alphabet.txt的內容是按順序排列的26個大寫英文字母,讀取前5個字母的ASCII和這5個字符。程序如下:fid=fopen('alphabet.txt','r');c=fread(fid,5);frewind(fid);d=fread(fid,5,'*char');fclose(fid);(6)fwrite函數fwrite函數按照指定的數據類型將矩陣中的元素寫入到文件中,其調用格式為:count=fwrite(fid,A,precision)例13-5建立一數據文件magic5.dat,用于存放5階魔方陣。程序如下:fid=fopen('magic5.dat','w');cnt=fwrite(fid,magic(5),'int32');fclose(fid);3.數據文件定位(1)fseek函數該函數用于定位文件位置指針,其調用格式為:status=fseek(fid,offset,origin)例如:fseek(fid,0,-1) %指針指向文件頭fseek(fid,-5,'eof') %指針指向文件尾前第5個字節(2)ftell函數該函數用來查詢文件指針的當前位置,其調用格式為:position=ftell(fid)ftell函數的返回值為從文件頭到指針當前位置的字節數。若返回值為-1,表示獲取文件當前位置失敗。例13-6下列程序執行后,變量four、position和three的值是多少?a=1:5;fid=fopen('fdat.bin','w');fwrite(fid,a,'int16');fclose(fid);fid=fopen('fdat.bin','r');status=fseek(fid,6,'bof');four=fread(fid,1,'int16');position=ftell(fid);status=fseek(fid,-4,'cof');three=fread(fid,1,'int16');status=fclose(fid);(3)feof函數該函數用來判斷當前的文件位置指針是否到達文件尾部:status=feof(fid)當到達文件結束位置時,測試結果為1,否則返回0。(4)ferror函數用來查詢最近一次輸入或輸出操作中的出錯信息:message=ferror(fid)13.2.2MAT文件與應用1.MAT文件save命令可以將MATLAB系統內部數據保存為MAT文件,而load命令可以將磁盤上的MAT文件中的數據讀入到MATLAB系統中。MATLAB提供的用于操作MAT文件的API函數封裝于兩個標準庫文件中:libmat.lib和libmx.lib。前者用于對MAT文件的操作,后者用于對MAT文件中矩陣的操作2.C語言MAT函數用于在C程序中對MAT文件進行操作。3.MAT文件的基本操作在C程序中,通過指向MAT文件的指針對文件進行操作,定義指向MAT文件的指針的格式為:MATFile*mfp;(1)打開MAT文件mfp=matOpen(filename,mode)(2)讀寫MAT文件①
向MAT文件中寫入一個矩陣。matPutVariable(mfp,name,mp)matPutArrayAsGlobal(mfp,mp)②
獲取MAT文件中的變量列表。matGetDir(mfp,num)③
從MAT文件中讀取一個矩陣。matGetVariable(mfp,name)(3)關閉MAT文件。matClose(mfp)4.mx函數在C程序中,使用MATLAB數據時還用到MATLAB提供的接口函數中的mx函數,以完成對mxArray對象的操作。MATLAB的矩陣運算是以mxArray結構體(C++中是mwArray類)為核心構建的。5.MAT文件操作舉例例13-7創建對MAT文件進行操作的C程序。編譯生成應用程序的兩種方法。(1)利用MicrosoftVisualStudio2010集成環境(2)利用MATLAB編譯器13.3MATLAB與其他語言的接口MEX(MATLABexecutable)動態鏈接函數接口是MATLAB調用其他語言程序的接口,通過mex命令將C、C++等語言編寫的函數編譯成動態鏈接程序,使之成為MATLAB的一個擴展函數。13.3.1MEX文件1.MEX函數MEX函數用于從MATLAB環境中獲取必要的矩陣數據和相應信息。所有MEX函數均在MATLAB的子文件夾extern\include中的頭文件mex.h得到聲明。2.MEX文件的建立C語言的MEX文件的源程序由如下兩個部分組成。(1)入口子程序(mexFunction)voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){…}(2)計算子程序(computationalroutine)包含所有完成計算功能的程序代碼,由入口子程序調用。例13-8編寫求兩個數的最小公倍數的C語言MEX文件。3.MEX文件的編譯MEX文件的編譯需要具備兩個條件:一是要求已經安裝MATLAB應用程序接口組件及其相應的工具,另一個是要求有合適的C語言編譯器。MEX文件的編譯使用mex命令,如果第一次使用,需要配置mex采用什么編譯器。>>mex–setup編譯上述MEX文件,在MATLAB命令行窗口下輸入命令:>>mexc_mex.c13.3.2MATLAB引擎MATLAB引擎(engine)是用于和外部程序結合使用的一組函數和程序庫,在C語言程序中利用MATLAB引擎來調用MATLAB中的函數。1.MATLAB引擎函數2.MATLAB引擎的使用首先需要將mxArray轉換成MATLAB中可操作的形式。①將mxArray轉換成MATLAB可理解的形式。一是用函數mxCreate來創建矩陣,然后用mxSetName
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年英語教師學期工作總結模版
- 放學后班級管理
- 軟件培訓課件制作規范
- 湖北省恩施州鶴峰縣2025屆七年級數學第二學期期末檢測模擬試題含解析
- 2025屆湖北省武漢市新觀察八年級數學第二學期期末監測模擬試題含解析
- 大學生職業規劃大賽《建筑電氣與智能化專業》生涯發展展示
- 大學生職業規劃大賽《新能源材料與器件專業》生涯發展展示
- 動態護理查房
- 小兒常見急癥護理
- 公司培訓系統構建與實施
- 陜西省探礦權采礦權使用費和價款管理辦法
- CB-Z-806-2016船舶動力定位模型試驗規程
- 押安徽中考數學第21題(統計與概率)(原卷版+解析)
- 浙江省杭州市杭州第二中學2023-2024學年高一下數學期末達標檢測試題含解析
- DZ∕T 0248-2014 巖石地球化學測量技術規程(正式版)
- 2023年下半年軟件設計師上午真題試卷
- 2024年同等學力申碩-同等學力(哲學)筆試參考題庫含答案
- 中醫藥文化進校園
- 電氣工程及其自動化畢業論文-基于單片機的太陽光追蹤系統設計
- 2022年高考浙江省英語考試真題及答案
- 建設項目水資源論證
評論
0/150
提交評論