matlab程序設計基礎_第1頁
matlab程序設計基礎_第2頁
matlab程序設計基礎_第3頁
matlab程序設計基礎_第4頁
matlab程序設計基礎_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

和其他語言一樣,MATLAB的程序結(jié)構(gòu)也不外三種:順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。5、程序結(jié)構(gòu)和流程控制5.1順序結(jié)構(gòu)順序結(jié)構(gòu)即指順序往下執(zhí)行的程序語句結(jié)構(gòu),其實也就是一組復合的表達式。在MATLAB中,表達式之間可以用分號、逗號或換行來分隔。如前例的函數(shù)文件summ.m和命令文件use.m均為順序結(jié)構(gòu)。5.2分支結(jié)構(gòu)1、MATLAB的分支結(jié)構(gòu)2、分支結(jié)構(gòu)的語句形式及實例分支結(jié)構(gòu)就是由邏輯判斷決定程序執(zhí)行流轉(zhuǎn)方向的一種結(jié)構(gòu)。現(xiàn)有if.else.end和switch.case.end兩種形式。第一類分支結(jié)構(gòu)采用的語句形式有3種:if表達式語句組1endif表達式語句組1else語句組2endif表達式A語句組1elseif表達式B語句組2else語句組3end注意:除直接應用上述三種形式外,第3種結(jié)構(gòu)可擴展,if還可以嵌套。舉例:例5.1輸入數(shù)n,判斷其奇偶性。程序式書寫法:*n=input(‘n=’);ifrem(n,2)==0A=‘even’elseA=‘odd’end更完善的程序式書寫法:n=input(‘n=’);ifisempty(n)==1A=‘empty’elseifrem(n,2)==0A=‘even’elseA=‘odd’end命令行書寫法:n=input(‘n=’);ifisempty(n)==1A=‘empty’,elseifrem(n,2)==0;A=‘even’,else,A=‘odd’,end例5.2寫程序,判斷某一年是否閏年*。C語言程序:main(){intyear,leap;scanf(“%d”,&year);if(year%4==0){if(year%100==0){if(year%400==0)leap=1;elseleap=0;}elseleap=1;}elseleap=0;if(leap)printf(“%dis”,year);elseprintf(“%disnot”,year);printf(“aleapyear.\n”);}MATLAB程序:year=input('year=');ifrem(year,4)==0ifrem(year,100)==0ifrem(year,400)==0leap=1;elseleap=0;endelseleap=1;endelseleap=0;endifleapdisplay('isaleapyear')elsedisplay('isnotaleapyear')endswitch表達式case值1語句組1case值2語句組2……otherwise語句組n第二類分支結(jié)構(gòu)采用的語句形式如下:注意:switch后的表達式的結(jié)果值,通常為標量或字符串。舉例:例5.3用switch語句改寫例3.1。程序式書寫法:n=input(‘n=’);switchmod(n,2)*case1A=‘奇’case0A=‘偶’otherwiseA=‘空’end例5.4給出一百分制成績,要求輸出成績等級‘A’、‘B’、‘C’、‘D’、‘E’。90分以上為‘A’,80~89分為‘B’,70~79分為‘C’,60~69分為‘D’,60分以下為‘E’。C語言程序:main(){intscore,g;scanf(“%d”,&score);g=score/10;switch(g){case10:case9:printf(“A\n”);break;case8:printf(“B\n”);break;case7:printf(“C\n”);break;case6:printf(“D\n”);break;default:printf(“E\n”);}}MATLAB程序:score=input('score=');g=round(score/10-0.5);ifg==10display('A')elseswitchgcase9,display('A')case8,display('B')case7,display('C')case6,display('D')otherwisedisplay('E')endend1、MATLAB的循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)就是執(zhí)行重復運算的一段程序。MATLAB的循環(huán)語句有for.end和while.end兩種形式。2、循環(huán)結(jié)構(gòu)的語句形式及實例5.3循環(huán)結(jié)構(gòu)For循環(huán)結(jié)構(gòu)的語句形式:for變量=初值:[增量]:終值語句組end注意:for還可以嵌套。舉例:例5.5列出構(gòu)成Hilbert矩陣的程序。clear,closeallformatrat,n=input(‘n=‘),fori=1:nforj=1:nh(i,j)=1/(i+j-1);endendh

例5.6求100~200間的全部素數(shù)*。C語言程序:#include<math.h>main(){intm,k,i,n=0;for(m=101;m<=200;m=m+2){k=sqrt(m+1);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1){printf(“%d”,m);n=n+1;}}}MATLAB程序:n=0;x=1:21;form=101:2:200k=round(sqrt(m+1)-0.5);fori=2:kifrem(m,i)==0break,endj=i+1;ifj>=k+1n=n+1;x(n)=m;endendendxWhile循環(huán)結(jié)構(gòu)的語句形式:while表達式語句組end注意:while語句中的表達式通常為關系表達式或邏輯表達式。舉例:例5.7求如下級數(shù)的和:1+1/2+1/3+1/4+…+1/100。s=0;n=1;whilen<=100s=s+1/n;n=n+1;end,s例5.8用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到最后一項的絕對值小于10-6為止。C語言程序:#include<math.h>main(){ints;floatn,t,pi;t=1,pi=0;n=1.0;s=1;while((fabs(t))>1e-6){pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;printf(“pi=%10.6f\n”,pi);}MATLAB程序:t=1;pi=0;n=1;s=1;whileabs(t)>1e-6pi=pi+t;n=n+2;s=-s;t=s/n;endpi=4*pi匿名函數(shù)可以接受多個輸入輸出參數(shù)。創(chuàng)建匿名函數(shù)的格式:fhandle=@(arglist)expr其中:“expr”通常是一個簡單的MATLAB變量表達式,實現(xiàn)函數(shù)的功能;“arglist”是參數(shù)列表;“@”是MATLAB中創(chuàng)建函數(shù)句柄的操作符.匿名函數(shù)實例:>>myfhd1=@(x)(x+x.^2)>>myfhd1(2)ans=6>>myfhd2=@(x,y)(sin(x)+cos(y))>>myfhd2(pi/2,pi/6)ans=1.8660每一個M文件第一行定義的文件就是M文件主函數(shù),一個M文件只能包含一個主函數(shù),通常將M文件名和M文件主函數(shù)名設為一致。在一個函數(shù)內(nèi)部可以定義一個或多個函數(shù),這種定義在其他函數(shù)內(nèi)部的函數(shù)被成為嵌套函數(shù)。嵌套函數(shù)的書寫語法格式如下:functionx=A(p1,p2)…functiony=B(p3)…endend嵌套函數(shù)的互相調(diào)用需要注意和嵌套的層次密切相關,例:functionA(x,y)%外層函數(shù)A(例如主函數(shù))B(x,y);D(y);functionB(x,y)%A的嵌套函數(shù)(B的父函數(shù)為A)C(x);D(y);functionC(x)%B的嵌套函數(shù)(C的父函數(shù)為B)D(x);endend

實例1matlab神經(jīng)網(wǎng)絡工具箱1.1網(wǎng)絡數(shù)據(jù)對象的建立net=newff([xm,xM],[h1,…,hk],{f1,…,fk});xm,xM分別為列向量(行數(shù)為變量個數(shù)),分別存儲每個變量的最小值和最大值。[h1,…,hk]表示網(wǎng)絡各層的節(jié)點數(shù),一共有k層.{f1,…,fk}表示各層使用的傳輸函數(shù),默認為’tansig’,即Sigmoid函數(shù)。還可使用函數(shù)’purelin’,即f(x)=x。其它可看matlab幫助:helpnewff1.2網(wǎng)絡數(shù)據(jù)對象net的屬性net.IW:來自輸入層的加權矩陣。BP網(wǎng)絡只用net.IW{1},表示各個輸入變量對第1層各節(jié)點的加權矩陣。net.LW:來自中間層的加權向量。BP網(wǎng)絡用net.IW{2,1}表示第1隱層個節(jié)點向下一層個節(jié)點的加權矩陣;net.IW{3,2}表示第2隱層向下一層的加權矩陣…net.b:各層的偏移。Net.b{1}表示第1隱層個節(jié)點的偏移…net.trainParam.epochs:最大訓練步數(shù)。不過當誤差準則滿足時,即使沒達到此步數(shù)也停止訓練。缺省為100。net.trainParam.goad:網(wǎng)絡誤差準則,當誤差小于此準則時停止訓練,缺省為0。net.trainFcn:訓練算法。缺省為’trainlm’,即Levenberg-Marquardt算法。還可使用‘traingdx’,即帶動量的梯度下降算法;’traincgf’,即共軛梯度法。其它可看matlab幫助:help->contents->NeuralNetworkToobox->NetworkObjectReference;help(net.trainFcn)1.3網(wǎng)絡的訓練[net,tr,Y1,E]=train(net,X,Y);net是函數(shù)newff建立的數(shù)據(jù)對象。X為n*m的矩陣,n為輸入變量個數(shù),m為樣本數(shù)(即把每個樣本是一個列向量)。Y為k*m的矩陣,k為數(shù)出變量個數(shù)。tr返回訓練的跟蹤信息,tr.epochs為訓練步數(shù),tr.perf為各步目標函數(shù)的值。Y1和E返回網(wǎng)絡最終的輸出和誤差。訓練結(jié)束后可以用plotperf(tr)來繪制目標值隨著訓練步數(shù)變化的曲線。1.4網(wǎng)絡的泛

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論