




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章MATLAB
程序設計陳文靜主要內容M文件的建立、分類程序控制結構函數的設計(參數控制,注釋等)程序的調試(包括函數文件的調試)程序按照矩陣規則進行優化4.1M文件M文件:由代碼(指令)組成,在MATLAB系統中解釋運行。M文件的后綴名為M。
M文件的分類
(1)命令式文件(腳本script)。(2)函數式文件(function)。4.1M文件兩類文件的區別命令式文件沒有輸入輸出參量,函數式文件帶帶參數。命令式文件運行中可以調用工作空間的數據,運行中產生的所有變量為全局變量。函數式文件不能調用工作空間的數據,運行中產生的所有變量為局部變量。命令式文件可以直接運行,函數式文件不能,只能調用。4.1M文件函數式文件(function)的構成
函數式文件(function)的構成function[w1,w2]=set_filter_w(I,kk)%設置濾波窗ifnargin<2kk=1;end……4.1M文件M文件的建立與打開可用任何文本編輯程序來建立和編輯常用matlab提供的編輯器建立/打開的方式:
a、主菜單
b、運行edit命令
c、命令按鈕,Newscript4.1M文件4.2程序控制結構三種程序控制結構順序結構選擇結構循環結構4.2程序控制結構順序結構指按照程序中語句的排列順序依次運行,直道程序的最后一句。一般涉及數據的輸入、數據的計算或處理、數據的輸出等。Clearall;clc;closeall;input(prompt)strResponse=input(prompt,'s')disp(x)4.2程序控制結構name='Alice';age=12;str=sprintf('%swillbe%dthisyear.',name,age);disp(str);A='Alice';age=12;str=fprintf('%swillbe%dthisyear.\n',name,age);Alicewillbe12thisyear.4.2程序控制結構Matlab與日期和時間有關的函數calendarX=clockY=todayT=tictocetimenowdate
datenumpausepause(3)延時3秒ctrl+c(終止程序運行)順序結構實例例:求一元二次方程ax2+bx+c=0的根,其中a,b,c的值由鍵盤輸入。
a=input(‘a=?’);b=input(‘b=?’);c=input(‘c=?’);x1=(-b+sqrt(b.^2-4*a*c))/(2*a);x2=(-b-sqrt(b.^2-4*a*c))/(2*a);
disp([‘x1=‘,num2str(x1),‘x2=‘,num2str(x2)])或p=[abc];x=roots(p)4.2程序控制結構三種程序控制結構順序結構選擇結構循環結構4.2程序控制結構if結構1)單分支If結構2)雙分支If結構if-else-end3)多分支If結構If…elseif…else…endswith結構
try結構
選擇結構4.2程序控制結構1)單分支ifif條件語句組
end
if結構2)雙分支ifif條件語句組1else語句組2end3)多分支ifif條件1語句組1elseif條件2語句組2……elseif條件m語句組melse語句組nend例:計算分段函數:例:多分支條件語句例、輸入一個字符,若為大寫字母,則輸出其對應的小寫字母;若為小寫字母,則輸出其對應的大寫字母;若為數字字符,則輸出其對應的數值,其它為原樣輸出。disp(abs(c)-abs(‘0’))switch語句switch表達式
case表達式1
語句組1case表達式2
語句組2………
case表達式m
語句組motherwise
語句nend4.2程序控制結構選擇結構switch語句switch表達式
case表達式1
語句組1case{表達式2,表達式3,…表達式m}
語句組2….otherwise
語句nend4.2程序控制結構選擇結構4.2程序控制結構…switch(result)case52disp('resultis52')case{53,78}disp('resultis52or78')End例使用switch語句判斷鍵盤輸入值并做出相應提示。例使用switch語句對顧客購買的商品進行打折銷售try語句try
語句組1catch
語句組2end例、矩陣乘法的規則,先求兩矩陣的乘積,若出錯則自動轉去求兩矩陣的點積。A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;end4.2程序控制結構試探結構Errorusing*Innermatrixdimensionsmustagree.
4.2程序控制結構三種程序控制結構順序結構選擇結構循環結構循環結構硬循環語句(for……end)條件循環語句(while…….end)4.2程序控制結構
for循環變量=表達式1:表達式2:表達式3
循環體語句
end例、利用循環語句生成方波A,要求方波序列長度為100,方波個數為10個。A0=[0,0,0,0,0,1,1,1,1,1];A=[];fori=1:10A=[AA0];endfor循環結構[B1,B]=meshgrid(A0);C=reshape(B,1,100);for循環結構Fori=valArray…endfors=[1,5,8,17]disp(s)end15817a=[1,3,5,7];>>fori=as(i)=i;ends=1030507例:輸出100~999之間的水仙花數例:編寫程序,求Fibnacci數列各項求:n=input(‘n=‘);
y=0;fori=1:ny=y+1/i.^2;enddisp(y)n=input(‘n=‘);
x=1:n;y=1./i.^2sum(y)disp(y)例:求定積分設求例:求定積分設求quad(fun,a,b)>>F=@(x)exp(-0.5*x).*sin(x+pi/6);>>Q=quad(F,0,3*pi)Q=0.9008條件循環語句(while-end)當--就—
結構while條件循環體語句
endWhile循環結構條件循環體語句YNWhile循環例:求階乘大于或等于99^99的最小整數。N=1;while(prod(1:N)<99^99)N=N+1;endm=1;while(sum(1:N)<=10000)m=m+1;end>>mm=141求:
例:從鍵盤輸入若干個數,當輸入0時,結束。求這些數的和與平均值While循環例break用于終止循環的執行,即程序將跳出循環。continue
控制跳出循環體中的某些語句,即跳過循環體中所有剩下的語句,繼續下一次循環。例、求[100,200]之間第一個能被21整除的數forn=100:200ifrem(n,21)~=0continueendbreakend終止循環forn=100:200ifrem(n,21)==0breakendendx=100:200;a=find(rem(x,21)==0,1);x(a)return使正在執行的函數正常退出。可以用于正常和強制結束函數的運行例、求[100,200]之間第一個能被21整除的數forn=100:200ifrem(n,21)==0returnendend[x,y]=meshgrid(1:256);z=2-((x-128).^2+(y-128).^2)/128^2;mesh(z);
a=z;a(a<=1)=NaN;[M,N]=size(a);fori=1:Mforj=1:Nifa(i,j)<=1a(i,j)=NaN;endendend循環的嵌套例:找出1:100之間的全部素數clearallclcN=100;p=2:N;fori=2:sqrt(N)n=find(rem(p,i)==0&p~=i);p(n)=[];enddisp(p)例:找出1:100之間的全部素數寫出下列程序的輸出結果s=0;a=[12,13,14;15,16,17;181920;21,22,23]fork=aforj=1:4ifrem(k(j),2)~=0s=s+k(j);endendends=108第三節函數文件函數文件的基本結構Function[輸出參量]=函數名(輸入參量)
注釋說明函數體語句說明:1、函數調用時,不是函數名而是函數文件名。2、注釋用%開頭,第一注釋行及之后的連續行3、return
函數文件的基本結構Function[輸出參量]=函數名(輸入參量)
注釋說明函數體語句說明:1、函數調用時,不是函數名而是函數文件名。2、注釋用%開頭,第一注釋行及之后的連續行3、return第三節函數文件
函數調用:普通調用[輸出參量]=函數名(輸入參量)function[rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);調用:
[rho,the]=tran(x,y);第三節函數文件functionA=myhilb(m,n)ifnargout>1,error(‘Toomanyoutputargument’);endifnargin==1,n=m;elseifnargin==0|nargin>2,error(‘wrongnumberofinputargument’);endfori=1:mforj=1:nA(i,j)=1/(i+j-1);endend第三節函數文件調用:
A=myhilb(3,4);
函數調用:嵌套調用函數可以嵌套調用,如遞歸例、利用函數的遞歸調用,求n的階乘。functionf=myfactor(n)ifn<=1f=1;elsef=myfactor(n-1)*n;end第三節函數文件函數調用舉例用for循環編程實現對行向量進行任意重新排列。建立函數:myrndprm調用myrndprm>>x=1:10;>>y=myrndprm(x)y=46513278910
函數參數的可調性
nargin:numberoffunctioninputarguments
nargout:numberoffunctionoutputarguments
全局變量與局部變量
global變量名子函數私有函數
private目錄下嵌套函數第三節函數文件nargin和nargout
調節輸入和輸出參數,一個函數可完成多種功能。functionfout=charry(a,b,c);Ifnargin==1fout=a;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end函數參數的可調性global變量名缺點:破壞了函數對變量的封裝,降低了程序的可讀性。functionf=wadd(x,y)globalalphabetaf=alpha*x+beta*y;運行時
globalalphabetaalpha=1;beta=2;s=wadd(1,2);全局變量與局部變量子函數(subfunction)一個M文件可以包括多個函數第一個出現的主函數,其它的為子函數主函數可以在M文件的外部調用子函數只能被主函數和同一個M文件中的其它子函數調用因此,主函數必須在最上方,子函數的排列順序可以任意子函數function[avg,med]=mystate(u)n=length(u);avg=mean(u,n);med=median(u,n);functiona=mean(v,n)a=sum(v)/n;functionm=median(v,n)w=sort(v);ifrem(n,2)==1m=w((n+1)/2);elsem=(w(n/2)+w(n/2+1))/2;end嵌套函數嵌套:在函數內部定義其它函數嵌套函數必須用end結尾functiontestfunclc;x=5;y=testfun1(x);functionz=testfun1(x)z=2*x;endyend1.語法錯誤2.邏輯錯誤(編程失誤)調式方法:(1)命令行,單獨運行部分命令,根據結果判斷。(2)設置斷點來判斷(3)
return的靈活應用第四節程序調試
1.語法錯誤
能很好判斷或檢查出語法錯誤
2.邏輯錯誤(編程失誤)
matlab基本不能檢查到邏輯錯誤第四節程序調試2.邏輯錯誤(編程失誤)(1)命令行,單獨運行部分命令,根據結果判斷。(2)設置斷點來判斷_debug
k>>變量名,查看。變量的鼠標觀測法(3)利用鍵盤控制,如命令pause\keyboard\return第四節程序調試Debug詳解Debug工具欄中部分子項的功能1、step
執行M文件的當前行,即單步執行2、stepin
如果當前行調用了另外一個函數,則深入被調用的函數內部執行3、stepout
在當前函數內部,完成剩余行的執行,并退出函數4、continue
完成當前M文件的運行5、exitdebugmodemy_demo_func(1:64)4.3.5子函數4.3.5子函數第一步第二步第三步第四步第五步1.代碼運行的計時方法整段程序代碼的計時計算tic與toc之間的時間。也可以用etime(t1,t2)
計算t1,t2之間的時間差來完成上述功能。也可以用cputime變量來完成上述功能。五、程序的優化設計1.代碼運行的計時方法整段程序代碼的計時計算tic與toc之間的時間。
tic……toc五、程序的優化設計1.代碼運行的計時方法也可以用etime(t1,t2)
計算t1,t2之間的時間差來完成上述功能。t=clock;fft(x);etime(clock,t)五、程序的優化設計1.代碼運行的計時方法也可以用cputime變量來完成上述功能。
t=cputime;your_operation;cputime-t五、程序的優化設計編程技巧(1)盡量避免使用循環。盡量使用向量化的運算。多重循環,次數多的循環在內。(2)矩陣維數預先定義。(3)優先考慮內置函數。(4)算法的優化。作業1、編寫函數,應用cos(x)的麥克勞林展開式,計算cos(x)的值,并將計算結果于matlab自帶的cos函數進行比較。提示采用while…end條件循環。2、產生20個隨機整數,輸出其中小于平均值的偶數。3、按照循環結構計算s=1+2+22+…2n4、編寫函數文件,用于求兩個矩陣的乘積和點積,要求若能同時進行矩陣乘和點積,則輸出兩個值。例,產生方波A,要求方波序列長度為100,方波個數為10個。
A=[0,0,0,0,0,1,1,1,1,1];B=[A,A,A,A,A,A,A,A,A,A];或[B1,B]=meshgrid(A);C=reshape(B,1,100);
在matlab中,矩陣元素按列存儲,即首先存儲矩陣的第一列元素,然后存儲第二列,…,reshape只是改變原矩陣的行數和列數,不改變矩陣個數及原來的存儲結構練習1.從鍵盤上輸入4位數,按照下列規則加密輸出:每位數字都加上7,然后用和除以1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論