matlab文件操作


1.matlab文件打開與關閉

 文件的打開與關閉

對一個文件操作以前,必須先打開這個文件

fopen函數:用於打開文件,調用格式為

其中,fid為文件識別號,

成功打開文件時,fid返回一個整數,用來標識該文件

打開不成功時,fid為-1

filename指定待操作的文件名

permission為對文件的允許使用方式

文件的使用方式

這是默認方式,如果指定的文件不存在,fopen的返回值為-1

如果指定的文件不存在,就創建一個文件再打開它;如果存在,就打開該文件,並清空原內容

當文件操作結束后,應該關閉文件,

fclose函數,用於關閉已打開的文件,調用格式為

fid是要關閉文件的標識號,如果fid為all,則關閉所有已打開的文件(但是標准文件除外,屏幕,鍵盤)

返回0,表示關閉成功 ; 返回-1,表示關閉不成功

文本文件的讀寫

fscanf函數用於讀取文本文件的內容,fprintf函數用於將數據寫入文本文件中,調用格式為

A用於存放讀寫的數據,

count返回成功讀寫的數據單元元素個數

fid為文件標識號

fmt用以控制讀取的數據格式

size用於指定A的大小

 

size:用於存放返回數據變量a的大小

以讀方式打開文件

讀入標題行,指定按字符串格式讀取數據,6指定讀取6個字符串

定義用於存放數據的變量qxsj,並初始化為空

 

用循環結構讀取前十行數據,因為每一行既有文本類型的數據,又有數字類型的數據,所以用單元數組讀入存儲的數據

%s指定讀取時采用字符串格式

%f指定讀取時采用小數形式

第1,2,6列為字符型數據

讀取完成之后,調用fclose函數釋放內存空間

二進制文件的讀寫

如加密或者壓縮的文件,多媒體文件,

matlab函數提供了fread函數和fwrite函數

fread函數用於讀取二進制文件,fwrite函數將數據寫入文件

函數調用格式:

A用於存放讀寫的數據,

count返回讀寫成功的數據個數

fid為文件識別

precision指定讀寫數據的類型

size用於指定A的大小

skip成為循環因子,指定按比例周期性地跳過一些數據,默認為0

以寫方式打開文件

根據給定的數學表達式求取y變量,每個變量有100個元素

將這個變量以雙精度格式寫入文件,最后關閉文件

 

然后運行,生成大小1600字節的文件

文件的大小跟文件個數和數據類型有關

2.matlab文件操作

 fseek函數,用於改變文件指針的位置,調用格式為

指定指針從當前位置移動到文件頭

指定指針移動到文件的倒數第五個字節

ftell函數

用於查詢文件指針的當前位置,調用格式為

feof函數

用於判斷當前的文件位置指針是否到達文件尾部,調用格式

以讀方式打開文件

調用fseek函數改變文件位置,每組有兩個數據,每個數據是雙精度型,占8個字節

創建變量,並初始化為空

里用循環結構讀取數據,feof表示未到文件尾

  每次讀取一個雙精度數據,添加到x,y中,直到文件末尾

  

繪制圖形,關閉文件

 

3.在其他語言程序中讀寫matlab的數據文件

MAT文件

MAT文件是matlab村塾數據的標准格式,

MAT中不僅保存變量的值,而且保存變量的名稱和類型

MAT分為標志和數據兩個部分

標志:包含數據類型,數據大小

save命令

load命令

libmat.lib:包含對MAT文件的操作函數

libmx.lib:包含對MAT文件中mxArray矩陣的操作函數

C++程序中MAT文件的基本操作

首先定義指向MAT文件的指針

MATFile *mfp;

MATFile指定指針類型,mfp為指針變量

對MAT文件進行操作前必須先打開這個文件

關閉文件

r:只讀模式(默認)

w:只寫模式

u:更新模式,既可以從文件中讀取數據,又可以寫

讀寫MAT文件

matPutVariable(mfp,name,mp) :向文件中寫入數據

matGetVariable(mfp,name):向文件中讀取數據。導入內存

函數執行成功,返回0,否則返回一個非0值

 

mxCreateDoubleScalar:用於創建一個數字標量

mxCreateDoubleMatrix:用於創建存儲數值數據的mxArray矩陣

mxCreateString:創建存儲變量的mxArray變量

mxDestroyArray用於清除

mxlsDouble判斷存儲的數據是否為實數

mxGetM獲取變量大小

mxSetPr:獲取變量地址

mxArrayToString:將mxArray內容轉換成字符串

在文件頭mat.h中包含了對matfile類型的定義和MAT文件的操作方法

因此,在文件首加入宏命令,

 

       

  

打開失敗

文件打開成功,繼續操作文件

雙精度標量,pa1指向這個對象

pa2指向雙精度實型數,大小3*3矩陣

利用memcpy將data數組中的值復制給pa2所指向矩陣的元素

pa3指向一個字符變量

調用matPutVariable函數將pa1所指變量寫入文件,變量名為LocalDouble

在寫的時候如果發生錯誤,就輸出相應的提示,中斷程序

調用matPutVariableAsGlobal,將pa2所指變量寫入文件,指定對象GlobalDouble為全局變量

 

 調用matPutVariable,將pa3所指變量寫入文件

數據輸出操作完成后,清除矩陣,並關閉mat文件,釋放讀寫占用的內存資源

 

原程序編寫好之后,需要生成應用程序

 

在matlab命令行窗口輸入以下命令

編譯成功生成一個可執行文件

 

工作區中會增加3個變量

在matlab和c++之間交換數據

4.在matlab中調用其它語言編寫的程序

 如何在matlab中調用其它語言編寫的程序

 MEX是matlab Executable的縮寫,是matlab提供的調用其他語言的子程序的接口

用其它語言編寫的程序經過編譯,可以生成mex文件,作文matlab的擴展函數

MEX庫函數:用於mex程序與matlab環境交換數據和從matlab工作空間獲取相應信息

常用MEX庫函數:

mexCallMATLAB函數:用於調用matlab函數

mexErrMsgTxt函數:用於輸出matlab工作空間獲取運行過程錯誤信息。

mexEvalString函數:用於matlab環境中執行表達式

mexGetVariable函數:用於MEX文件從matlab工作區獲取變量

mex文件源程序的構成

1.入口子程序

默認標識名是mexFunction

 入口子程序有四個參數

c++程序與matlab交換數據,須使用mxArray對象

 2.計算子程序

包含所有完成計算功能的程序代碼,由入口子程序調用。計算子程序的定義格式如下:

返回值類型 子程序名(輸入形參表)

{

    ...

}

 

該mex文件

新建一個c++源程序

判斷兩個數是否互質,函數的返回值為bool型,函數有兩個雙精度型參數

首先定義兩個變量x,y,存儲指針所指對象的值

 

然后用輾轉相除法求兩個數最大公約數的值

首先將較大值放入x,將小值放入y

    

然后x除以y得余數tmp,如果余數不為0,將tmp作為新的y,繼續求余數,直到余數為0

    

若最大公約數為1,說明兩個數互質

    

 

 然后檢查入口函數,檢查輸入輸出時是否符合要求

調用時,虛參plhs指向z,實參prhs指向y,首先檢查調用mex文件時輸入實參是否有兩個

然后檢查輸入實參是否是一個

然后逐個獲取輸入實參的行數和列數

檢查每一個實參是否為單個的數

如果調用時輸入與輸出實參符合要求,則在matlab工作區建立一個矩陣

矩陣的大小與輸入實參的大小相同

mxGetPr函數獲取實參的地址

 

如果isCoprime函數為true,返回時,輸出參數為1,否則為0

 

將編輯好的源程序進行編譯,生成MEX文件

方法:

例如利用matlab編譯器

>>mex MEXDemo.cpp

編譯成功,將生成一個mex文件:MEXDemo.mexw64

.mexw64表示生成的是可以在windows64位系統下運行的文件

 調用mex文件的方法和m文件的方法相同

例如判斷11和13互質,判斷15和33不互質

MEX文件源程序由入口子程序和計算子程序構成,入口子程序在c++和matlab之間傳遞數據,

並調用計算子程序

MEX文件源程序生成MEX文件,成為matlab的一個函數

5.在其它語言中調用matlab函數

 matlab引擎的概念

在c++程序中通過指向matlab引擎對象的指針操作matlab引擎對象

定義matlab引擎的格式

engOpen,啟動matlab計算引擎,打開一個matlab工作區;starcmd指定打開引擎的方式,在windows系統中只能為空,啟動成功返回引擎句柄,否則返回空

關閉一個matlab工作區,ep是Engine類型的指針

從matlab工作區讀取數據,name指定變量,返回值是指向name的指針

從matlab工作區輸出數據,name指定寫入工作區的變量名

 engEvalString執行matlab命令,返回值為0,表示執行成功,1表示執行失敗

matlab引擎的作用

使用matlab引擎需要使用mxArray變量,用來在matlab和其他應用空間交換數據

第一步:創建mxArray變量,(利用mxCreateDoubleMatrix創建m行n列的矩陣,存儲實數)

第二步:給mxArray變量賦值,例如,

 

第三步:將變量放入到matlab引擎所啟動的工作區中

engine.h,包含了頭文件引擎庫的定義

iostream,包含了輸入輸出流的定義

定義指針,操作引擎對象

mxArray類型的指針用來指向matlab輸入的對象

定義存儲數據的變量

按給定表達式生成數據

建立一個矩陣,其成員用於存放實數數據,賦值給T;將數組t賦值給指針T;

向引擎工作區放入矩陣命名為T

同樣的方法將數組R的內容放入引擎R

放入引擎后,利用polar函數繪制極坐標圖

利用title函數給圖形添加標題

完成數據傳遞和計算后,system讓操作系統暫停該執行,但圖形窗口不關閉,提示是否繼續執行程序,mxDestroyArray釋放占用的內存空間,engClose函數關閉計算引擎

生成可執行程序文件

-client指定生成客戶端程序

engine,計算時加入matlab引擎庫

 運行結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM