




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、MATLAB入門到精通MATLAB程序設(shè)計(jì)vM文件 兩種形式:命令形式(Script) 函數(shù)形式(Function) 命令式M文件在運(yùn)行過程中可以調(diào)用MATLAB工作域內(nèi)所有的數(shù)據(jù),而且,所產(chǎn)生的所有變量均為全局變量,直到用戶執(zhí)行clear命令清除;函數(shù)式文件中所有變量除特殊聲明,均為局部變量。v命令式M文件 提示: 標(biāo)點(diǎn)符號(hào)要運(yùn)用恰當(dāng); 注意程序的書寫風(fēng)格,保持程序的可讀性; 要以m為文件擴(kuò)展名,在低版本的matlab中,文件名要符合8.3格式。v函數(shù)式M文件 function 返回變量列表=函數(shù)名(輸入變量列表) 注釋說明語句段 函數(shù)體 提示:第一行為function語句; functio
2、n后定義函數(shù)名和輸入輸出參數(shù),函數(shù)被調(diào)用時(shí)按此格式執(zhí)行;文件名必須與函數(shù)名一一對(duì)應(yīng);函數(shù)執(zhí)行完后,只保留返回結(jié)果,不保留中間過程;v例:function f=fibfun(n)%FIBFUN for calculating fibonacci numbers.%Incidengtally, the name fibonacci comes from%Filius Bonassi, or son of Bonassus%fibfun.mif n2 f=fibfun(n-1)+fibfun(n-2);else f=1;end?help fibfun FIBFUN for calculating f
3、ibonacci numbers. Incidengtally, the name fibonacci comes from Filius Bonassi, or son of Bonassus fibfun.m?lookfor fibFIBFUN for calculating fibonacci numbers.注:為了利用MATLAB的關(guān)鍵字搜索功能,應(yīng)該在M文件的第一行注釋中,盡可能多的包含函數(shù)的特征信息??刂普Z句v循環(huán)語句 有兩種方式:for循環(huán)和while循環(huán) for循環(huán) for 循環(huán)變量=s1:s3:s2 循環(huán)體語句組 end說明: for 語句一定要有end結(jié)束標(biāo)志; 循環(huán)語句
4、中要用“;”防止中間結(jié)果的輸出; 書寫時(shí)采用鋸齒結(jié)構(gòu)以增加可讀性; v例:求 mysum=0; for i=1:1:100 mysum=mysum+i; end; mysum 求取s1的值ii在s1和s2之間?循環(huán)體語句組i+s3-i是否結(jié)束循環(huán)1001iiv for 循環(huán)的一般形式 for v=vect statements end vect為任意給定的向量,則循環(huán)變量從向量的第一個(gè)數(shù)值一直循環(huán)到最后一個(gè)數(shù)值。 例1(見前例): mysum=0; v=1:100; for i=v;mysum=mysum+i;end mysum 例2:x=; for i=Hello, x=i x; end,
5、xv while循環(huán) while 邏輯變量 循環(huán)體語句組 end例(見前例): mysum=0;i=1; while (i10000), break; end mysum=mysum+m; end m, mysum if 條件式 條件塊語句組1 else 條件塊語句組2 end條件語句組語句組1語句組2是否例:多項(xiàng)式加例:多項(xiàng)式加 p1=1 5 4; p2=1 6 11 6; n1=length(p1); n2=length(p2); if n1firstlevel num1=num1+1; elseif list(i)secondlevel num2=num2+1; else num3=nu
6、m3+1; endend?global firstlevel secondlevel?firstlevel=85;?secondlevel=75;?a,b,c=test3(90,89,60,79,89,60,99,98,100)a = 1b = 2c = 0子函數(shù)與局部函數(shù)v函數(shù)文件中題頭定義的函數(shù)為主函數(shù),在函數(shù)體內(nèi)定義的其他函數(shù)即為子函數(shù)。子函數(shù)只能為主函數(shù)或同一主函數(shù)下其他的子函數(shù)所調(diào)用。function c=test(a,b)%main functionc=test1(a,b)*test2(a,b);function c=test1(a,b)%sub functionc=a+b;fun
7、ction c=test2(a,b)%sub functionc=a-b;v放置于目錄private下的函數(shù)稱為局部函數(shù),這些函數(shù)只有private目錄的父目錄中的函數(shù)才可以調(diào)用,其他目錄的函數(shù)不能調(diào)用。局部函數(shù)與一般函數(shù)文件的編輯相同。vMATLAB在調(diào)用函數(shù)時(shí),首先檢測該函數(shù)是否為此文件的子函數(shù);如果不是,再檢測是否為可用的局部函數(shù);如果仍不是,則檢測MATLAB搜索路徑中其他的M文件。程序設(shè)計(jì)的輔助函數(shù)v執(zhí)行函數(shù) y1,y2,yn=feval(function,x1,x2,xn) 以函數(shù)名為輸入變量的函數(shù)。 evalin(workspacename,expression) 對(duì)指定工作空間
8、workspacename中的變量進(jìn)行操作,計(jì)算表達(dá)式expression的值。v容錯(cuò)函數(shù) error(錯(cuò)誤信息) 觸發(fā)函數(shù)error時(shí),中斷程序的運(yùn)行,顯示錯(cuò)誤信息。 warning用法類似, 但不會(huì)中斷程序。function c=testerror(a,b)flag=0;if ischar(a)&ischar(b) flag=1;else error(Input must be a string!);endif flag c=strcat(a,b);endv時(shí)間控制函數(shù) 日期表達(dá)形式: dd-mmm-yyyy mm/dd/yy mm/dd 12-Oct-2003 10/12/03
9、10/12 時(shí)間表達(dá)形式: HH:MM:SS HH:MM:SS PM v cputime的調(diào)用: t=cputime; 程序段; t=cputime-t; 顯示該程序段運(yùn)行所占用的CPU時(shí)間。v tic、toc的調(diào)用方法 tic; 程序段; toc; 顯示運(yùn)行該程序段所需的時(shí)間。vetime(time2,time1) 計(jì)算兩時(shí)刻的時(shí)間差。程序設(shè)計(jì)優(yōu)化v以矩陣為操作主體 以向量運(yùn)算代替循環(huán)運(yùn)算,提倡矩陣操作?tic;x=1;for i=1:1000,y(i)=sin(x);x=x+0.1*pi;end,tocelapsed_time = 0.0500?tic;x=1:0.1*pi:1000*pi
10、;y=sin(x);tocelapsed_time = 0.0100v在多重循環(huán)的情況下,建議外循環(huán)執(zhí)行循環(huán)次數(shù)少的,內(nèi)循環(huán)執(zhí)行循環(huán)次數(shù)多的。 例:生成510000的Hilbert矩陣,其中 hi,j=1/(i+j-1)Test2.mticfor j=1:10000 for i=1:5 H(i,j)=1/(i+j-1); endendtocTest1.mticfor i=1:5 for j=1:10000 H(i,j)=1/(i+j-1); endendtoc?test1elapsed_time = 0.2970?test2elapsed_time = 0.6100v大型矩陣預(yù)先定維 大型矩陣
11、動(dòng)態(tài)的定維會(huì)降低程序運(yùn)行效率,所以,應(yīng)預(yù)先估計(jì)變量的最大維數(shù),用zeros或ones等進(jìn)行預(yù)先定維。ticH=zeros(5,10000);for i=1:5 for j=1:10000 H(i,j)=1/(i+j-1); endendtocticH=zeros(5,10000);for i=1:5 H(i,:)=1./i:i+9999;endtoc?test1elapsed_time = 0.2970?test2elapsed_time = 0.0310 對(duì)于二重循環(huán),還可以使用meshgrid函數(shù)來構(gòu)造。v優(yōu)先考慮內(nèi)在函數(shù)v采用有效算法v采用Mex技術(shù)?tic,i,j=meshgrid(1
12、:5,1:10000);H=1./(i+j-1);tocelapsed_time = 0.0150面向?qū)ο蟮某绦蛟O(shè)計(jì)v類和對(duì)象的構(gòu)造 類的概念是結(jié)構(gòu)體的拓展,類中可以包含變量形成員,也可以包含與這些變量相關(guān)聯(lián)的函數(shù)或運(yùn)算。對(duì)象是類的一個(gè)實(shí)例。首先定義一個(gè)適當(dāng)?shù)拿?以這個(gè)名字建立一個(gè)子目錄,目錄名為該名稱前加符號(hào);編寫一個(gè)引導(dǎo)函數(shù),函數(shù)名與類同名。v例:定義一個(gè)多項(xiàng)式類如果不給出輸入變量,則建立一個(gè)空多項(xiàng)式;如果輸入變量a為多項(xiàng)式類,則直接把它傳送給輸出變量p;如果a為向量,則將此向量變換成行向量,再構(gòu)造一個(gè)多項(xiàng)式對(duì)象;function p=polynom(a)if nargin=0 p.c=
13、;p=class(p,polynom);elseif isa(a,polynom), p=a;else p.c=a(:).;p=class(p,polynom);endv類的顯示 在此目錄下重新建立display()函數(shù)。 函數(shù)自動(dòng)按照多項(xiàng)式顯示的格式構(gòu)造字符串,并顯示出來。function display(p)disp( );disp(inputname(1), = )disp( );disp( char(p);disp( );function s=char(p)if all(p.c=0) s=0;else d=length(p.c)-1;s=; for a=p.c; if a=0 if i
14、sempty(s) if a0, s=s,+; else, s=s,-;a=-a; end end if a=1|d=0, s=s, num2str(a); if d0, s=s,*; end end if d=2, s=s,x,int2str(d); elseif d=1, s=s x; end end d=d-1; endendv各種運(yùn)算的建立 加法運(yùn)算:對(duì)plus()函數(shù)進(jìn)行重載定義; 減法運(yùn)算:對(duì)minus()函數(shù)進(jìn)行重載定義; 乘法運(yùn)算:對(duì)mtimes()函數(shù)進(jìn)行重載定義; 乘方運(yùn)算:對(duì)mpower()函數(shù)進(jìn)行重載定義; function p=minus(a,b)a=polynom(
15、a);b=polynom(b);k=length(b.c)-length(a.c);p=polynom(zeros(1,k) a.c -zeros(1,-k) b.c);function p=minus(a,b)a=polynom(a);b=polynom(b);k=length(b.c)-length(a.c);p=polynom(zeros(1,k) a.c -zeros(1,-k) b.c);function p=mtimes(a,b)a=polynom(a);b=polynom(b);p=polynom(conv(a.c,b.c);function p=mpower(a,n)if n=
16、0, n=floor(n);a=polynom(a);p=1; if n=1 for i=1:n, p=p*a;end endelse error(Power should be a non-negative integer.)end875 . 135)(74)(23423xxxxsQxxsP?P=polynom(1 4 0 -7) P = x3+4*x2-7 ?Q=polynom(5 3 -1.5 7 8) Q = 5*x4+3*x3-1.5*x2+7*x+8 ?P+Qans = -5*x4-2*x3+5.5*x2-7*x-15?P-Qans = -5*x4-2*x3+5.5*x2-7*x-
17、15?P*Qans = 5*x7+23*x6+10.5*x5-34*x4+15*x3+42.5*x2-49*x-56?P3ans = x9+12*x8+48*x7+43*x6-168*x5-336*x4+147*x3+588*x2-343文件格式與讀寫vMatlab的文件 MDL文件simulink生成的模型描述文件; DLL文件由Mex技術(shù)生成的matlab可調(diào)用函數(shù)庫; MAT文件matlab格式存儲(chǔ)的二進(jìn)制數(shù)據(jù)文件 P 文件 M文件變換后的偽代碼文件。v變量存儲(chǔ)命令 save 文件名 變量列表 文件名為要存儲(chǔ)的文件名,如果不給出文件名則默認(rèn)為matlab.mat;變量列表為要存儲(chǔ)的變量,
18、各個(gè)變量名間用空格分割,如果不給出變量名列表,則將整個(gè)工作空間中所有變量都存入該文件。例: save tmp a b c 將a,b,c三個(gè)變量存到tmp.mat文件中,默認(rèn)目錄為work目錄。 save(temp space,a,b,c) 可以使用任意的合法文件名。v變量裝載命令 load 文件名 或 load(文件名) 從mat文件中將變量數(shù)據(jù)裝載入工作空間。vASCII格式的變量存儲(chǔ) save temp.dat /ascii 此時(shí),文件內(nèi)容為可讀的,當(dāng)變量的精度被降低。v文件操作函數(shù)打開文件 文件句柄=fopen(文件名,打開方式) 如果句柄的值大于0,說明文件打開成功;打開方式:r 只讀
19、w 只寫a 追加r+ 可讀又可寫關(guān)閉文件 fclose(文件句柄) 成功,則返回0;否則返回1。 如果想關(guān)閉matlab運(yùn)行中打開的所有文件,可以用fclose(all)命令。有格式讀文件 A=fscanf(文件句柄,輸入格式,變量大小N) 從文件中讀取N個(gè)元素,賦給A。有格式寫文件 fprintf(文件句柄,輸出格式,輸出變量表) 輸出格式控制變量的輸出形式,每個(gè)描述格式的字符串以引導(dǎo),如s表示字符格式,d表示整型數(shù)格式,23.13g表示雙精度浮點(diǎn)格式; 輸出變量表中,變量名之間用逗號(hào)隔開。讀入整個(gè)一行 str=fgetl(文件句柄) 或 str=fgets(文件句柄) 從文件中讀入一整行信
20、息,前者舍棄字符串末尾的回車符號(hào),后者不舍棄。字符串讀寫 類似于文件讀寫,把文件句柄替換為字符串變量。 sscanf(字符串變量,輸入格式,變量大小) 字符串變量=sprintf(輸出格式,輸出變量列表)例:文本文件顯示。function fileprint(fname)if nargin=1 f_id=eval(fopen( fname,.m,r);else fname,fpath=uigetfile(*.m,Please enter a file name); f_id=fopen(fpath,fname,r);endi=0;while feof(f_id)=0 strText=fgetl
21、(f_id); i=i+1; disp(sprintf(%4d:%s,i,strText);endfclose(f_id);?fileprint(fileprint) 1:function fileprint(fname) 2:if nargin=1 3: f_id=eval(fopen( fname,.m,r); 4:else 5: fname,fpath=uigetfile(*.m,Please enter a file name); 6: f_id=fopen(fpath,fname,r); 7:end 8:i=0; 9:while feof(f_id)=0 10: strText=fg
22、etl(f_id); 11: i=i+1; 12: disp(sprintf(%4d:%s,i,strText); 13:end 14:fclose(f_id);程序調(diào)試v語法錯(cuò)誤 發(fā)生在程序代碼的解釋過程中,一般有函數(shù)參數(shù)輸入類型有誤或矩陣運(yùn)算階數(shù)不符等情況。v執(zhí)行錯(cuò)誤 發(fā)生在程序運(yùn)行過程中,出現(xiàn)溢出或死循環(huán)等引起,錯(cuò)誤與程序有關(guān),較難發(fā)現(xiàn)。?a=1 2 ;3 4;?b=1 2 3;4 5 6;7 8 9;?a*b? Error using = *Inner matrix dimensions must agree.?a =NaN?isnan(a)ans = 1?a=;?isempty(a)ans = 1 盡量避免出現(xiàn)NaN、inf或空矩陣等異常數(shù)據(jù),要適當(dāng)采取方法來控制。v錯(cuò)誤檢測語法錯(cuò)誤會(huì)給出相應(yīng)的信息,容易檢查定位;將程序執(zhí)行的中間結(jié)果輸出到命令窗口,以方便檢查;使用keyboard函數(shù)中斷程序,進(jìn)入調(diào)試狀態(tài),實(shí)現(xiàn)交互式調(diào)試;將函數(shù)頭注釋掉,從而函數(shù)變?yōu)槟_本文件調(diào)試;使用調(diào)試菜單或調(diào)試函數(shù)。v調(diào)試函數(shù)dbstop in at 用來在M文件中設(shè)置斷點(diǎn);函數(shù)dbstatus用來顯示斷點(diǎn)信息;函數(shù)dbtype顯示M文件文本(包括行號(hào));函數(shù)dbstep從斷點(diǎn)處繼續(xù)執(zhí)行M文件;函數(shù)dbstack顯示M文件執(zhí)行時(shí)調(diào)用的堆棧等;函數(shù)dbup/dbdown可以實(shí)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZSA 231-2024 氧化鎵單晶片X 射線雙晶搖擺曲線半高寬測試方法
- T-ZMDS 10022-2024 光學(xué)脊柱測量及姿態(tài)評(píng)估設(shè)備
- 二零二五年度名義購房代持合同中的房產(chǎn)繼承與轉(zhuǎn)讓安排
- 2025年度高品質(zhì)車位租賃與社區(qū)設(shè)施管理合同
- 二零二五年度安全生產(chǎn)評(píng)價(jià)資質(zhì)借用服務(wù)合同
- 2025年度高速公路監(jiān)控系統(tǒng)維保服務(wù)協(xié)議雙聯(lián)
- 二零二五年度解除勞動(dòng)合同通知書及員工離職后商業(yè)保險(xiǎn)權(quán)益處理及終止協(xié)議
- 2025年度電力系統(tǒng)設(shè)備租賃合同模板
- 2025年美業(yè)美容儀器銷售代表入職合同
- 二零二五年度淘寶平臺(tái)商家入駐信息保密協(xié)議
- 2024年煉鋼工職業(yè)技能競賽理論考試題庫500題(含答案)
- 人教版(2024)六年級(jí)全一冊(cè) 第18課 土壤濕度控制好
- 三年級(jí)下冊(cè)信息技術(shù)蘇科版 6.1設(shè)計(jì)數(shù)字作品第一課時(shí) 教案
- 20以內(nèi)的加法口算練習(xí)題4000題 284
- 單位工程施工進(jìn)度計(jì)劃橫道圖表
- Nikon尼康D3100中文說明書
- 2023年廣西職業(yè)院校技能大賽高職組《Python程序開發(fā)》賽項(xiàng)競賽樣題
- LY/T 3141-2024文物建筑木構(gòu)件檢測方法
- 08J907 潔凈廠房建筑構(gòu)造
- 財(cái)務(wù)管理學(xué)(第10版)課件 第1章 總論
- 2024年南京旅游職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
評(píng)論
0/150
提交評(píng)論