matlab在科學計算中的應用2.ppt_第1頁
matlab在科學計算中的應用2.ppt_第2頁
matlab在科學計算中的應用2.ppt_第3頁
matlab在科學計算中的應用2.ppt_第4頁
matlab在科學計算中的應用2.ppt_第5頁
免費預覽已結(jié)束,剩余76頁可下載查看

下載本文檔

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

文檔簡介

1、第二章 MATLAB 語言程序設計基礎,MATLAB 語言的簡潔高效性 MATLAB 語言的科學運算功能 MATLAB 語言的繪圖功能 MATLAB 龐大的工具箱與模塊集 MATLAB 強大的動態(tài)系統(tǒng)仿真功能,MATLAB 語言是當前國際上自動控制領域的首選計算機語言,也是很多理工科專業(yè)最適合的計算機數(shù)學語言。通過學習可更深入理解和掌握數(shù)學問題的求解思想,提高求解數(shù)學問題的能力,為今后其他專業(yè)課程的學習提供幫助。 MATLAB語言的優(yōu)勢:,本章主要內(nèi)容,MATLAB 基本命令簡介 MATLAB 程序設計語言基礎 基本數(shù)學運算 MATLAB語言流程控制 MATLAB 函數(shù)的編寫 二維圖形繪制 三

2、維圖形繪制,2.1 MATLAB 基本命令簡介,MATLAB 通用命令,Matlab常用的窗口幫助命令,help 命令 直接輸入 help, MATLAB 將列出所有的幫助主題,每個幫助主題對應于 MATLAB搜索路徑中的一個目錄; help 后加幫助主題,可獲得指定幫助主題的幫助信息; help 后加函數(shù)名; help 后加命令名,將得到指定命令的用法;,demo 命令,helpwin 命令用于打開 MATLAB 的幫助文件窗,lookfor 命令允許用戶通過完整的或部分關鍵字來搜索要查找的內(nèi)容 who 和 whos 的作用是列出在 MATLAB 工作內(nèi)存中駐留的變量名 exist 命令用來

3、查找或檢查變量和函數(shù)的存在性,2.2 MATLAB 程序設計語言基礎,MATLAB 語言的變量命名規(guī)則是: (1)變量名必須是不含空格的單個詞; (2)變量名區(qū)分大小寫; (3)變量名最多不超過19個字符; (4)變量名必須以字母打頭,之后可以是 任意字母、數(shù)字或下劃線,變量名中 不允許使用標點符號,MATLAB 的保留常量,數(shù)學運算符號及標點符號,(1)MATLAB的每條命令后,若為逗號或無標點符號,則顯示命令的結(jié)果;若命令后為分號,則禁止顯示結(jié)果. (2)“%” 后面所有文字為注釋. (3) “.”表示續(xù)行.,數(shù)學運算符號及標點符號,雙精度數(shù)值變量 IEEE標準,64位 (占8字節(jié)),11

4、指數(shù)位,53數(shù)值位和一個符號位 double( ) 函數(shù)的轉(zhuǎn)換 其他數(shù)據(jù)類型 uint8( ),無符號8位整形數(shù)據(jù)類型,值域為0至255,常用于圖像表示和處理。(節(jié)省存儲空間,提高處理速度) int8( ), int16( ), int32( ),uint16( ), uint32( ),數(shù)值型數(shù)據(jù)結(jié)構(gòu),符號型,sym(A), 常用于公式推導、解析解解法 符號變量聲明 syms var_list var_props 例:syms a b real syms c positive,符號型變量數(shù)據(jù)類型,符號型數(shù)值可采用變精度函數(shù)求值 vpa(A), 或 vap(A,n) vpa(pi) ans =

5、 3.1415926535897932384626433832795 vpa(pi,60) ans = 3.14159265358979323846264338327950288419716939937510582097494,字符串型數(shù)據(jù):用單引號括起來 。 多維數(shù)組:是矩陣的直接擴展,多個下標。 單元數(shù)組:將不同類型數(shù)據(jù)集成到一個變量名下面,用表示;例:用Ai,j可表示單元數(shù)組A的第i行,第j列的內(nèi)容。 類與對象:允許用戶自己編寫包含各種復雜詳細的變量,可以定義傳遞函數(shù)。,MATLAB支持的其它數(shù)據(jù)結(jié)構(gòu),直接賦值語句 賦值變量賦值表達式 例: a=pi2 a = 9.8696 例:表示矩陣

6、 B=1+9i,2+8i,3+7j;4+6j 5+5i,6+4i;7+3i,8+2j 1i B = 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.0000i,MATLAB 的基本語句結(jié)構(gòu),函數(shù)調(diào)用語句 返回變量列表函數(shù)名(輸入變量列表) 例:a,b,c=my_fun(d,e,f,c) 冒號表達式 v=s1:s2:s3 該函數(shù)生成一個行向量v,其中s1是起始值,

7、 s2是步長(若省略步長為1), s3是最大值。 例:用不同的步距生成 (0,p) 間向量。 v1=0:0.2:pi v1 = 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 3.0000, v2=0:-0.1:pi %步距為負,不能生成向量,得出空矩陣 v2 = Empty matrix: 1-by-0 v3=0:pi v3 = 0 1 2 3 v4=pi:-

8、1:0 逆序排列構(gòu)成新向量 v4 = 3.1416 2.1416 1.1416 0.1416 v5=0:0.4:pi,pi v5 = 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,0 A = 1 2 3 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=

9、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)置) MATLAB 求解 BA. C=A,2.3 基本數(shù)學運算,矩陣的代數(shù)運算,矩陣加減法 C=A+B D=A-B 注意維數(shù)是否相等 注意其一為標量的情形 矩陣乘法 數(shù)

10、學表示 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) 如何旋轉(zhuǎn)180o? D=rot180(A) ? Undefined function or variable rot180. D=rot90(rot90

11、(A) 矩陣乘方 A 為方陣,求 MATLAB 實現(xiàn): F=Ax,點運算-矩陣對應元素的直接運算 數(shù)學表示 : MATLAB 實現(xiàn): C=A.*B 例: A=1,2,3;4,5,6;7,8,0; B=A.A B = 1 4 27 256 3125 46656 823543 16777216 1 C=A.*A C = 1 4 9 16 25 36 49 64 0,邏輯變量: 當前版本有邏輯變量 對 double 變量來說,非 0 表示邏輯 1 邏輯運算(相應元素間的運算) 與運算 Ai,j 顯示行標,列標 ans = A= 3 1 1 2 3 2 2 4 5 6 3 2 7 8 0 2 3 al

12、l(A=5) 某列元素全大于或等于5時,相應元素為1,否則為0。 ans = 0 0 0 any(A=5) 某列元素中含有大于或等于5時,相應元素為1,否則為0。 ans = 1 1 1,解析結(jié)果的化簡與變換,MATLAB 實現(xiàn): s1=simple(s) 從各種方法中自動選擇最簡格式 s1,how=simple(s) 化簡并返回實際采用的化簡方法 其中,s為原始表達式,s1為化簡后表達式,how為采用的化簡方法。 其他常用化簡函數(shù)(信息與格式可用 help命令得出) collect( ) 合并同類項 expand( ) 展開多項式 factor( ) 因式分解 numden( ) 提取多項式

13、的分子和分母 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)*(s3+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)3 m = factor expand(P) ans = s7+21*s6+1

14、85*s5+883*s4+2454*s3+3944*s2+3360*s+1152,變量替換 其中,f為原表達式,用x*替換x得出新的。 例:求其 Taylor 冪級數(shù)展開 syms a b c d t; % 假設這些變量均為符號變量 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,基本數(shù)論運算 下取整、上取整、四舍五入、離0近方向取整、最簡有理數(shù)、求模的余數(shù)、最大公約數(shù)、最小公倍數(shù)、質(zhì)因數(shù)分解、判定是否為質(zhì)數(shù),例:對下面的數(shù)據(jù)

15、進行取整運算 -0.2765, 0.5772, 1.4597, 2.1091, 1.191, -1.6187 A=-0.2765,0.5772,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);

16、n,d=rat(A) 將元素變換成最小有理數(shù),n,d分別為分子、分母矩陣。 n = 1 1 1 1 1 1 1 1 1 d = 1 2 3 2 3 4 3 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

17、,例:1-100間質(zhì)數(shù) A=1:10; isprime(A) 若向量A中某個整數(shù)值為質(zhì)數(shù),則相應位置為1,其他為零。 ans = 0 1 1 0 1 0 1 0 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ù)。,2.4.1 循環(huán)結(jié)構(gòu) for 結(jié)構(gòu) while 結(jié)構(gòu),2.4 MATLAB 語言流程控制,

18、例:用循環(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; m=0; while (s=10000), m=m+1; s=s+m; end, s,m % 求出的 m 即是所求 ans = 10011 141,例:求 tic, s=0; for i=1:100000, s=s+1/2i+1/3i; end; toc elapsed_time = 1.1820 tic, i=1:100000; s=sum(1./2.i+1./3.i); toc 向量化所需時間少 elaps

19、ed_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.0010 ss = 1.4990,2.4.2 轉(zhuǎn)移結(jié)構(gòu),例:用循環(huán)求解求最大的 m s=0; for i=1:10000 s=s+i; if s10000, break; end end i i = 141,2.4.3 開關結(jié)構(gòu),和 C 語言的區(qū)別 當開關表達式的值等于某表達式,執(zhí)行該語句后結(jié)束該結(jié)構(gòu),不用 break 當需要在開關表

20、達式滿足若干個表達式之一時執(zhí)行某一程序段,則用單元形式 (用大括號把這些表達式括起來,用逗號分隔) otherwise 語句,不是C語言中的 default(但與之等價) 程序的執(zhí)行結(jié)果和各個case順序無關 case 語句中條件不能重復,否則列在后面的條件將不能執(zhí)行,全新結(jié)構(gòu)(首先試探性執(zhí)行語句1,若執(zhí)行過程中有錯,將錯誤信息賦給保留的lasterr變量,并終止這段語句的執(zhí)行,轉(zhuǎn)而執(zhí)行語句2。) 應將不保險但快的算法放在語句1,保險的放在語句2;或語句2說明語句1失效原因。,2.4.4 試探結(jié)構(gòu),函數(shù)是 MATLAB 編程的主流方法 除了函數(shù)外,還可以采用 M-script(M腳本文件) 文

21、件 M-script 適合于小規(guī)模運算 例:若最大值不為 10000,需修改程序 對 m 和 10000 值的設置,不適合于M-script,2.5 MATLAB 函數(shù)的編寫,2.5.1 MATLAB 語言的函數(shù)的基本結(jié)構(gòu),nargin, nargout 分別表示輸入和返回變量的實際個數(shù),此為MATLAB保留變量,只要進入該函數(shù), MATLAB就將自動生成這兩個變量。 varargin, varargout 輸入、輸出變量列表(可變輸入輸出個數(shù))。,例:前面的要求,m, 10000 function m,s=findsum(k) s=0; m=0; while (s m1,s1=findsum

22、(145323) m1 = 539 s1 = 145530 無需修改程序,例: 若只給出一個輸入?yún)?shù),則會自動生成一個方陣 在函數(shù)中給出合適的幫助信息 檢測輸入和返回變量的個數(shù) edit myhilb,function A=myhilb(n, m) %產(chǎn)生A=MYHILB(N,M)或A=MYHILB(N); if nargout1, error(Too many output arguments.); end if nargin=1, m=n; elseif nargin=0 | nargin2 error(Wrong number of input arguments.); end A1=z

23、eros(n,m); for i=1: n for j=1:m A1(i,j)=1/(i+j-1); end, end if 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 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

24、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 = myhilb Too many input arguments.,例:函數(shù)的遞歸調(diào)用:階乘 function k=my_fact(n) if nargin=1, error(輸入變量個數(shù)錯誤,只能有一個輸入變量); end if nargout1, error(輸出變量個數(shù)過多); end if abs(n-floor(n)eps | n1 % 如果 n1, 進行遞

25、歸調(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,例: conv( ) 可以計算兩個多項式的積 用 varargin 實現(xiàn)任意多個多項式的積 function a=convs(varargin) a=1; for i=1:length(vararg

26、in), 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+30,2.5.2 可變輸入輸出個數(shù), E=conv(conv(P,Q),F) % 若采用 conv() 函數(shù),則需要嵌套調(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+3

27、0 G=convs(P,Q,F,1,1,1,3,1,1) G = 1 11 56 176 376 578 678 648 527 315 90,2.5.3 inline 函數(shù)和匿名函數(shù),inline 函數(shù),可以免去文件 f=inline(sin(x.2+y.2),x,y) MATLAB 7.0,2.6 二維圖形繪制,2.6.1 二維圖形繪制基本語句,構(gòu)造向量:,例:選項為紅色點劃線且每個轉(zhuǎn)折點用五角星表示 r-.pentagram,例: x=-pi : 0.05: pi; % 以 0.05 為步距構(gòu)造自變量向量 y=sin(tan(x)-tan(sin(x); % 求出各個點上的函數(shù)值 plo

28、t(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).*(abs(x)1.1) + x.*(abs(x) plot(-2,-1.1,1.1,2,-1.1,-1.1,1.1,1.1),圖形元素屬性獲取與修改,圖

29、形中,每條曲線、坐標軸、圖形窗口分別是一個對象。可用set( )函數(shù)設置對象的屬性,用get( )函數(shù)獲得對象的某個屬性。 這兩個語句在界面編程中特別有用。,2.6.2 其他二維圖形繪制語句 二維條形圖、羅盤圖、羽毛狀圖、直方圖、極坐標圖、階梯圖形、x-半對數(shù)圖、彗星狀軌跡圖、誤差限圖形、二維填充圖、對數(shù)圖、磁力線圖、火柴桿圖、y-半對數(shù)圖。,例:繪制極坐標曲線 theta=0:0.01:6*pi; rho=5*sin(4*theta/3); polar(theta,rho) rho=5*sin(theta/3); polar(theta,rho) 周期確定,可以采用試湊方法,例:用不同曲線繪

30、制函數(shù)表示正弦曲線 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.6.3 隱函數(shù)繪制及應用,隱函數(shù) 例: ezplot(x2 *sin(x+y2) +y2*exp(x+y)+5*cos(x2+y) x自選 ezplot(x2 *sin(x+y2) +y2*ex

31、p(x+y)+5*cos(x2+y),-10 10),2.7 三維圖形繪制,2.7.1 三維曲線繪制 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), grid,2.7.2 三維曲面繪制,一般曲面繪制 mesh( )繪制網(wǎng)格圖,su

32、rf( )繪制表面圖。 其他函數(shù),光照下 surfl( ),等高線surfc( ),瀑布型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) % 重新設置坐標系,增大可讀性 surf(x,y,z) % 繪制三維表面圖 contour3(x,y,z,30) 三維等高線圖,30等高線條數(shù),例:試繪制出二元函數(shù) x,y=meshgrid(-2:.1:2); z=1./(sqrt(1-x).2+y.2)+1

溫馨提示

  • 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

提交評論