第2章MATLAB語言程序設(shè)計基礎(chǔ)_第1頁
第2章MATLAB語言程序設(shè)計基礎(chǔ)_第2頁
第2章MATLAB語言程序設(shè)計基礎(chǔ)_第3頁
第2章MATLAB語言程序設(shè)計基礎(chǔ)_第4頁
第2章MATLAB語言程序設(shè)計基礎(chǔ)_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第二章 MATLAB 語言程序設(shè)計基礎(chǔ) MATLAB 語言的簡潔高效性 MATLAB 語言的科學運算功能 MATLAB 語言的繪圖功能 MATLAB 龐大的工具箱與模塊集 MATLAB 強大的動態(tài)系統(tǒng)仿真功能本章主要內(nèi)容 MATLAB 程序設(shè)計語言基礎(chǔ) 基本數(shù)學運算 MATLAB語言流程控制 MATLAB 函數(shù)的編寫 二維圖形繪制 三維圖形繪制2.1 MATLAB 程序設(shè)計語言基礎(chǔ) MATLAB 語言的變量命名規(guī)則命名規(guī)則是:(1)變量名必須是不含空格的單個詞;(2)變量名區(qū)分大小寫;(3)變量名最多不超過19個字符;(4)變量名必須以字母打頭,之后可以是 任意字母、數(shù)字或下劃線,變量名中 不

2、允許使用標點符號MATLAB 的保留常量特殊變量 取 值 ans 用于結(jié)果的缺省變量名 pi 圓周率 eps 計算機的最小數(shù),當和 1 相加就產(chǎn)生一個比1大的數(shù) flops 浮點運算數(shù) inf 無窮大,如1/0 NaN 不定量,如0/0 i,j i=j=1 nargin 所用函數(shù)的輸入變量數(shù)目 nargout 所用函數(shù)的輸出變量數(shù)目 realmin 最小可用正實數(shù) realmax 最大可用正實數(shù) 數(shù)學運算符號及標點符號數(shù)學運算符號及標點符號(1)MATLAB的每條命令后,若為逗號或無標點逗號或無標點符號, 則顯示命令的結(jié)果;若命令后為分號分號,則禁止顯示結(jié)果. (2)“%” 后面所有文字為注釋

3、. (3) “.”表示續(xù)行.+ 加法運算,適用于兩個數(shù)或兩個同階矩陣相加. 減法運算 * 乘法運算 .* 點乘運算 / 除法運算 ./ 點除運算 乘冪運算 . 點乘冪運算 反斜杠表示左除. 雙精度數(shù)值變量 IEEE標準,64位 (占8字節(jié)),11指數(shù)位,53數(shù)值位和一個符號位 double( ) 函數(shù)的轉(zhuǎn)換 其他數(shù)據(jù)類型 uint8,無符號8位整形數(shù)據(jù)類型,值域為0至255,常用于圖像表示和處理。(節(jié)省存儲空間,提高處理速度) int8( ), int16( ), int32( ),uint16( ), uint32( ) 符號型,sym(A), 常用于公式推導、解析解解法 符號變量聲明 sy

4、ms var_list var_props 例:syms a b real syms c positive 符號型數(shù)值可采用變精度函數(shù)求值 vpa(A), 或 vap(A,n) vpa(pi)ans = 3.1415926535897932384626433832795 vpa(pi,60)ans =3.14159265358979323846264338327950288419716939937510582097494 字符串型數(shù)據(jù):用單引號括起來 。 多維數(shù)組:是矩陣的直接擴展,多個下標。 單元數(shù)組:將不同類型數(shù)據(jù)集成到一個變量名下面,用表示;例:用Ai,j可表示單元數(shù)組A的第i行,第j列

5、的內(nèi)容。 類與對象:允許用戶自己編寫包含各種復雜詳細的變量,可以定義傳遞函數(shù)。MATLAB支持的其他數(shù)據(jù)結(jié)構(gòu) 直接賦值語句 賦值變量賦值表達式 例: a=pi2 a = 9.8696 例:表示矩陣 B=1+9i,2+8i,3+7j;4+6j 5+5i,6+4i;7+3i,8+2j 1iB = 1.0000 + 9.0000i 2.0000 + 8.0000i 3.0000 + 7.0000i 4.0000 + 6.0000i 5.0000 + 5.0000i 6.0000 + 4.0000i 7.0000 + 3.0000i 8.0000 + 2.0000i 0 + 1.0000iMATLAB

6、 的基本語句結(jié)構(gòu) 函數(shù)調(diào)用語句返回變量列表函數(shù)名(輸入變量列表) 例:a,b,c=my_fun(d,e,f,c) 冒號表達式 v=s1:s2:s3 該函數(shù)生成一個行向量v,其中s1是起始值, s2是步長(若省略步長為1), s3是最大值。 例:用不同的步距生成 (0,p) 間向量。 v1=0:0.2:piv1 = Columns 1 through 9 0 0.2000 0.4000 0.6000 0.8000 1.0000 1.2000 1.4000 1.6000 Columns 10 through 16 1.8000 2.0000 2.2000 2.4000 2.6000 2.8000

7、3.0000 v2=0:-0.1:pi %步距為負,不能生成向量,得出空矩陣v2 = Empty matrix: 1-by-0 v3=0:piv3 = 0 1 2 3 v4=pi:-1:0 逆序排列構(gòu)成新向量v4 = 3.1416 2.1416 1.1416 0.1416 v5=0:0.4:pi,piv5 = 0 0.4000 0.8000 1.2000 1.6000 2.0000 2.4000 2.8000 3.1416 基本語句格式 B=A(v1,v2) v1、 v2分別表示提取行(列)號構(gòu)成的向量。例: A=1,2,3,4;3,4,5,6;5,6,7,8;7,8,9,0A = 1 2 3

8、 4 3 4 5 6 5 6 7 8 7 8 9 0 B1=A(1:2:end,:) 提取全部奇數(shù)行、所有列。B1 = 1 2 3 4 5 6 7 8子矩陣提取 B2=A(3,2,1,2,3,4) 提取3,2,1行、2,3,4列構(gòu)成子矩陣。 A =B2 = 1 2 3 4 6 7 8 3 4 5 6 4 5 6 5 6 7 8 2 3 4 7 8 9 0 B3=A(:,end:-1:1) 將A矩陣左右翻轉(zhuǎn),即最后一列排在最前面。B3 = 4 3 2 1 6 5 4 3 8 7 6 5 0 9 8 7 矩陣表示 矩陣轉(zhuǎn)置 數(shù)學表示 (若A有復數(shù)元素,先轉(zhuǎn)置再取各元素共軛復數(shù)值,Hermit轉(zhuǎn)置)

9、 MATLAB 求解 BA. C=A2.2 基本數(shù)學運算矩陣的代數(shù)運算 矩陣加減法 C=A+B D=A-B 注意維數(shù)是否相等 注意其一為標量的情形 矩陣乘法 數(shù)學表示 MATLAB 表示 C=A*B 注意相容性 矩陣除法 矩陣左除:AX = B,求 X MATLAB 求解:X=AB 若A為非奇異方陣,則 X=A-1B 最小二乘解(若A不是方陣) 矩陣右除:XA = B,求 X MATLAB求解:X=B/A 若A為非奇異方陣,則 X=BA-1 最小二乘解(若A不是方陣) 矩陣翻轉(zhuǎn) 左右翻轉(zhuǎn) B=fliplr(A) 上下翻轉(zhuǎn) C=flipud(A) 旋轉(zhuǎn) 90o (逆時針) D=rot90(A)

10、如何旋轉(zhuǎn)180o? D=rot180(A) ? Undefined function or variable rot180. D=rot90(rot90(A)矩陣乘方 A 為方陣,求 MATLAB 實現(xiàn): F=Ax,1iji mjba 1,ijni jca 點運算-矩陣對應元素的直接運算數(shù)學表示 : MATLAB 實現(xiàn): C=A.*B例: A=1,2,3;4,5,6;7,8,0; B=A.AB = 1 4 27 256 3125 46656 823543 16777216 1 C=A.*AC = 1 4 9 16 25 36 49 64 0 邏輯變量: 當前版本有邏輯變量 對 double 變

11、量來說,非 0 表示邏輯 1 邏輯運算(相應元素間的運算) 與運算 A&C 或運算 A|C 非運算 A 異或運算 xor(A,C)矩陣的邏輯運算 各種允許的比較關(guān)系 , =, , AA = 1 2 3 4 5 6 7 8 0 find(A=5), 大于或等于5元素的下標 ans = 3 5 6 8矩陣的比較運算 i,j=find(A=5);i,j 顯示行標,列標ans = 3 1 2 2 3 2 2 3 all(A=5) 某列元素全大于或等于5時,相應元素為1,否則為0。ans = 0 0 0 any(A=5) 某列元素中含有大于或等于5時,相應元素為1,否則為0。ans = 1 1 1解析結(jié)

12、果的化簡與變換MATLAB 實現(xiàn): s1=simple(s) 從各種方法中自動選擇最簡格式 s1,how=simple(s) 化簡并返回實際采用的化簡方法 其中,s為原始表達式,s1為化簡后表達式,how為采用的化簡方法。 其他常用化簡函數(shù)(信息與格式可用 help命令得出) collect( ) 合并同類項 expand( ) 展開多項式 factor( ) 因式分解 numden( ) 提取多項式的分子和分母 sincos( ) 三角函數(shù)的化簡例: syms s; P=(s+3)2*(s2+3*s+2)*(s3+12*s2+48*s+64) ;P =(s+3)2*(s2+3*s+2)*(s

13、3+12*s2+48*s+64) simple(P) % 一系列化簡嘗試,得出計算機認為的最簡形式ans = (s+3)2*(s+2)*(s+1)*(s+4)3 a,m=simple(P) % 返回化簡方法為因式分解方法,用 factor( ) 函數(shù)將得同樣結(jié)果 a = (s+3)2*(s+2)*(s+1)*(s+4)3m =factor expand(P) ans = s7+21*s6+185*s5+883*s4+2454*s3+3944*s2+3360*s+1152 變量替換 其中,f為原表達式,用x*替換x得出新的。例:求其 Taylor 冪級數(shù)展開 syms a b c d t; %

14、假設(shè)這些變量均為符號變量 f=cos(a*t+b)+sin(c*t)*sin(d*t); % 定義給定函數(shù) f(t) f1=subs(f,a,b,c,d,t,0.5*pi,pi,0.25*pi,0.125*pi,4)f1 = -1.0000*111(,)fsubs f xx*11212(,)nnfsubs fx xxxxx基本數(shù)論運算下取整、上取整、四舍五入、離0近方向取整、最簡有理數(shù)、求模的余數(shù)、最大公約數(shù)、最小公倍數(shù)、質(zhì)因數(shù)分解、判定是否為質(zhì)數(shù)例:對下面的數(shù)據(jù)進行取整運算 -0.2765,0.5772,1.4597,2.1091,1.191,-1.6187 A=-0.2765,0.5772

15、,1.4597,2.1091,1.191,-1.6187; floor(A) % 向 -inf 方向取整ans = -1 0 1 2 1 -2 ceil(A) % 向 +inf 方向取整ans = 0 1 2 3 2 -1 round(A) %取最近的整數(shù)ans = 0 1 1 2 1 -2 fix(A) %向 0 的方向取整ans = 0 0 1 2 1 -1 例:3x3 Hilbert 矩陣,試用 rat() 函數(shù)變換 A=hilb(3); n,d=rat(A) 將元素變換成最小有理數(shù),n,d分別為分子、分母矩陣。n = 1 1 1 1 1 1 1 1 1d = 1 2 3 2 3 4 3

16、 4 5 例:1856120,1483720,最大公約數(shù)、最小公倍數(shù),質(zhì)因數(shù)分解。 format long m=1856120; n=1483720; gcd(m,n), lcm(m,n)求m,n的最大公約數(shù)、最小公倍數(shù)。ans = 1.0e+009 * 0.00000196000000 1.40508284000000 factor(lcm(n,m) 對lcm(n,m)進行質(zhì)因數(shù)分解。ans = 2 2 2 5 7 7 757 947 例:1-100間質(zhì)數(shù) A=1:10; isprime(A) 若向量A中某個整數(shù)值為質(zhì)數(shù),則相應位置為1,其他為零。ans = 0 1 1 0 1 0 1 0

17、0 0 A=1:100; B=A(isprime(A)B = Columns 1 through 16 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 Columns 17 through 25 59 61 67 71 73 79 83 89 97 rem(A,C) %A中元素對C中元素求模得出的余數(shù)。 循環(huán)結(jié)構(gòu) for 結(jié)構(gòu) while 結(jié)構(gòu)2.3 MATLAB 語言流程控制例:用循環(huán)求解 s=0;for i=1:100 s=s+i;end s=0; i=1;while (i sum(1:100)ans = 5050例:用循環(huán)求解求最小的 m s=0;

18、 m=0;while (s tic, s=0; for i=1:100000, s=s+1/2i+1/3i; end; tocelapsed_time = 1.1820 tic, i=1:100000; s=sum(1./2.i+1./3.i); toc 向量化所需時間少elapsed_time = 0.3010 i=1:10;s=1./2.i+1./3.i, ss=sum(1./2.i+1./3.i)s = 0.8333 0.3611 0.1620 0.0748 0.0354 0.0170 0.0083 0.0041 0.0020 0.0010ss = 1.4990轉(zhuǎn)移結(jié)構(gòu)例:用循環(huán)求解求最

19、大的 m s=0;for i=1:10000 s=s+i; if s10000, break; endend ii = 141開關(guān)結(jié)構(gòu) 和 C 語言的區(qū)別當開關(guān)表達式的值等于某表達式,執(zhí)行該語句后結(jié)束該結(jié)構(gòu),不用 break當需要在開關(guān)表達式滿足若干個表達式之一時執(zhí)行某一程序段,則用單元形式 (用大括號把這些表達式括起來,用逗號分隔)otherwise 語句,不是C語言中的 default(但與之等價)程序的執(zhí)行結(jié)果和各個case順序無關(guān)case 語句中條件不能重復,否則列在后面的條件將不能執(zhí)行 全新結(jié)構(gòu)(首先試探性執(zhí)行語句1,若執(zhí)行過程中有錯,將錯誤信息賦給保留的lasterr變量,并終止這

20、段語句的執(zhí)行,轉(zhuǎn)而執(zhí)行語句2。) 應將不保險但快的算法放在語句1,保險的放在語句2;或語句2說明語句1失效原因。2.3.4 試探結(jié)構(gòu) 函數(shù)是 MATLAB 編程的主流方法 除了函數(shù)外,還可以采用 M-script(M腳本文件) 文件 M-script 適合于小規(guī)模運算例:若最大值不為 10000,需修改程序?qū)?m 和 10000 值的設(shè)置,不適合于M-script2.4 MATLAB 函數(shù)的編寫2.4.1 MATLAB 語言的函數(shù)的基本結(jié)構(gòu) nargin, nargout 分別表示輸入和返回變量的實際個數(shù),此為MATLAB保留變量,只要進入該函數(shù), MATLAB就將自動生成這兩個變量。vara

21、rgin, varargout 輸入、輸出變量列表(可變輸入輸出個數(shù))。例:前面的要求,m, 10000 function m,s=findsum(k) s=0; m=0; while (s m1,s1=findsum(145323)m1 = 539s1 = 145530 無需修改程序例: 若只給出一個輸入?yún)?shù),則會自動生成一個方陣 在函數(shù)中給出合適的幫助信息 檢測輸入和返回變量的個數(shù) edit myhilb,1/(1)i jhijfunction A=myhilb(n, m)%產(chǎn)生A=MYHILB(N,M)或A=MYHILB(N);if nargout1, error(Too many ou

22、tput arguments.); endif nargin=1, m=n; elseif nargin=0 | nargin2 error(Wrong number of input arguments.); endA1=zeros(n,m);for i=1: n for j=1:m A1(i,j)=1/(i+j-1);end, endif nargout=1, A=A1; elseif nargout=0, disp(A1); end help myhilb 產(chǎn)生A=MYHILB(N,M)或A=MYHILB(N); A=myhilb(3,4)A = 1.0000 0.5000 0.3333

23、 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 A=myhilb(4)A = 1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 0.2500 0.2000 0.1667 0.1429 A=myhilb(3,4,5)? Error using = myhilbToo many input arguments. 例:函數(shù)的遞歸調(diào)用:階乘function k=my_fact(n)if nargin=1,

24、error(輸入變量個數(shù)錯誤,只能有一個輸入變量); endif nargout1, error(輸出變量個數(shù)過多); endif abs(n-floor(n)eps | n1 % 如果 n1, 進行遞歸調(diào)用 k=n*my_fact(n-1);elseif any(0 1=n) % 0!=1!=1 k=1;end my_fact(11)ans = 39916800 其實MATLAB提供了求取階乘的函數(shù)factorial(),其核心算法為 prod(1:n),從結(jié)構(gòu)上更簡單、直觀,速度也更快。 prod(1:11)ans = 39916800 prod(1:3:11)ans = 280例: co

25、nv( ) 可以計算兩個多項式的積用 varargin 實現(xiàn)任意多個多項式的積function a=convs(varargin) a=1; for i=1:length(varargin), a=conv(a,varargini); end P=1 2 4 0 5; Q=1 2; F=1 2 3; D=convs(P,Q,F)D = 1 6 19 36 45 44 35 30 poly2sym(D)ans =x7+6*x6+19*x5+36*x4+45*x3+44*x2+35*x+302.4.2 可變輸入輸出個數(shù) E=conv(conv(P,Q),F) % 若采用 conv() 函數(shù),則需要

26、嵌套調(diào)用E = 1 6 19 36 45 44 35 30 poly2sym(E)ans =x7+6*x6+19*x5+36*x4+45*x3+44*x2+35*x+30 G=convs(P,Q,F,1,1,1,3,1,1)G = 1 11 56 176 376 578 678 648 527 315 902.4.3 inline 函數(shù)和匿名函數(shù) f=inline(sin(x.2+y.2),x,y)MATLAB 7.022( , )sin()f x yxy2.5 二維圖形繪制2.5.1 二維圖形繪制基本語句構(gòu)造向量:例:選項為紅色點劃線且每個轉(zhuǎn)折點用五角星表示r-.pentagram例: x=

27、-pi : 0.05: pi; % 以 0.05 為步距構(gòu)造自變量向量 y=sin(tan(x)-tan(sin(x); % 求出各個點上的函數(shù)值 plot(x,y) plot(x,y,r-.pentagram) x=-pi:0.05:-1.8,-1.801:.001:-1.2, -1.2:0.05:1.2,. 1.201:0.001:1.8, 1.81:0.05:pi; % 以變步距方式構(gòu)造自變量向量 y=sin(tan(x)-tan(sin(x); % 求出各個點上的函數(shù)值 plot(x,y) % 繪制曲線例: x=-2:0.02:2; % 生成自變量向量 y=1.1*sign(x).*(

28、abs(x)1.1) + x.*(abs(x) plot(-2,-1.1,1.1,2,-1.1,-1.1,1.1,1.1)圖形元素屬性獲取與修改 圖形中,每條曲線、坐標軸、圖形窗口分別是一個對象??捎胹et( )函數(shù)設(shè)置對象的屬性,用get( )函數(shù)獲得對象的某個屬性。這兩個語句在界面編程中特別有用。2.5.2 其他二維圖形繪制語句例:繪制極坐標曲線 theta=0:0.01:6*pi; rho=5*sin(4*theta/3); polar(theta,rho) rho=5*sin(theta/3); polar(theta,rho) 周期確定,可以采用試湊方法例:用不同曲線繪制函數(shù)表示正弦

29、曲線 t=0:.2:2*pi; y=sin(t); % 先生成繪圖用數(shù)據(jù) subplot(2,2,1), stairs(t,y) % 分割窗口,在左上角繪制階梯曲線 subplot(2,2,2), stem(t,y) % 火柴桿曲線繪制 subplot(2,2,3), bar(t,y) % 條型圖繪制 subplot(2,2,4), semilogx(t,y) % 橫坐標為對數(shù)的曲線2.5.3 隱函數(shù)繪制及應用 隱函數(shù) 例: ezplot(x2 *sin(x+y2) +y2*exp(x+y)+5*cos(x2+y) x自選 ezplot(x2 *sin(x+y2) +y2*exp(x+y)+5

30、*cos(x2+y),-10 10)2.6 三維圖形繪制 三維曲線繪制 stem3, fill3, bar3 等例:參數(shù)方程 t=0:.1:2*pi; % 構(gòu)造 t 向量,注意下面的點運算 x=t.3.*sin(3*t).*exp(-t); y=t.3.*cos(3*t).*exp(-t); z=t.2; plot3(x,y,z), grid % 三維曲線繪制 stem3(x,y,z); hold on; plot3(x,y,z), grid2.6.2 三維曲面繪制 一般曲面繪制 mesh( )繪制網(wǎng)格圖,surf( )繪制表面圖。 其他函數(shù),光照下 surfl( ), surfc( ),瀑布

31、型waterfall( ) 等高線繪制 contour( ), contour3( )例:Butterworth 濾波器 x,y=meshgrid(0:31); n=2; D0=200; D=sqrt(x-16).2+(y-16).2); % 求距離 z=1./(1+D.(2*n)/D0); mesh(x,y,z), % 計算并繪制濾波器 axis(0,31,0,31,0,1) % 重新設(shè)置坐標系,增大可讀性 surf(x,y,z) % 繪制三維表面圖 contour3(x,y,z,30) 三維等高線圖,30等高線條數(shù) 例:試繪制出二元函數(shù) x,y=meshgrid(-2:.1:2); z=1./(

溫馨提示

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

評論

0/150

提交評論