版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
MATLAB7.0從入門到精通哈爾濱工業(yè)大學(威海)汽車工程學院2/5/20231課程主要內容第1章MATLAB簡介第2章數值運算第3章單元數組和結構第4章字符串第5章符號運算第6章MATLAB繪圖基礎第7章程序設計第8章計算方法的MATLAB實現第9章優(yōu)化設計第10章SIMULINK仿真初探2/5/20232第7章程序設計MATLAB作為一種廣泛應用于科學計算的工具軟件,不僅具有強大的數值計算、符號計算、矩陣運算的能力和豐富的繪圖功能,還可以像C語言、FORTRAN等計算機高級語言一樣進行程序設計,編寫擴展名為.m的M文件,實現各種復雜的運算,同時MATLAB自帶的許多函數就是M文件函數,用戶也可以利用M文件來生成和擴充自己的函數庫。2/5/202337.1腳本和函數所謂M文件,簡單來說就是用戶把要實現的命令寫在一個以.m作為擴展名的文件中,然后由MATLAB系統(tǒng)進行解釋,最后運行出結果。M文件有函數和腳本兩種格式。兩者只是在語法和使用上有些不同。腳本式M文件沒有輸入參數或輸出參數,而函數式M文件有輸入參數和輸出參數;函數可以有零個或多個輸入或輸出變量。2/5/202347.1.1腳本腳本是一個擴展名為.m的文件,其中包含了MATLAB的各種命令,與批處理文件很類似,在MATLAB命令窗口下直接輸入此文件的主文件名,MATLAB可逐一執(zhí)行在此文件內的所有命令,和在命令窗口逐行輸入這些命令一樣。腳本式M文件運行產生的所有變量都是全局變量,運行腳本后,所產生的所有變量都駐留在MATLAB基本工作空間,只要用戶不使用clear命令加以清除,且MATLAB指令窗口不關閉,這些變量將一直保存?;究臻g隨MATLAB的啟動而產生,在關閉MATLAB軟件時該基本空間被刪除。例:huitu0.m2/5/20235huitu0程序結果2/5/202367.1.2函數MATLAB中許多常用的函數都是函數式M文件,使用時,MATLAB獲取傳遞給它的變量,利用操作系統(tǒng)所給的輸入,運算得到要求的結果,然后返回這些結果。函數文件類似于一個黑箱,由函數執(zhí)行的命令以及這些命令所創(chuàng)建的中間變量都是隱含的。運算過程中的中間變量都是局部變量(除特別聲明外),存放在函數本身的工作空間內,不會和MATLAB基本工作空間的變量相互覆蓋,對用戶來說,可見的只是輸入和輸出,因此易于使程序模塊化,特別適合于大型程序代碼。例:huitu.m2/5/20237huitu(1,2,3)程序結果2/5/202387.2M文件的程序結構程序結構一般分為順序結構、循環(huán)結構、分支結構三種。理論上講,只要有以上三種結構就可以構造功能強大的程序。與大多數計算機語言一樣,MATLAB也提供了上述三種程序結構。雖然MATLAB沒有C語言那樣具有豐富的控制結構,但是MATLAB自身的強大功能彌補了這個不足,使用戶在編程時幾乎感覺不到困難。下面分別對這三種結構進行介紹。2/5/202397.2.1順序結構順序結構就是依次順序地執(zhí)行程序的各條語句。順序結構一般不含有其他子結構或控制語句,批處理文件就是典型的順序結構的文件。例:jizhi.m2/5/202310jizhi程序結果2/5/2023117.2.2循環(huán)結構在實際計算中,經常會碰到許多有規(guī)律的重復計算,此時就要對某些語句進行重復執(zhí)行。一組被重復執(zhí)行的語句稱為循環(huán)體,每個循環(huán)語句都要有循環(huán)條件,以判斷循環(huán)是否要繼續(xù)進行下去。MATLAB中的循環(huán)語句包括for循環(huán)與while循環(huán)。2/5/2023121、for循環(huán)for循環(huán)允許一組命令以固定的和預定的次數重復執(zhí)行,for循環(huán)的一般形式如下所示:for循環(huán)變量=數組循環(huán)體(執(zhí)行語句);end在for與end語句之間的執(zhí)行語句是按矩陣(或數組)中的每一列執(zhí)行一次,即在每一次循環(huán)中,矩陣(或數組)元素一個一個地被賦給循環(huán)變量,然后由執(zhí)行語句執(zhí)行。例:for1.m,specmat.m2/5/202313程序結果>>for1x=Columns1through72.03041.80081.51311.41651.71832.51113.7462Columns8through105.26206.85878.38912/5/202314>>specmat(6)ans=1111111234561361015151410101515151515151516151515152/5/202315用for循環(huán)語句需要注意以下事項:(1)不能在for循環(huán)體內重新對循環(huán)變量n賦值來終止循環(huán)的執(zhí)行。(2)for循環(huán)可以進行嵌套循環(huán)。(3)循環(huán)語句內的“;”可防止中間變量的輸出。2/5/2023162、while循環(huán)與for循環(huán)固定的次數求一組命令的值相反,while循環(huán)以不定的次數來求一組命令的值。while循環(huán)的一般形式如下:while表達式循環(huán)體();n+1;(自增)end只要表達式中的元素為真,就執(zhí)行while和end語句之間的命令。通常,表達式給出的是一個標量值,但數組(或矩陣)同樣有效。若為數組(或矩陣),則要求所有的元素都必須為真。例:while1.m2/5/202317程序結果>>while1a=2.46192/5/202318程序實例問題描述:根據統(tǒng)計學的基礎知識分析樣本的平均值和標準差。例:for2.m和while2.m2/5/202319程序結果>>for2Enterthenumberofthepoints:6Enterthevalue:1Enterthevalue:3Enterthevalue:5Enterthevalue:7Enterthevalue:9Enterthevalue:0Themeanofthisdatasetis:4.166667Thestandarddeviationis:3.488075Thenumberofdatais:62/5/202320>>while2Enterthefirstvalue:1Enterthefirstvalue:3Enterthefirstvalue:5Enterthefirstvalue:7Enterthefirstvalue:9Enterthefirstvalue:0Enterthefirstvalue:-1Themeanofthisdatasetis:4.166667Thestandarddeviationis:3.488075Thenumberofdatais:62/5/2023217.2.3分支結構在程序設計中,經常要根據一定的條件來執(zhí)行不同的語句。當某些條件滿足時,只執(zhí)行其中的某個語句或某些語句。在這種情況下,分支結構就會是很好的選擇了。在MATLAB中的分支結構語句包括if-else-end語句與switch-case-otherwise語句。2/5/2023221、if-else-end選擇語句if-else-end選擇語句的結構如下所示:if條件式1表達式1;elseif條件式2表達式2;...else表達式n;end哪一個if后的表達式中值為真,就執(zhí)行該if后的表達式,否則跳過該表達式進行其它判斷。例:ff.m2/5/202323程序結果>>ff(-1)ans=1>>ff(2)ans=0.5000>>ff(8)ans=0.9894>>ff(16)ans=42/5/202324采用plot(x,ff(x))繪分段函數圖。x1=-2:0.01:0;x2=0.5:0.01:5;x3=5.01:0.01:10;x4=10.01:0.01:12;plot(x1,ff(x1))holdonplot(x2,ff(x2))holdonplot(x3,ff(x3))holdonplot(x4,ff(x4))gridon2/5/202325程序結果2/5/202326MATLAB中的選擇語句switch-case-otherwise,是特別讓熟悉C等高級語言的用戶方便地編寫M文件而專門添加的。switch-case-otherwise語句的通用格式如下:swithexpressioncasevalue1statements1;...casevaluenstatementsn;otherwisestatements;end2、switch-case-otherwise分支語句2/5/202327其中,switch-expression給出了開關條件,當有case-expression與之匹配時,就執(zhí)行其后的語句,如果沒有case-expression與之匹配,就執(zhí)行otherwise后面的語句。在執(zhí)行過程中,只有一個case命令被執(zhí)行,當執(zhí)行完命令后,程序就跳出分支結構,執(zhí)行end下面的語句。例:fm.m2/5/202328程序結果>>fm(0)ans=20>>fm(1)ans=40>>fm(2)ans=60>>fm(3)ans=80>>fm(5)ans=1002/5/202329工程實例問題描述:向上斜拋的小球,具有如下的運動模型,仿真小球的運動軌跡。例:ball.m2/5/202330程序結果>>ballEntertheinitialvelocity:20Rangeversusangletheta:00.000057.07321013.93161520.36662026.18282531.20343035.27603538.27674040.11442/5/2023314540.73325040.11445538.27676035.27606531.20347026.18287520.36668013.9316857.0732900.0000Maxrangesis40.7332at45degrees.2/5/202332圖形結果2/5/2023337.3程序流控制在許多程序設計語言中,經常要碰到提前終止循環(huán)、跳出程序、顯示出錯信息等,此時就需要用到控制程序流的命令。在MATLAB中,同樣有這樣的程序控制流命令。下面逐一介紹MATLAB中的程序流的控制命令。2/5/2023341、continue命令continue命令經常與for或while語句一起使用,其作用是結束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判斷。注:當條件滿足時,continue語句才被調用,跳出后面的語句,循環(huán)繼續(xù),條件不滿足則繼續(xù)執(zhí)行后面的程序。例:continue1.m2/5/202335程序結果>>continue1357911468101257911136810121479111315810121416911131517101214161811131517191214161820
2/5/2023362、break命令break命令也經常與for或while等語句一起使用,其作用是終止本次循環(huán),跳出最內層的循環(huán)。使用break命令可以不必等到循環(huán)的自然結束,而是根據條件,強制退出循環(huán)。這在很多情況下是必須的。注:當條件滿足時,break語句才被調用,系統(tǒng)將在循環(huán)尚未結束時跳出當前循環(huán),條件不滿足則繼續(xù)執(zhí)行后面的程序。例:jitu.m2/5/202337程序結果>>jituThenumberofchickenis22.Thenumberofrabbitis14.2/5/2023383、return命令return命令能使當前正在運行的函數正常退出,并返回調用它的函數,繼續(xù)運行。這個語句經常用于函數的末尾,以正常結束函數的運行。當然,也可用于函數的其他地方,對某些條件進行判斷,如果條件不符合要求,調用return語句終止當前運行,并返回調用它的函數或環(huán)境。實際上,MATLAB中此語句的作用與其他的程序設計語言中的作用相同。例:dreturn.m2/5/202339程序實例>>dreturn('2')ans=5>>dreturn('')ans=5>>dreturn('')ans=12/5/2023404、echo語句通常在MATLAB中執(zhí)行M文件時,在命令窗口是看不到執(zhí)行過程的。但在特殊情況下,比如需要對M文件演示時,要求M文件的每條命令都要顯示出來,此時用echo命令就可以實現這樣的操作。對于腳本式M文件與函數式M文件,echo命令略有不同。對于腳本式M文件,可以用以下方式來實現:echoon%顯示其后所有執(zhí)行的命令文件的指令echooff%不顯示其后所有執(zhí)行的命令文件的指令echo%在上述兩種情況下進行切換對于函數式M文件,可以用以下方式來實現:echofilenameon%使filename指定的M文件的執(zhí)行指令顯示出來echofilenameoff%使filename指定的M文件的執(zhí)行指令不顯示出來echoonall%其后的所有M文件的執(zhí)行指令顯示2/5/2023415、error語句在進行程序設計時,許多情況下有錯誤出現,此時如果能把錯誤信息顯示出來,那樣就會使用戶了解到是什么原因引起錯誤,以采取適合的方式防止錯誤的再次發(fā)生。MATLAB中的error(‘錯誤信息?就用于實現上述功能。此命令能顯示錯誤信息并終止當前函數的運行,將控制信息返回到鍵盤。該指令用來指示出錯信息并終止當前函數的運行。error(‘message’)類似的是warning,區(qū)別是warning之后程序繼續(xù)運行。2/5/2023426、try...catch語句try...catch語句的作用與上面的error語句類似,是用于對異常進行處理的命令。把有可能引起異常的語句放在try控制塊中,這樣當try控制塊中statement語句引起異常時,catch控制塊就可以捕獲它,并針對不同的錯誤類型,進行不同的處理。它與C++程序設計語言中的try...catch命令作用一樣。try...catch命令的調用格式如下:try(commands1),catch(commands2),end組命令1總被執(zhí)行,當執(zhí)行出現錯誤時,catch控制塊就可捕獲它,執(zhí)行組命令2,針對不同錯誤類型進行不同的處理??捎胠asterr函數查詢出錯原因。注意try和catch控制塊中的語句之間用逗號隔開。例:chucuo.m2/5/202343程序結果>>chucuoa_end=492ans=Attemptedtoaccessa(4,:);indexoutofboundsbecausesize(a)=[3,3].2/5/2023447、input語句input命令用來提示用戶從鍵盤輸入數據、字符串或表達式,并接受輸入值。r=input(‘prompt’)在屏幕上顯示提示信息prompt,等待用戶輸入,并將值賦給r,直接回車則輸出空矩陣。r=input(‘prompt’,’s’)返回的字符串作為文本變量而不作為變量名或者數值。例:test.m2/5/202345程序結果>>testDoyouwantmore?Y/N[Y]:Yyouhaveselectedthefirstcharacter>>testDoyouwantmore?Y/N[Y]:Nyouhaveselectedthesecondone>>testDoyouwantmore?Y/N[Y]:syouhaveselectedthesecondone2/5/2023468、pause命令pause命令用于暫時終止程序的運行,等待用戶按任意鍵繼續(xù)進行。pause暫停M文件的執(zhí)行,按任意鍵繼續(xù)pause(n)終止程序n秒,n是任意實數pauseon允許后面的pause命令起作用pauseoff使后面的pause命令不起作用例:pause1.m2/5/2023477.4腳本文件腳本文件只是逐條的解釋文件中的程序條,與命令窗口直接輸入一樣,只是它具有了存儲能力,且可以方便的多次運行該程序段,在命令窗口中只需輸入存儲的文件名即可,且存儲的文件名沒有特殊要求。腳本文件中可以調用函數,只需調用函數名即可。2/5/2023487.5函數文件函數的格式必須加function,并且M文件的存儲名必須與函數名相同。一般函數都有輸入和輸出。2/5/202349謝謝!2/5/202350huitu0.mx=-pi:0.01:pi;y=cos(x);plot(x,y);gridon返回2/5/202351huitu.mfunctionf=huitu(a,b,c)x=-pi:0.01:pi;f=a*sin(b*x+c);plot(x,f);gridon返回2/5/202352jizhi.mx=-pi:0.01:pi;y=sin(x)+sin(2*x)-cos(3*x);h=plot(x,y);x=get(h,'XData');y=get(h,'YData');imin=find(min(y)==y);imax=find(max(y)==y);holdontext(x(imin),y(imin),['minimum=',num2str(y(imin))]);text(x(imax),y(imax),['maximum=',num2str(y(imax))]);gridonplot(x(imin),y(imin),'o')plot(x(imax),y(imax),'*')返回2/5/202353for1.mforn=1:10x(n)=exp(n/5)+cos(n*pi/5);endx返回2/5/202354specmat.mfunctionA=specmat(n)A=ones(n);forr=1:nforc=1:nifr>1&c>1s=A(r-1,c)+A(r,c-1);ifs<20A(r,c)=s;elseA(r,c)=max(A(r-1,c),A(r,c-1));endendendend返回2/5/202355while1.mn=1;a=0;whilen<10a=a+log(n)/n;n=n+1;enda返回2/5/202356for2.msum1=0;sum2=0;n=input('Enterthenumberofthepoints:');ifn<2disp('Atleast2valuesmustbeentered.');elsefori=1:nx=input('Enterthevalue:');sum1=sum1+x;sum2=sum2+x^2;endxvar=sum1/n;std_dev=sqrt((n*sum2-sum1^2)/(n*(n-1)));fprintf('Themeanofthisdatasetis:%f\n',xvar);fprintf('Thestandarddeviationis:%f\n',std_dev);fprintf('Thenumberofdatais:%d\n',n);end返回2/5/202357while2.mn=0;sum1=0;sum2=0;x=input('Enterthefirstvalue:');whilex>=0n=n+1;sum1=sum1+x;sum2=sum2+x^2;x=input('Enterthefirstvalue:');endxvar=sum1/n;std_dev=sqrt((n*sum2-sum1^2)/(n*(n-1)));fprintf('Themeanofthisdatasetis:%f\n',xvar);fprintf('Thestandarddeviationis:%f\n',std_dev);fprintf('Thenumberofdatais:%d\n',n);返回2/5/202358ff.mfunctiony=ff(x)ifx<=0y=x.^2;elseif0<x&x<=5y=1./x;elseif5<x&x<=10y=sin(x);elseifx>10y=x./4;end返回2/5/202359fm.mfunctionf=fm(n)switchncase0f=20;case1f=40;case2f=60;case3f=80;otherwisef=100;end返回2/5/202360ball.mconv=pi/180;g=-9.82;v0=input('Entertheinitialvelocity:');range=zeros(1,91);%計算最大的水平距離。fori=1:91theta=i-1;vx0=v0*cos(theta*conv);vy0=v0*sin(theta*conv);maxtime=-2*vy0/g;range(i)=vx0*maxtime;end2/5/202361%顯示計算水平距離的列表。fprintf('Rangeversusangletheta:\n');fori=1:5:91theta=i-1;fprintf('%2d%8.4f\n',theta,range(i));end%計算最大的角度和水平距離。[maxrangeindex]=max(range);maxangle=index-1;fprintf('\nMaxrangesis%8.4fat%2ddegrees.\n',maxrange,maxangle);2/5/202362%繪制軌跡圖形。fori=5:10:80theta=i;vx0=v0*cos(theta*conv);vy0=v0*sin(theta*conv);maxtime=-2*vy0/g;%計算小球軌跡的x,y坐標數值。x=zeros(1,21);y=zeros(1,21);forj=1:21time=(j-1)*maxtime/20;x(j)=vx0*time;y(j)=vy0*time+0.5*g*time^2;endplot(x,y,'g')ifi==5holdon;endend2/5/202363%添加圖形的標題和坐標軸名稱。title('TrajectoryofBallvsInitialAngle\theta');xlabel('x(meters)');ylabel('y(meters)');axis([0max(range)+50-v0^2/2/g]);gridon2/5/202364%繪制最大水平的軌跡圖形。vx0=v0*cos(maxangle*conv);vy0=v0*sin(maxangle*conv);maxtime=-2*vy0/g;x=zeros(1,21);y=zeros(1,21)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學實驗室安全知識考試題庫100題(含答案)DVW
- 二零二五年度個人智能制造技術入股協(xié)議3篇
- 二零二五年度山地開發(fā)土方工程項目施工與生態(tài)保護合同3篇
- 2025版綠色建筑解決方案協(xié)議詢價供貨合同書3篇
- 人教版八年級上冊期中物理試題及答案
- 中國電信合同書
- 2025-2030全球隔音彈力織物墻系統(tǒng)行業(yè)調研及趨勢分析報告
- 2023年-2024年崗位安全教育培訓試題及完整答案(易錯題)
- 2024年安全管理人員安全教育培訓試題附參考答案(達標題)
- 23-24年項目部安全培訓考試題及答案 全面
- 2019版新人教版高中英語必修+選擇性必修共7冊詞匯表匯總(帶音標)
- 新譯林版高中英語必修二全冊短語匯總
- 基于自適應神經網絡模糊推理系統(tǒng)的游客規(guī)模預測研究
- 河道保潔服務投標方案(完整技術標)
- 品管圈(QCC)案例-縮短接臺手術送手術時間
- 精神科病程記錄
- 閱讀理解特訓卷-英語四年級上冊譯林版三起含答案
- 清華大學考博英語歷年真題詳解
- 人教版三年級上冊口算題(全冊完整20份 )
- 屋面及防水工程施工(第二版)PPT完整全套教學課件
- 2023年高一物理期末考試卷(人教版)
評論
0/150
提交評論