版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)仿真應(yīng)用基礎(chǔ)王紅勇
MATLAB編程本章主要內(nèi)容如下:1.1M文件概述1.2M腳本文件1.3Matlab程序控制1.4M函數(shù)文件1.5調(diào)試1.6MATLAB文件處理方法用MATLAB語言編寫的程序,稱為M文件。M文件有兩類:腳本文件和函數(shù)文件。腳本文件:沒有輸入?yún)?shù),也不返回輸出參數(shù)。函數(shù)文件:可以輸入?yún)?shù),也可返回輸出參數(shù)。1.1M文件概述M文件的建立與編輯M文件的創(chuàng)建從MATLAB命令窗口的File菜單中選擇New菜單項(xiàng),再選擇M-file命令edit快捷圖標(biāo)M文件的打開從MATLAB命令窗口的File菜單中選擇OpenM-file命令。editfilename快捷圖標(biāo)M文件的保存從MATLAB命令窗口的File菜單中選擇save命令。快捷圖標(biāo)1.1M文件概述1.2M腳本文件腳本是最簡(jiǎn)單的M-文件,它沒有入口和出口參數(shù)變量??梢宰詣?dòng)執(zhí)行一系列MATLAB命令,諸如重復(fù)命令等。腳本(Scripts)是對(duì)工作空間(workspace)中的現(xiàn)有數(shù)據(jù)操作,或創(chuàng)建一個(gè)新數(shù)據(jù),而且腳本所創(chuàng)建的任一變量在腳本運(yùn)行完都保留在工作空間中以便進(jìn)一步使用。腳本可以直接在命令窗口用文件名直接調(diào)用。一般用clear、closeall等語句開始,可清除掉工作空間中原有的變量和圖形,以避免其他已執(zhí)行的殘留數(shù)據(jù)對(duì)本程序的影響。【例】建立一個(gè)腳本文件將變量a,b的值互換。
E12.m文件:
a=1:9;b=[11,12,13;14,15,16;17,18,19];c=a;a=b;b=c;ab
在MATLAB的命令窗口中輸入E12,將會(huì)執(zhí)行該腳本文件。1.2M腳本文件數(shù)據(jù)的輸入和輸出input函數(shù):用于向計(jì)算機(jī)輸入一個(gè)參數(shù)。調(diào)用格式:A=input(‘message’) A=input(‘message’,‘s’);注:第一種格式用于鍵入數(shù)值、字符串、元胞數(shù)組等數(shù)據(jù)第二種格式,不管鍵入什么,總以字符串形式付給變量A,一般用于輸入字符串時(shí)所選用。
xm=input('What''syourname:','s')1.2M腳本文件例求一元二次方程a2+bx+c=0的根。
a=input('a=');b=input('b=');c=input('c=');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)]將該程序以aa.m文件存盤,然后運(yùn)行aa.m文件。1.2M腳本文件2.pause函數(shù):暫停程序的執(zhí)行。調(diào)用格式:pause(延遲秒數(shù))注:如果省略延遲時(shí)間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行i=0;while1x=ii=i+1;pauseend1.2M腳本文件1.3MATLAB程序控制1.3.1for循環(huán)結(jié)構(gòu)
forx=array (commands) end【說明】for指令后的變量x稱為循環(huán)變量,commands為循環(huán)體。循環(huán)體執(zhí)行的次數(shù)由for后的數(shù)組array的列數(shù)決定。例求1到100的和
sum=0fori=1:100sum=sum+i;endsum1.3.2while循環(huán)結(jié)構(gòu)
whileexpression (commands) end【說明】當(dāng)while
后expression為邏輯真(非0)時(shí),執(zhí)行循環(huán)體commands,只到表達(dá)式的值為假。當(dāng)表達(dá)式的值為數(shù)組時(shí),只有當(dāng)該數(shù)組所有元素均為真時(shí),才會(huì)執(zhí)行循環(huán)體。如while后的表達(dá)式為空數(shù)組,MATLAB認(rèn)為表達(dá)式為假,而不執(zhí)行循環(huán)體。1.3MATLAB程序控制【例】一數(shù)組的元素滿足規(guī)則:,(k=1,2,…);且。現(xiàn)要求該數(shù)組中第一個(gè)大于10000的元素。a(1)=1;a(2)=1;i=2;whilea(i)<=10000 a(i+1)=a(i-1)+a(i); i=i+1;end;i,a(i),i=21ans=10946執(zhí)行結(jié)果為循環(huán)的嵌套如果一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個(gè)循環(huán)結(jié)構(gòu),就稱為循環(huán)的嵌套,或稱為多重循環(huán)結(jié)構(gòu)。多重循環(huán)的嵌套層數(shù)可以是任意的。可以按照嵌套層數(shù),分別叫做二重循環(huán)、三重循環(huán)等。處于內(nèi)部的循環(huán)叫作內(nèi)循環(huán),處于外部的循環(huán)叫作外循環(huán)。1.3MATLAB程序控制1.3.3if-else-end分支結(jié)構(gòu)單分支結(jié)構(gòu)ifexpression
(commands)End雙分支結(jié)構(gòu)ifexpression
(commands1)else
(commands2)end多分支結(jié)構(gòu)
ifexpression1
(commands)
elseifexpression2
(commands)
…… else
(commands)
end【說明】多分支結(jié)構(gòu)常被switch-case所取代;如果判決條件為一個(gè)空數(shù)組,MATLAB認(rèn)為條件為假;if指令判決和break指令配合使用,可強(qiáng)制終止for循環(huán)或while循環(huán)。1.3MATLAB程序控制例輸入三角形的三條邊,求周長(zhǎng)。
A=input('請(qǐng)輸入三角形的三條邊:');ifA(1)+A(2)>A(3)&A(1)+A(3)>A(2)&A(2)+A(3)>A(1)s=(A(1)+A(2)+A(3));disp(s);elsedisp('不能構(gòu)成一個(gè)三角形。')end運(yùn)行:請(qǐng)輸入三角形的三條邊:[456]1.3MATLAB程序控制例輸入一個(gè)字符,若為大寫字母,則輸出其后繼字符,若為小寫字母,則輸出其前導(dǎo)字符,若為其他字符則原樣輸出。c=input('','s');ifc>='A'&c<='Z'disp(char(abs(c)+1));elseifc>='a'&c<='z'disp(char(abs(c)-1));elsedisp(c);end1.3MATLAB程序控制例子:判斷一個(gè)數(shù)組中偶數(shù)、奇數(shù)個(gè)數(shù)fori=1:10a(i)=round(rand(1)*10);endi_1=0;i_2=0;fori=1:10ifmod(a(i),2)==0i_2=i_2+1;elsei_1=i_1+1;endendfprintf('隨機(jī)數(shù)組是:');fprintf('%d,',a);fprintf('\n');fprintf('偶數(shù)有:%d\n',i_2);fprintf('奇數(shù)有:%d\n',i_1);1.3MATLAB程序控制1.3.4switch-case結(jié)構(gòu)switchexcasetest1 (commands1)casetest2……casetestk (commandsk)otherwise (commands)endex為一標(biāo)量或字符串。當(dāng)ex等于test1時(shí),執(zhí)行組命令1,然后跳出該結(jié)構(gòu)。表達(dá)式不等于前面所有檢測(cè)值時(shí),則執(zhí)行該組命令。例根據(jù)變量num的值來決定顯示的內(nèi)容。
num=input('請(qǐng)輸入一個(gè)數(shù)');switchnumcase-1disp('Iamateacher.');case0disp('Iamastudent.');case1disp('Youareateacher.');otherwisedisp('Youareastudent.');end1.3MATLAB程序控制
【例】switch示例:將曲線用不同顏色畫出。t=[0:0.1:18]';forx=0.2:0.2:0.8b=sqrt([1-x^2]);z=atan(b/x);y1=-t*x;y2=t*b+z;y=1-exp(y1).*sin(y2)/b;switchround(10*x)case2plot(t,y,'r'),holdoncase4plot(t,y,'b'),holdoncase6plot(t,y,'k'),holdonotherwiseplot(t,y,'g'),holdonendendxlabel('t(秒)'),ylabel('y')title('二階系統(tǒng)階躍響應(yīng)')text(3.3,0.9,'{\xi}=0.8')text(4.3,1.4,'{\xi}=0.2')%將x圓整成整數(shù)%采用switch結(jié)構(gòu),按x值,繪制不同顏色曲線.思考題:每一機(jī)場(chǎng)都有唯一的四字代碼,如ZBAA為首都機(jī)場(chǎng)等,輸入一個(gè)四字代碼怎么判斷是哪個(gè)區(qū)域?ZB華北區(qū)域ZL西北區(qū)域機(jī)場(chǎng)ZY東北區(qū)域機(jī)場(chǎng)ZH華中區(qū)域機(jī)場(chǎng)ZS華東區(qū)域機(jī)場(chǎng)ZG華南區(qū)域機(jī)場(chǎng)ZU西南區(qū)域機(jī)場(chǎng)ZP云南區(qū)域機(jī)場(chǎng)ZW新疆
a=input('請(qǐng)輸入一個(gè)機(jī)場(chǎng)四字碼:','s');a=upper(a);iflength(a)~=4disp('不是正確的機(jī)場(chǎng)');elseifa(1)~='Z'disp([a,'是國(guó)際機(jī)場(chǎng)']);elseswitcha(2)case'B'disp([a,'是華北區(qū)域機(jī)場(chǎng)']);%ZBAA首都
case'L'disp([a,'是西北區(qū)域機(jī)場(chǎng)']);%ZLLL蘭州
case'Y'disp([a,'是東北區(qū)域機(jī)場(chǎng)']);%ZYYY沈陽
case'H'disp([a,'是華中區(qū)域機(jī)場(chǎng)']);%HHH武漢
case'S'disp([a,'是華東區(qū)域機(jī)場(chǎng)']);%ZSSS虹橋
case'G'disp([a,'是華南區(qū)域機(jī)場(chǎng)']);%ZGGG廣州
case'U'disp([a,'是西南區(qū)域機(jī)場(chǎng)']);%ZUUU成都
case'P'disp([a,'是云南區(qū)域機(jī)場(chǎng)']);%ZPPP昆明
case'W'disp([a,'是新疆區(qū)域機(jī)場(chǎng)']);%ZWWW烏魯木齊
otherwisedisp([a,'是其他國(guó)內(nèi)大陸機(jī)場(chǎng)']);%VHHH香港RC--中國(guó)臺(tái)灣VM--中國(guó)澳門
endend;end;幾個(gè)流程控制語句在程序設(shè)計(jì)中可能需要提前終止循環(huán)、結(jié)束程序的運(yùn)行、顯示錯(cuò)誤信息等情況,需要continue、break等語句的配合完成流程控制。1.3MATLAB程序控制Continue結(jié)束當(dāng)次循環(huán),繼續(xù)執(zhí)行下一次循環(huán),但不結(jié)束當(dāng)前循環(huán)。一般與if結(jié)合。1.3MATLAB程序控制Clear;fori=1:10a(i)=round(rand(1)*10);endi_1=0;i_2=0;fori=1:10ifmod(a(i),2)==0i_2=i_2+1;elsecontinue;i_1=i_1+1;endendfprintf('隨機(jī)數(shù)組是:');fprintf('%d,',a);fprintf('\n');fprintf('偶數(shù)有:%d\n',i_2);fprintf('奇數(shù)有:%d\n',i_1);break結(jié)束當(dāng)前循環(huán),不再執(zhí)行該循環(huán)的任何操作。一般與if結(jié)合??稍谏厦娴膶?shí)例中修改對(duì)比。1.3MATLAB程序控制1.3MATLAB程序控制1.3.5try-catch結(jié)構(gòu)try(commands1)catch(commands2)end【說明】首先執(zhí)行組命令1,只有當(dāng)執(zhí)行組命令1出現(xiàn)錯(cuò)誤后,組命令2才會(huì)被執(zhí)行,同時(shí)將錯(cuò)誤信息存入系統(tǒng)保留變量lasterr中。當(dāng)執(zhí)行組命令2又出錯(cuò),則終止該結(jié)構(gòu)。可用lasterr函數(shù)查詢出錯(cuò)原因。【例】try-catch結(jié)構(gòu)演示。clear,N=4;A=magic(3); tryA_N=A(N,:), catchA_end=A(end,:), endlasterr %設(shè)置3*3矩陣A(魔方陣)%取A的第N行元素%如果取A(N,:)出錯(cuò),改取A的最后一行%顯示出錯(cuò)原因A_end=492ans=Indexexceedsmatrixdimensions.執(zhí)行結(jié)果為:1.4M函數(shù)文件M函數(shù)文件不同于M腳本文件,是一種封裝結(jié)構(gòu),外界通過提供輸入量,而得到函數(shù)文件的輸出結(jié)果。從使用的角度,其具有以下特點(diǎn):函數(shù)是接受入口參數(shù)返回出口參數(shù)的M-文件,程序在自己的工作空間中操作變量,與工作空間分開,無法訪問。函數(shù)文件的第一行是“function”引導(dǎo)的“函數(shù)聲明行”,并羅列出函數(shù)與外界聯(lián)系的全部“標(biāo)稱”輸入輸出宗量。MATLAB允許使用比標(biāo)稱數(shù)目較少的輸入輸出宗量,實(shí)現(xiàn)對(duì)函數(shù)的調(diào)用。functionsa=eSquare(x,y,s)%eSquare函數(shù)注釋.ifnargin<2error('輸入宗量太少。');end;ifnargin==2s='b';end;clf;ifnargout==0plot(x,y,s);elsefill(x,y,s)sa=x+y;end,axis('square')函數(shù)申明行H1行函數(shù)體【說明】
(1)申明:函數(shù)名、輸入?yún)?shù)和輸出參數(shù)(2)H1行包含大寫體的函數(shù)文件名,運(yùn)用關(guān)鍵詞簡(jiǎn)要描述的函數(shù)功能。HelpXX(3)M腳本文件僅比M函數(shù)文件少一個(gè)函數(shù)申明行?!菊f明】nargin,nargout為輸入、輸出宗量檢測(cè)指令.1.4M函數(shù)文件——一般格式figure(2figure(3)%例
函數(shù)調(diào)用示例(指令+腳本文件)x=[1236]y=[3856]figure(1)sa=eSquare(x,y,'r')figure(2)sb=eSquare(x',y')figure(3)eSquare(x,y,'k')figure(1):【例】
利用函數(shù)文件,實(shí)現(xiàn)直角坐標(biāo)(x,y)與極坐標(biāo)(γ,θ)之間的轉(zhuǎn)換。函數(shù)文件tran.m:
function[gama,theta]=tran(x,y)gama=sqrt(x*x+y*y);theta=atan(y/x);
調(diào)用tran.m的腳本文件main1.m:
x=input('Pleaseinputx=:');y=input('Pleaseinputy=:');[gam,the]=tran(x,y);gamthe1.4M函數(shù)文件輸入輸出宗量檢測(cè)指令在調(diào)用函數(shù)時(shí),MATLAB用兩個(gè)永久變量nargin和nargout分別記錄調(diào)用該函數(shù)時(shí)的輸入實(shí)參和輸出實(shí)參的個(gè)數(shù)。只要在函數(shù)文件中包含這兩個(gè)變量,就可以準(zhǔn)確地知道該函數(shù)文件被調(diào)用時(shí)的輸入輸出參數(shù)個(gè)數(shù),從而決定函數(shù)如何進(jìn)行處理。1.4M函數(shù)文件【例】nargin用法示例函數(shù)文件examp.m:
functionfout=charray(a,b,c)ifnargin==1fout=a;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end命令文件mydemo.m:
x=[1:3];y=[1;2;3];examp(x)examp(x,y')examp(x,y,3)執(zhí)行mydemo.m后的輸出是:
ans=123ans=246ans=21子函數(shù)在函數(shù)文件中可以包含多個(gè)函數(shù),其中第一個(gè)函數(shù)稱為主函數(shù),其函數(shù)名與文件名相同,在M函數(shù)文件中的其他函數(shù)稱為子函數(shù),它只能由這一函數(shù)文件中的主函數(shù)或其他子函數(shù)引用。1.4M函數(shù)文件例:腳本文件-函數(shù)-子函數(shù)求某個(gè)向量的平均值emean.mu=[1:pi+4];n=length(u);avg=sum(u)/n;>>emean%查看u、n、avg例:腳本文件-函數(shù)-子函數(shù)求某個(gè)向量的平均值,用函數(shù)functionavg=f_avg(u)%求解向量平均值n=length(u);avg=sum(u)/n;>>emean_f([1:20])>>helpemean_f例:腳本文件-函數(shù)-子函數(shù)function[avg,med]=newstats(u)%主函數(shù)%NEWSTATS計(jì)算均值和中間值n=length(u);avg=f_avg(u);%調(diào)用子函數(shù)med=median(u,n);%調(diào)用子函數(shù)functionavg=f_avg(v)%子函數(shù)%求解向量平均值n=length(v);avg=sum(v)/n;functionm=median(v,n)%子函數(shù)%計(jì)算中間值w=sort(v);%從小到大排序ifrem(n,2)==1m=w((n+1)/2);elsem=(w(n/2)+w(n/2+1))/2;End>>[a,b]=emean_new(round(rand(1,5)*5))例:腳本文件-函數(shù)-子函數(shù)-其他文件函數(shù)function[avg,med]=newstats(u)%主函數(shù)%NEWSTATS計(jì)算均值和中間值n=length(u);avg=emean_f(u);%調(diào)用其他函數(shù)文件med=median(u,n);%調(diào)用子函數(shù)functionm=median(v,n)%子函數(shù)%計(jì)算中間值w=sort(v);%從小到大排序ifrem(n,2)==1m=w((n+1)/2);elsem=(w(n/2)+w(n/2+1))/2;End>>[a,b]=emean_new1(round(rand(1,5)*5))使用global關(guān)鍵字創(chuàng)建全局變量時(shí)有三種情況(1)若聲明為全局的變量在當(dāng)前空間和全局空間都不存在,則創(chuàng)建一個(gè)新的變量,然后為這個(gè)變量賦值為空數(shù)組,該變量同時(shí)存在于局部工作空間和全局工作空間(2)若聲明為全局的變量已經(jīng)存在于全局空間中,則不會(huì)在全局工作空間創(chuàng)建新的變量,其數(shù)值同時(shí)賦值給局部工作空間中的變量(3)若聲明為全局的變量存在于局部工作空間中,而全局工作空間不存在,則系統(tǒng)會(huì)提示一個(gè)警告信息,同時(shí)將局部的變量“挪”到全局工作空間中局部變量和全局變量1.4M函數(shù)文件全局變量和局部變量實(shí)例函數(shù)文件:functiony=add3(x)globalcd;%切記:聲明兩個(gè)或兩個(gè)以上全局變量時(shí),變量之間用空格隔開,不可用逗號(hào)隔開
y=x+3;c=x;d=y;主程序文件:clear;globalcd;c=0;d=0;a=5;b=add3(a);c=c+1d=d+1將global聲明行注釋后比較運(yùn)行結(jié)果MATLAB程序設(shè)計(jì)原則和技巧1、%后面的內(nèi)容是程序的注解,要善于運(yùn)用注解使程序更具可讀性。2、養(yǎng)成在主程序開頭用clear指令清除變量的習(xí)慣,以消除工作空間中其他變量對(duì)程序運(yùn)行的影響。3、參數(shù)值要集中放在程序的開始部分,以便維護(hù)。在語句行之后輸入分號(hào)使其及中間結(jié)果不在屏幕上顯示,以提高執(zhí)行速度。1.5調(diào)試4、程序盡量模塊化,也就是采用主程序調(diào)用子程序的方法,將所有子程序合并在一起來執(zhí)行全部的操作。5、充分利用Debugger來進(jìn)行程序的調(diào)試(設(shè)置斷點(diǎn)、單步執(zhí)行、連續(xù)執(zhí)行)6、設(shè)置好MATLAB的工作路徑,以便程序運(yùn)行。1.矢量化——盡可能使用向量和矩陣操作例求t=now;s=0;fori=1:100000s=s+(1/2^i+1/3^i);endnow-tans=
向量運(yùn)算t=now;n=1:100000;s=sum(1./2.^n+1./3.^n);now-tans=MATLAB程序設(shè)計(jì)原則和技巧陣列預(yù)分配
陣列矩陣的初始化工作;在成熟規(guī)范的商業(yè)軟件里必不可少,同時(shí)也是一個(gè)良好的編程素養(yǎng)的體現(xiàn)。變量管理
matlab中的變量類型是不需要預(yù)先定義的,編程過程中不要改變變量的使用類型。例如x=23;程序,x=‘A’4.盡量使用MATLAB內(nèi)部定義的函數(shù)應(yīng)用程序的錯(cuò)誤語法錯(cuò)誤包括詞法或者文法的錯(cuò)誤,如缺‘(’或‘)’等,在運(yùn)行時(shí)可檢測(cè)出大多數(shù)該類錯(cuò)誤,并指出錯(cuò)在哪一行。算法錯(cuò)誤邏輯上的錯(cuò)誤,不易查找,遇到此類錯(cuò)誤時(shí)需耐心。一般可考慮如下方法:直接調(diào)試法和工具調(diào)試法程序的調(diào)試是在程序無法得到正確結(jié)果時(shí)進(jìn)行程序修正的唯一手段1.5調(diào)試
直接調(diào)試法是指在利用matlab的相關(guān)指令對(duì)程序進(jìn)行調(diào)試。主要方法有:
■刪除句尾分號(hào)和利用disp語句,顯示中間結(jié)果;■在函數(shù)定義行之前加上%注釋,使之變成腳本語言;■
Ctrl+C強(qiáng)行停止程序直接調(diào)試法工具調(diào)試法
工具調(diào)試法是指利用matlab的相關(guān)調(diào)試工具對(duì)程序進(jìn)行調(diào)試調(diào)試步驟為:(1)在程序可疑處設(shè)置斷點(diǎn);(2)執(zhí)行程序;(3)檢查程序運(yùn)行至斷點(diǎn)處變量當(dāng)前值(4)在程序中一步步執(zhí)行(5)結(jié)束調(diào)試狀態(tài)。(6)取消斷點(diǎn)。1.Debug菜單項(xiàng)該菜單項(xiàng)用于程序調(diào)試,需要與Breakpoints菜單項(xiàng)配合使用。
Step:?jiǎn)尾竭\(yùn)行
StepIn:?jiǎn)尾竭\(yùn)行,調(diào)用函數(shù)時(shí)進(jìn)入函數(shù)程序
StepOut:
Run:運(yùn)行
GoUntilCursor:運(yùn)行到光標(biāo)處工具調(diào)試法——調(diào)試菜單項(xiàng)2.Breakpoints菜單項(xiàng)(matlab7.0以上菜單內(nèi)容在Debug菜單中包括)
Set/ClearBreakpoint:設(shè)置/清除斷點(diǎn)
Set/ModifyConditionalBreakpoint:設(shè)置條件斷點(diǎn)
Enable/DisableBreakpoint:使能斷點(diǎn)
ClearBreakpointinAllFiles:清除斷點(diǎn)
StopifErrors/Warnings:錯(cuò)誤停止條件設(shè)置設(shè)置條件斷點(diǎn)時(shí)注意光標(biāo)的位置設(shè)置錯(cuò)誤停止條件設(shè)置條件斷點(diǎn)視頻總結(jié)歸納文件可分為兩類:文本文件由字符和與字符的顯示格式有關(guān)的控制符構(gòu)成,常見擴(kuò)展名:“TXT”、“BAT”、“HTM”二進(jìn)制文件二進(jìn)制文件為非文本文件,常見擴(kuò)展名:“COM”、“EXE”、“BMP”、“WAV”1.6文件處理55MATLAB中基本的低級(jí)文件I/O指令:1.打開和關(guān)閉文件fopen、fclose2.格式讀寫fprintf、fscanf、fgetl、fgets3.非格式讀寫fread、fwrite4.文件定位和狀態(tài)feof、fseek、ftell、ferror、frewind56文件的打開與關(guān)閉1.fopen函數(shù)fid=fopen(filename,permission)其中文件名用字符串形式,表示待打開的數(shù)據(jù)文件。常見的打開方式有:‘r’表示對(duì)打開的文件讀數(shù)據(jù),‘w’表示對(duì)打開的文件寫數(shù)據(jù),‘a(chǎn)’表示在打開的文件末尾添加數(shù)據(jù)。
fid用于存儲(chǔ)文件句柄值,句柄值用來標(biāo)識(shí)該數(shù)據(jù)文件,其他函數(shù)可以利用它對(duì)該數(shù)據(jù)文件進(jìn)行操作。fid=fopen('my.txt','r')2.fclose函數(shù)sta=fclose(fid)該函數(shù)關(guān)閉fid所表示的文件。sta表示關(guān)閉文件操作的返回代碼,若關(guān)閉成功,返回0,否則返回–1文件在進(jìn)行完讀、寫等操作后,應(yīng)及時(shí)關(guān)閉。57格式化數(shù)據(jù)的讀寫fprintf函數(shù)
count=fprintf(fid,format,A)其中COUNT返回所寫的數(shù)據(jù)元素個(gè)數(shù),A存放要寫入文件的數(shù)據(jù)。format用以控制讀取的數(shù)據(jù)格式,由%加上格式符組成,常見的格式符有d,f,c,s。先按format指定的格式將數(shù)據(jù)矩陣A格式化,然后寫入到fid所指定的文件。fscanf函數(shù)[A,count]=fscanf(fid,format,size)其中A用以存放讀取的數(shù)據(jù),COUNT返回所讀取的數(shù)據(jù)元素個(gè)數(shù)。fid為文件句柄。size為可選項(xiàng),決定矩陣A中數(shù)據(jù)的排列形式。若不選用則讀取整個(gè)文件內(nèi)容,若選用則它的值可以是下列值:(1)N表示讀取N個(gè)元素到一個(gè)列向量。
(2)Inf表示讀取整個(gè)文件。
(3)[M,N]表示讀數(shù)據(jù)到M×N的矩陣中,數(shù)據(jù)按列存放。58例計(jì)算當(dāng)x=[01]時(shí)f(x)=ex的值,并將結(jié)果寫入到文件my.txt中。程序x=0:0.1:1;y=[x;exp(x)]; %y有兩行數(shù)據(jù)fid=fopen('my.txt','w');fprintf(fid,'%6.2f%12.8f\n',y);%將y以單下標(biāo)全排列后再格式化顯示fclose(fid);
0.001.00000000
0.101.10517092
0.201.22140276
0.301.34985881
0.401.49182470
0.501.64872127
0.601.82211880
0.702.01375271
0.802.22554093
0.902.45960311
1.002.7182818359例從上例中生成的文件my.txt中讀取數(shù)據(jù),并將結(jié)果輸出到屏幕。程序
fid=fopen('my.txt','r');[a,count]=fscanf(fid,'%f%f',[2inf]);fprintf(1,‘%f%f\n’,a);%1默認(rèn)為屏幕fclose(fid);輸出同上例中的數(shù)據(jù)格式。60文件定位和文件狀態(tài)1.feof函數(shù):檢測(cè)文件是否已經(jīng)結(jié)束status=feof(fid)2.ferror函數(shù):用于查詢文件的輸入、輸出錯(cuò)誤信息msg=ferror(fid)3.frewind函數(shù):使位置指針重新返回文件的開頭frewind(fid)4.fseek函數(shù):設(shè)置文件的位置指針status=fseek(fid,offset,origin)5.ftell函數(shù):用于查詢當(dāng)前文件指針的位置position=ftell(fid);61例
輸出文件的大小。程序fid=fopen('my.txt','r');fseek(fid,0,'eof');x=ftell(fid);fprintf(1,'FileSize=%d\n',x);fprintf(1,'FilePosition1=%d\n',x);frewind(fid);x=ftell(fid);fprintf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 制作培訓(xùn)主持詞
- 方便的辦公室環(huán)境衛(wèi)生管理制度范文
- 包子店衛(wèi)生管理制度
- 質(zhì)檢員考試題庫及答案
- 消防維保管理制度(4篇)
- 辦公設(shè)備報(bào)廢處置管理制度
- 消火栓系統(tǒng)施工工程管道焊接(含無損檢測(cè))安全技術(shù)交底
- 中級(jí)綠化工理論試題庫及答案
- 踐行專業(yè)誠(chéng)信承諾書6篇
- 資源回收再利用節(jié)能承諾書(3篇)
- KTV安全培訓(xùn)教育內(nèi)容記錄課件
- 設(shè)備日常維護(hù)保養(yǎng)培訓(xùn)課件
- 2025年華潤(rùn)守正評(píng)標(biāo)專家考試題庫及答案
- 高血壓急癥的快速評(píng)估與護(hù)理
- JJG 264-2025 谷物容重器檢定規(guī)程
- 養(yǎng)老院設(shè)施審批流程
- 【9英一?!渴徍?024-2025學(xué)年中考第一次模擬考試英語試卷
- 公司股東入股合作協(xié)議書
- 中國(guó)糖尿病防治指南(2024版)解讀
- 2024年勞動(dòng)保障監(jiān)察和調(diào)解仲裁股年終總結(jié)
- 物業(yè)工程管理中的成本控制方法
評(píng)論
0/150
提交評(píng)論