matlab數(shù)值分析實驗_第1頁
matlab數(shù)值分析實驗_第2頁
matlab數(shù)值分析實驗_第3頁
matlab數(shù)值分析實驗_第4頁
matlab數(shù)值分析實驗_第5頁
已閱讀5頁,還剩151頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、數(shù)值分析實驗董海云數(shù)理學(xué)院數(shù)學(xué)實驗教學(xué)中心 目 錄0 Matlab介紹入門知識31 緒論171.1 例題解答171.2 Matlab中數(shù)值計算精度202 線性方程組的直接解法222.1 例題解答222.2 Matlab解線性方程組常用命令介紹363 線性方程組的迭代解法383.1 例題解答383.2 Matlab迭代解法用到的函數(shù)介紹534 方陣特征值和特征向量的計算554.1 例題解答554.2 Matlab關(guān)于方陣特征值為特征向量函數(shù)介紹625 非線性方程求根645.1 例題解答645.2 Matlab非線性方程求根的命令856 插值法866.1 例題解答866.2 Matlab插值函數(shù)介

2、紹1017 數(shù)據(jù)擬合和最佳平方逼近1037.1 例題解答1037.2 Matlab數(shù)據(jù)擬合命令介紹1138 數(shù)值積分與數(shù)值微分1148.1 例題解答1149 常微分方程數(shù)值解法1389.1 例題解答1389.2 Matlab常微分方程數(shù)值解常用命令介紹1540 Matlab介紹入門知識1. Matlab簡介MATLAB的含義是矩陣實驗室(MATRIX LABORATORY),主要用于方便矩陣的存取,其基本元素是無須定義維數(shù)的矩陣.MATLAB自問世以來,就是以數(shù)值計算稱.MATLAB進(jìn)行數(shù)值計算的基本單位是復(fù)數(shù)數(shù)組(或稱陣列),這使得MATLAB高度“向量化”.經(jīng)過十幾年的完善和擴(kuò)充,現(xiàn)已發(fā)展

3、成為線性代數(shù)課程的標(biāo)準(zhǔn)工具.由于它不需定義數(shù)組的維數(shù),并給出矩陣函數(shù)、特殊矩陣專門的庫函數(shù),使之在求解諸如信號處理、建模、系統(tǒng)識別、控制、優(yōu)化等領(lǐng)域的問題時,顯得大為簡捷、高效、方便,這是其它高級語言所不能比擬的.MATLAB中包括了被稱作工具箱(TOOLBOX)的各類應(yīng)用問題的求解工具.工具箱實際上是對MATLAB進(jìn)行擴(kuò)展應(yīng)用的一系列MATLAB函數(shù)(稱為M文件),它可用來求解各類學(xué)科的問題,包括信號處理、圖象處理、控制系統(tǒng)辨識、神經(jīng)網(wǎng)絡(luò)等.隨著MATLAB版本的不斷升級,其所含的工具箱的功能也越來越豐富,因此,應(yīng)用范圍也越來越廣泛,MATLAB提供的工具箱已覆蓋信號處理、系統(tǒng)控制、統(tǒng)計計算

4、、優(yōu)化計算、神經(jīng)網(wǎng)絡(luò)、小波分析、偏微分方程、模糊邏輯、動態(tài)系統(tǒng)模擬、系統(tǒng)辨識和符號運(yùn)算等領(lǐng)域.當(dāng)前它的使用范圍涵蓋了工業(yè)、電子、醫(yī)療、建筑等各行各業(yè).MATLAB中包括了圖形界面編輯GUI,讓使用者也可以象VB、VC、VJ、DELPHI等那樣進(jìn)行一般的可視化的程序編輯.在命令窗口(matlab command window)鍵入simulink,就出現(xiàn)(SIMULINK) 窗口.以往十分困難的系統(tǒng)仿真問題,用SIMULINK只需拖動鼠標(biāo)即可輕而易舉地解決問題,這也是近來受到重視的原因所在. MATLAB 語言由美國 The MathWorks 開發(fā),最早是由C.Moler用Fortran語言編

5、寫的,用來方便地調(diào)用LINPACK和EISPACK矩陣代數(shù)軟件包的程序.后來他創(chuàng)立了MATHHWORKS公司,對MATLAB作了大量的、堅持不懈的改進(jìn).Cleve B.Moler是The MathWorkIntel公司的Hypercube組織和Arden Computers MATLAB軟件的創(chuàng)始者,也是著名的矩陣計算軟件包LINPACK和EISPACK的著作這一,已撰寫了三本有相關(guān)數(shù)值方法的教材.同時,他在SIAM(美國工業(yè)與應(yīng)用數(shù)學(xué)學(xué)會)歷任期刊編輯、委員會成員和副總裁,并從1996年開始擔(dān)任理事會成員.2. Matlab入門知識Matlab變量名是以字母開頭,后接字母、數(shù)字或下劃線的字符

6、序列,最多63個字符.在MATLAB中,變量名區(qū)分字母的大小寫.賦值語句:變量=表達(dá)式 或 表達(dá)式其中表達(dá)式是用運(yùn)算符將有關(guān)運(yùn)算量連接起來的式子,其結(jié)果是一個矩陣.clear命令用于刪除MATLAB工作空間中的變量.who和whos這兩個命令用于顯示在MATLAB工作空間中已經(jīng)駐留的變量名清單.who命令只顯示出駐留變量的名稱,whos在給出變量名的同時,還給出它們的大小、所占字節(jié)數(shù)及數(shù)據(jù)類型等信息.利用MAT文件可以把當(dāng)前MATLAB工作空間中的一些有用變量長久地保留下來,擴(kuò)展名是.mat.MAT文件的生成和裝入由save和load命令來完成.常用格式為:save 文件名 變量名表 -app

7、end-asciiload 文件名 變量名表 -ascii其中,文件名可以帶路徑,但不需帶擴(kuò)展名.mat,命令隱含一定對.mat文件進(jìn)行操作.變量名表中的變量個數(shù)不限,只要內(nèi)存或文件中存在即可,變量名之間以空格分隔.當(dāng)變量名表省略時,保存或裝入全部變量.-ascii選項使文件以ASCII格式處理,省略該選項時文件將以二進(jìn)制格式處理.save命令中的-append選項控制將變量追加到MAT文件中.(1) 向量的創(chuàng)建用步長生成法:數(shù)組=初值:步長(增量):終值>> a=1:0.5:3a =1.0000 1.5000 2.0000 2.5000 3.0000用linspace生成:數(shù)組=

8、linspace(初值,終值,等分點數(shù)目)>> b=linspace(1,3,5)b =1.0000 1.5000 2.0000 2.5000 3.0000列向量用分號(;)作為分行標(biāo)記:>> c=1;2;3;4;c = 1 2 3 4若不想輸出結(jié)果,在每一條語句后用分號作為結(jié)束符,若留空或用逗號結(jié)束,則在執(zhí)行該語句后會把結(jié)果輸出來.>> a+b;>> a+bans = 2 3 4 5 6(2) 矩陣的創(chuàng)建直接輸入:最簡單的建立矩陣的方法是從鍵盤直接輸入矩陣的元素.具體方法如下:將矩陣的元素用方括號括起來,按矩陣行的順序輸入各元素,同一行的各元素

9、之間用空格或逗號分隔,不同行的元素之間用分號分隔.>> A=1 2 3;4 5 6;2 3 5A = 1 2 3 4 5 6 2 3 5利用矩陣函數(shù)創(chuàng)建:>> B=magic(3)%魔方陣B = 8 1 6 3 5 7 4 9 2>> C=hilb(3)%3階Hilbert矩陣C = 1.0000 0.5000 0.3333 0.5000 0.3333 0.25000.3333 0.2500 0.2000Matlab中用%引導(dǎo)注釋其它創(chuàng)建矩陣函數(shù)還有:eye(m,n):生成m行n列單位矩陣.zeros(m,n):生成m行n列全零矩陣.ones(m,n):生成

10、全1矩陣.rand(m,n):生成隨機(jī)矩陣.rand:生成一個隨機(jī)數(shù).diag(A):取A的對角線元素.tril(A):取A的下三角元素.triu(A):取A的上三角元素.hilb(n):生成n維Hilbert矩陣.randn(n):產(chǎn)生均值為0,方差為1的標(biāo)準(zhǔn)正態(tài)分布隨機(jī)矩陣.vander(V):生成以向量V為基礎(chǔ)向量的范得蒙矩陣.invhilb(n): 求n階的希爾伯特矩陣的逆矩陣.toeplitz(x,y): 生成一個以x為第一列,y為第一行的托普利茲矩陣compan(p): 生成伴隨矩陣, p是一個多項式的系數(shù)向量,高次冪系數(shù)排在前,低次冪排在后.pascal(n): 生成一個n階帕斯

11、卡矩陣.compan: 生成伴隨矩陣(3) 矩陣運(yùn)算MATLAB的基本算術(shù)運(yùn)算有:(加)、(減)、*(乘)、/(右除)、(左除)、(乘方).加法:>> A+Bans = 9 3 9 7 10 13 6 12 7減法:>> B-Aans = 7 -1 3 -1 0 1 2 6 -3乘法:>> A*Bans = 26 38 26 71 83 7145 62 43除法:>> magic(3)/hilb(3)ans = 1.0e+003 * 0.2160 -1.1760 1.1400 0.0570 -0.4080 0.4500 -0.2280 1.224

12、0 -1.1400在MATLAB中,有一種特殊的運(yùn)算,因為其運(yùn)算符是在有關(guān)算術(shù)運(yùn)算符前面加點,所以叫點運(yùn)算.點運(yùn)算符有.*、./、.和.兩矩陣進(jìn)行點運(yùn)算是指它們的對應(yīng)元素進(jìn)行相關(guān)運(yùn)算,要求兩矩陣的維參數(shù)相同.>> A.*Bans = 8 2 18 12 25 42 8 27 10MATLAB提供了6種關(guān)系運(yùn)算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、=(等于)、=(不等于).>> A>Bans = 0 1 0 1 0 0 0 0 1MATLAB提供了3種邏輯運(yùn)算符:&(與)、|(或)和(非). 在邏輯運(yùn)算中

13、,確認(rèn)非零元素為真,用1表示,零元素為假,用0表示.設(shè)參與邏輯運(yùn)算的是兩個標(biāo)量a和b,那么, a&b a,b全為非零時,運(yùn)算結(jié)果為1,否則為0. a|b a,b中只要有一個非零,運(yùn)算結(jié)果為1. a 當(dāng)a是零時,運(yùn)算結(jié)果為1;當(dāng)a非零時,運(yùn)算結(jié)果為0.3. 矩陣操作和矩陣函數(shù)矩陣通過下標(biāo)引用矩陣的元素,矩陣元素的序號就是相應(yīng)元素在內(nèi)存中的排列順序.在MATLAB中,矩陣元素按列存儲,先第一列,再第二列,依次類推.(1) 矩陣拆分利用冒號表達(dá)式獲得子矩陣.A(:,j)表示取A矩陣的第j列全部元素;A(i,:)表示A矩陣第i行的全部元素;A(i,j)表示取A矩陣第i行、第j列的元素.A(i:

14、i+m,:)表示取A矩陣第ii+m行的全部元素;A(:,k:k+m)表示取A矩陣第kk+m列的全部元素,A(i:i+m,k:k+m)表示取A矩陣第ii+m行內(nèi),并在第kk+m列中的所有元素.此外,還可利用一般向量和end運(yùn)算符來表示矩陣下標(biāo),從而獲得子矩陣.end表示某一維的末尾元素下標(biāo).(2) 利用空矩陣刪除矩陣的元素在MATLAB中,定義為空矩陣.給變量X賦空矩陣的語句為X=.(3) 矩陣的轉(zhuǎn)置轉(zhuǎn)置運(yùn)算符是單撇號().(4) 矩陣的旋轉(zhuǎn)利用函數(shù)rot90(A,k)將矩陣A旋轉(zhuǎn)90o的k倍,當(dāng)k為1時可省略.(5) 矩陣的左右翻轉(zhuǎn)對矩陣實施左右翻轉(zhuǎn)是將原矩陣的第一列和最后一列調(diào)換,第二列和倒

15、數(shù)第二列調(diào)換,依次類推.MATLAB對矩陣A實施左右翻轉(zhuǎn)的函數(shù)是fliplr(A).(6) 矩陣的上下翻轉(zhuǎn)MATLAB對矩陣A實施上下翻轉(zhuǎn)的函數(shù)是flipud(A).(7) 方陣A的逆矩陣inv(A)>> A=magic(3)A = 8 1 6 3 5 7 4 9 2>> B=inv(A)B = 0.1472 -0.1444 0.0639 -0.0611 0.0222 0.1056 -0.0194 0.1889 -0.1028>> A*Bans = 1.0000 0 -0.0000 -0.0000 1.0000 00.0000 0 1.0000(8) 方陣的

16、行列式>> det(A)ans = -360(9) 矩陣的跡>> C=trace(A)C =15(10) 一些常用的基本初等三角函數(shù)三角函數(shù):sin(x),cos(x),tan(x)反三角函數(shù):asin(x),acos(x),atan(x)指數(shù)函數(shù):exp(x)自然對數(shù):log(x)常用對數(shù):log10(x)以2為底的對數(shù):log2(x)開平方:sqrt(x)絕對值:abs(x)計算一般函數(shù)值:eval(f)求虛部函數(shù): imag(x)求實部函數(shù): real(x)角相位函數(shù):angle(x)共軛復(fù)數(shù)函數(shù):conj(x)沿零方向取整 :fix (x)舍入取整:round(

17、x)沿負(fù)無窮大方向取整:floor (x)沿正無窮大方向取整:ceil(x)求除法的余數(shù): rem 符號函數(shù):sign(x)最大公約數(shù):gcd()4. 圖形可視化(1) 二維繪圖指令plotplot函數(shù)的基本調(diào)用格式為:plot(x,y,)其中x和y為長度相同的向量,分別用于存儲x坐標(biāo)和y坐標(biāo)數(shù)據(jù).plot(x)plot函數(shù)最簡單的調(diào)用格式.當(dāng)x是實向量時,以該向量元素的下標(biāo)為橫坐標(biāo),元素值為縱坐標(biāo)畫出一條連續(xù)曲線.實際上是繪制折線圖.plot(x1,y1,x2,y2,xn,yn)當(dāng)輸入?yún)?shù)都為向量時,x1和y1,x2和y2,xn和yn分別組成一組向量對,每一組向量對的長度可以不同.每一向量對

18、可以繪制出一條曲線,可以在同一坐標(biāo)內(nèi)繪制出多條曲線.plotyy(x1,y1,x2,y2)繪制出具有不同縱坐標(biāo)標(biāo)度的兩個圖形.hold on/off保持原有圖形還是刷新原有圖形,不帶參數(shù)的hold命令在兩種狀態(tài)之間進(jìn)行切換.plot(x1,y1,選項1,x2,y2,選項2,xn,yn,選項n)設(shè)置曲線樣式進(jìn)行繪圖.選項字段見下表:表 Matlab常用線形與顏色標(biāo)記表符號線型符號線型符號線型顏色含義-實線.實點標(biāo)記朝上三角g綠色-虛線o圓圈<朝左三角r紅色:點線X叉字符>朝右三角c青色-.點劃線+加號p五角星m洋紅*星號h六角形y黃色s方塊k黑色d菱形w白色v朝下三角b藍(lán)色(2) 圖

19、形標(biāo)注:title('圖形名稱'):圖形標(biāo)題xlabel('x軸說明')ylabel('y軸說明')text(x,y,'圖形說明')legend('圖例1','圖例2',)gtext('用鼠標(biāo)確定位置的字符說明')(3) 坐標(biāo)控制axis axis(xmin xmax ymin ymax zmin zmax)axis函數(shù)功能豐富,常用的格式還有:axis equal:縱、橫坐標(biāo)軸采用等長刻度.axis square:產(chǎn)生正方形坐標(biāo)系(缺省為矩形).axis auto:使用缺省設(shè)置.a

20、xis off:取消坐標(biāo)軸.axis on:顯示坐標(biāo)軸.grid on/off:網(wǎng)格開/關(guān)box on/off:加/不加邊框線上述命令示例如下:>> x=1:length(peaks);>> plot(x,peaks);>> box on;>> title('繪制混合圖形');>> xlabel('X軸');>> ylabel('Y軸');繪制圖像為:(4) 二維數(shù)值函數(shù)的專用繪圖函數(shù)fplotfplot(functionname,a,b,tol,選項)其中functionn

21、ame為函數(shù)名,以字符串形式出現(xiàn),a,b為繪圖區(qū)間,tol為相對允許誤差,其系統(tǒng)默認(rèn)值為2e-3.選項定義與plot函數(shù)相同.>> fplot(x)tan(x),sin(x),cos(x), 2*pi*-1 1 -1 1);(5) 二維符號函數(shù)曲線專用命令ezplotf = f(x)時:ezplot(f):在默認(rèn)區(qū)間-2<x<2繪制f = f(x)的圖形.ezplot(f, a,b):在區(qū)間a<x<b繪制f = f(x)的圖形f = f(x,y)時:ezplot(f):在默認(rèn)區(qū)間-2<x<2和-2<y<2繪制f(x,y) = 0的圖形

22、.ezplot(f, xmin,xmax,ymin,ymax):在區(qū)間xmin<x<xmax和ymin<y<ymax繪制f(x,y) = 0的圖形ezplot(f, a,b):在區(qū)間a<x<b和a<y< b繪制f(x,y) = 0的圖形若x = x(t),y = y(t):ezplot(x,y):在默認(rèn)區(qū)間0<t<2繪制x=x(t)和y=y(t)的圖形.ezplot(x,y, tmin,tmax):在區(qū)間tmin < t < tmax繪制x=x(t)和y=y(t)的圖形>> figure;ezplot('

23、;cos(tan(pi*x)', 0,1);(6) 圖形窗口的分割subplotsubplot(m,n,p)該函數(shù)將當(dāng)前圖形窗口分成m×n個繪圖區(qū),即每行n個,共m行,區(qū)號按行優(yōu)先編號,且選定第p個區(qū)為當(dāng)前活動區(qū).在每一個繪圖區(qū)允許以不同的坐標(biāo)系單獨繪制圖形.(7) 其他坐標(biāo)系下的二維數(shù)據(jù)曲線圖對數(shù)坐標(biāo)圖形:semilogx(x1,y1,選項1,x2,y2,選項2,)semilogy(x1,y1,選項1,x2,y2,選項2,)loglog(x1,y1,選項1,x2,y2,選項2,)極坐標(biāo)圖polar:polar(theta,r,選項)其中theta為極坐標(biāo)極角,r為極坐標(biāo)矢徑

24、,選項的內(nèi)容與plot函數(shù)相似.二維統(tǒng)計分析圖:bar(x,y,選項):條形圖stairs(x,y,選項):階梯圖stem(x,y,選項):桿圖fill(x1,y1,選項1,x2,y2,選項2,):填充圖(8) 三維曲線plot3plot3(x1,y1,z1,選項1,x2,y2,z2,選項2,xn,yn,zn,選項n) 其中每一組x,y,z組成一組曲線的坐標(biāo)參數(shù),選項的定義和plot函數(shù)相同.當(dāng)x,y,z是同維向量時,則x,y,z 對應(yīng)元素構(gòu)成一條三維曲線.當(dāng)x,y,z是同維矩陣時,則以x,y,z對應(yīng)列元素繪制三維曲線,曲線條數(shù)等于矩陣列數(shù).>> t=0:0.1:8*pi;>

25、> plot3(sin(t),cos(t),t);(9) 產(chǎn)生三維數(shù)據(jù)在MATLAB中,利用meshgrid函數(shù)產(chǎn)生平面區(qū)域內(nèi)的網(wǎng)格坐標(biāo)矩陣.其格式為:X,Y=meshgrid(x,y);語句執(zhí)行后,矩陣X的每一行都是向量x,行數(shù)等于向量y的元素的個數(shù),矩陣Y的每一列都是向量y,列數(shù)等于向量x的元素的個數(shù).(10) 繪制三維曲面的函數(shù)surf函數(shù)和mesh函數(shù)的調(diào)用格式為:mesh(x,y,z,c)surf(x,y,z,c)一般情況下,x,y,z是維數(shù)相同的矩陣.x,y是網(wǎng)格坐標(biāo)矩陣,z是網(wǎng)格點上的高度矩陣,c用于指定在不同高度下的顏色范圍.(11) 標(biāo)準(zhǔn)三維曲面sphere函數(shù)的調(diào)用格

26、式為:x,y,z=sphere(n)cylinder函數(shù)的調(diào)用格式為:x,y,z= cylinder(R,n)MATLAB還有一個peaks 函數(shù),稱為多峰函數(shù),常用于三維曲面的演示.(12) 其他三維繪圖指令介紹bar3函數(shù)繪制三維條形圖,常用格式為bar3(y)bar3(x,y)stem3函數(shù)繪制離散序列數(shù)據(jù)的三維桿圖,常用格式為:stem3(z)stem3(x,y,z)pie3函數(shù)繪制三維餅圖,常用格式為:pie3(x)fill3函數(shù)等效于三維函數(shù)fill,可在三維空間內(nèi)繪制出填充過的多邊形,常用格式為:fill3(x,y,z,c)5. 程序控制結(jié)構(gòu)(1)數(shù)據(jù)的輸入:A=input(提示

27、信息,選項)其中提示信息為一個字符串,用于提示用戶輸入什么樣的數(shù)據(jù).如果在input函數(shù)調(diào)用時采用's'選項,則允許用戶輸入一個字符串.(2)數(shù)據(jù)的輸出: disp(輸出項)(3)程序的暫停: pause(延遲秒數(shù)) 如果省略延遲時間,直接使用pause,則將暫停程序,直到用戶按任一鍵后程序繼續(xù)執(zhí)行. 若要強(qiáng)行中止程序的運(yùn)行可使用Ctrl+C命令.(4)單分支if語句:if 條件 語句組end當(dāng)條件成立時,則執(zhí)行語句組,執(zhí)行完之后繼續(xù)執(zhí)行if語句的后繼語句,若條件不成立,則直接執(zhí)行if語句的后繼語句.(5) 雙分支if語句:if 條件 語句組1 else 語句組2 end當(dāng)條件

28、成立時,執(zhí)行語句組1,否則執(zhí)行語句組2,語句組1或語句組2執(zhí)行后,再執(zhí)行if語句的后繼語句.(6) 多分支if語句:if 條件1 語句組1 elseif 條件2 語句組2 elseif 條件m 語句組m else 語句組n end語句用于實現(xiàn)多分支選擇結(jié)構(gòu).(7)switch語句: switch 表達(dá)式 case 表達(dá)式1 語句組1 case 表達(dá)式2 語句組2 case 表達(dá)式m 語句組m otherwise 語句組n end(8)try語句語句格式為:try 語句組1catch 語句組2endtry語句先試探性執(zhí)行語句組1,如果語句組1在執(zhí)行過程中出現(xiàn)錯誤,則將錯誤信息賦給保留的laste

29、rr變量,并轉(zhuǎn)去執(zhí)行語句組2.(9)for語句for語句的格式為:for 循環(huán)變量=表達(dá)式1:表達(dá)式2:表達(dá)式3 循環(huán)體語句end其中表達(dá)式1的值為循環(huán)變量的初值,表達(dá)式2的值為步長,表達(dá)式3的值為循環(huán)變量的終值.步長為1時,表達(dá)式2可以省略.for語句更一般的格式為: for 循環(huán)變量=矩陣表達(dá)式 循環(huán)體語句 end 執(zhí)行過程是依次將矩陣的各列元素賦給循環(huán)變量,然后執(zhí)行循環(huán)體語句,直至各列元素處理完畢.(10)while語句 while語句的一般格式為: while (條件) 循環(huán)體語句 end其執(zhí)行過程為:若條件成立,則執(zhí)行循環(huán)體語句,執(zhí)行后再判斷條件是否成立,如果不成立則跳出循環(huán).(11

30、)break語句和continue語句與循環(huán)結(jié)構(gòu)相關(guān)的語句還有break語句和continue語句.它們一般與if語句配合使用.break語句用于終止循環(huán)的執(zhí)行.當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時,程序?qū)⑻鲅h(huán),繼續(xù)執(zhí)行循環(huán)語句的下一語句.continue語句控制跳過循環(huán)體中的某些語句.當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時,程序?qū)⑻^循環(huán)體中所有剩下的語句,繼續(xù)下一次循環(huán).(12)循環(huán)的嵌套如果一個循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個循環(huán)結(jié)構(gòu),就稱為循環(huán)的嵌套,或稱為多重循環(huán)結(jié)構(gòu).(13)函數(shù)文件的基本結(jié)構(gòu)函數(shù)文件由function語句引導(dǎo),其基本結(jié)構(gòu)為 function 輸出形參表=函數(shù)名(輸入形參表) 注釋說明部分

31、 函數(shù)體語句(14)函數(shù)調(diào)用函數(shù)調(diào)用的一般格式是: 輸出實參表=函數(shù)名(輸入實參表)注意的是,函數(shù)調(diào)用時各實參出現(xiàn)的順序、個數(shù),應(yīng)與函數(shù)定義時形參的順序、個數(shù)一致,否則會出錯.函數(shù)調(diào)用時,先將實參傳遞給相應(yīng)的形參,從而實現(xiàn)參數(shù)傳遞,然后再執(zhí)行函數(shù)的功能.在MATLAB中,函數(shù)可以嵌套調(diào)用,即一個函數(shù)可以調(diào)用別的函數(shù),甚至調(diào)用它自身.一個函數(shù)調(diào)用它自身稱為函數(shù)的遞歸調(diào)用.(15)函數(shù)參數(shù)的可調(diào)性在調(diào)用函數(shù)時,MATLAB用兩個永久變量nargin和nargout分別記錄調(diào)用該函數(shù)時的輸入實參和輸出實參的個數(shù).只要在函數(shù)文件中包含這兩個變量,就可以準(zhǔn)確地知道該函數(shù)文件被調(diào)用時的輸入輸出參數(shù)個數(shù),從

32、而決定函數(shù)如何進(jìn)行處理.(16)全局變量與局部變量全局變量用global命令定義,格式為:global 變量名(17)程序調(diào)試Debug菜單項:該菜單項用于程序調(diào)試,需要與Breakpoints菜單項配合使用.Breakpoints菜單項:該菜單項共有6個菜單命令,前兩個是用于在程序中設(shè)置和清除斷點的,后4個是設(shè)置停止條件的,用于臨時停止M文件的執(zhí)行,并給用戶一個檢查局部變量的機(jī)會,相當(dāng)于在M文件指定的行號前加入了一個keyboard命令.調(diào)試命令:除了采用調(diào)試器調(diào)試程序外,MATLAB還提供了一些命令用于程序調(diào)試.命令的功能和調(diào)試器菜單命令類似,具體使用方法請讀者查詢MATLAB幫助文檔.1

33、 緒論1.1 例題解答例1.1 計算,.解:創(chuàng)建符號函數(shù): >> syms x; >>f=sym('sin(x)') f = sin(x)展開至7階泰勒級數(shù):>> h=taylor(f,8,0) h = x-1/6*x3+1/120*x5-1/5040*x7求泰勒級數(shù)在處的函數(shù)值:>> subs(h,x,0.5) ans = 0.479425533234127也可以通過內(nèi)聯(lián)函數(shù)來求解:>>H=inline(h) H = Inline function: H(x) = x-1./6.*x.3+1./120.*x.5-1.

34、/5040.*x.7 >>feval(H,0.5) ans = 0.479425533234127例 1.2 計算積分值.解:解法一:( 符號法):>> I=int('1/(1+x)','x',0,1) I = log(2)解法二 :(數(shù)值法):>>x=0:0.2:1; %將0,1等分為4等份>>f=1./(1+x); %分別計算每一個等分點的函數(shù)值>>I=0;>>for i=1:5 I=I+(f(i)+f(i+1)/2*0.2; %將每一小曲邊的梯形累加起來作為積分值End>>

35、 vpa(I,9) %取結(jié)果的小數(shù)精度為9位小數(shù) ans = .695634921例 1.3略例 1.4 不用開平方根計算的值.解:解法一(符號法):>> A=sym('a');>> sqrt(A) ans = a(1/2)解法二(數(shù)值法):按以下迭代公式迭代計算近似值:建立函數(shù)文件msqrt.mfunction x=msqrt(x0,a)%用迭代法近似計算平方根%x0為初始迭代值,a為開平方數(shù) format long;x=zeros(20,1);x(1)=x0;for i=2:20 x(i)=1/2*(x(i-1)+a/x(i-1);enddisp(x

36、);用編寫的函數(shù)計算,:>> msqrt(2,3); 2.000000000000000 1.750000000000000 1.732050810014727 1.732050807568877 1.732050807568877 1.732050807568877 1.732050807568877 1.732050807568877 1.732050807568877 1.732050807568877 1.732050807568877 1.732050807568877 1.732050807568877 1.732050807568877 1.7320508075688

37、77 1.732050807568877 1.732050807568877 1.732050807568877 1.732050807568877上述結(jié)果為迭代過程計算的中間結(jié)果,分析數(shù)據(jù)可知迭代收斂速度快,只需四次計算即可計算出較為準(zhǔn)確的數(shù)值.例 1.5 略.例 1.6 計算,視已知數(shù)為精確數(shù),用4位浮點數(shù)計算.解:直接在Matlab中輸入式子:>> 1/759-1/760ans = 1.7336e-006若先轉(zhuǎn)化為浮點數(shù)再運(yùn)算可得:>> a=1/759,b=1/760,a-ba = 0.0013b = 0.0013ans = 1.7336e-006可見Matlba

38、在計算時,數(shù)據(jù)結(jié)構(gòu)都取為雙精度而提高了運(yùn)算準(zhǔn)確度.若以符號運(yùn)算計算之,有:>> a=sym('1/759'),b=sym('1/760'),c=a-b a = 1/759 b = 1/760 c = 1/576840可見符號運(yùn)算準(zhǔn)確但耗費(fèi)運(yùn)算時間.例 1.7 略.例 1.8 解方程.解:符號法解方程:>> x=solve('x2-18*x+1','x') x = 9+4*5(1/2) 9-4*5(1/2)將結(jié)果保留小數(shù)點6位:>> vpa(x,6) ans = 17.9443 .5572e-11

39、.2 Matlab中數(shù)值計算精度1. Matlab中有三種運(yùn)算精度,它們分別為數(shù)值算法、符號算法和可控精度算法,將它們分別介紹如下:(1) 數(shù)值算法把每個數(shù)取為16位,計算按浮點運(yùn)算進(jìn)行,它是運(yùn)算速度最快的一種算法.(2) 符號算法把每個數(shù)都變?yōu)榉柫?運(yùn)算按有理量計算進(jìn)行,它的優(yōu)點是能夠得到精確結(jié)果,缺點是占用空間大,并且運(yùn)算速度最慢.(3) 可控精度算法介于上述兩種算法之間,它能夠使運(yùn)算在可控的精度下進(jìn)行計算.2. Matlab的數(shù)據(jù)顯示格式,列表如下: 表 Matlab數(shù)據(jù)顯示格式命令命令意義舉例()format short短格式方式,顯示5位定點十進(jìn)制數(shù)3.1416format lon

40、g長格式方式,顯示15位定點十進(jìn)制數(shù)3.141592653589793format short e最優(yōu)化短格式顯示,5位加指數(shù)3.1416e+000format long e最優(yōu)格式,15位加指數(shù)3.141592653589793e+000format short g5位定點或浮點格式3.1416format long g對雙精度,顯示15位定點或浮點格式,對單精度,顯示7位定點或浮點格式3.14159265358979format short eng至少5位加3位指數(shù)3.1416e+000format long eng16位加至少3位指數(shù)3.14159265358979e+000format

41、 hex十六進(jìn)制格式方式400921fb54442d18format bank銀行格式.按元、角、分(小數(shù)點后具有兩位)的固定格式3.14format +格式,以,和空格分別表示中的正數(shù),負(fù)數(shù)和零元素+format缺省時為默認(rèn)短格式方式與format short相同3.1416format rat分?jǐn)?shù)格式形式.用有理數(shù)逼近顯示數(shù)據(jù)355/113 format loose松散格式.數(shù)據(jù)之間有空行format compact緊湊格式.數(shù)據(jù)之間無空行vpa(date,n)將數(shù)據(jù)date以n位有效數(shù)字顯示vpa(pi,5)= 3.1416format并不影響matlab如何計算和存儲變量的值.3. M

42、atlab的特殊變量ans :對最近輸入的反應(yīng) computer :當(dāng)前計算機(jī)類型 eps :浮點精度 flops :計算浮點操作次數(shù),現(xiàn)已不再常用 i :虛部單位 inf :無窮大 inputname :輸入?yún)?shù)名 j :虛部單位 nan :非數(shù)值 nargin :輸入?yún)?shù)的數(shù)目 nargout :輸出參數(shù)的數(shù)目(用戶定義函數(shù)) pi :圓周率 realmax :最大正浮點數(shù) realmin :最小正浮點數(shù) varargin varargout :返回參數(shù)數(shù)目(matlab函數(shù)) cputime:CPU工作時間2 線性方程組的直接解法2.1 例題解答例 2.1 用Gauss消元法解方程組:解

43、:直接建立求解該方程組的M文件Gauss.m如下:%求解例題2.1%高斯法求解線性方程組Ax=b%A為輸入矩陣系數(shù),b為方程組右端系數(shù)%方程組的解保存在x變量中%先輸入方程系數(shù)A=1 2 3;2 7 5;1 4 9;b=1 6 -3'm,n=size(A);%檢查系數(shù)正確性if m=n error('矩陣A的行數(shù)和列數(shù)必須相同'); return;endif m=size(b) error('b的大小必須和A的行數(shù)或A的列數(shù)相同'); return;end%再檢查方程是否存在唯一解if rank(A)=rank(A,b) error('A矩陣的秩

44、和增廣矩陣的秩不相同,方程不存在唯一解'); return;end%這里采用增廣矩陣行變換的方式求解c=n+1;A(:,c)=b; %消元過程for k=1:n-1A(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k)*A(k, k:c); End%回代結(jié)果x=zeros(length(b),1); x(n)=A(n,c)/A(n,n);for k=n-1:-1:1x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n)/A(k,k);end%顯示計算結(jié)果disp('x=');disp(x);直接運(yùn)行上面的M文件或在Mat

45、lab命令窗口中直接輸入Gauss即可得出結(jié)果.在Matlab命令窗口中輸入Gauss得出結(jié)果如下:>> Gaussx= 2.0000 1.0000 -1.0000擴(kuò)展:Matlab求解線性方程的幾種命令如下(方程組的一般形式可用矩陣和向量表示成: ,但運(yùn)用下列方法的前提必須保證所求解的方程為恰定方程,即方程組存在唯一的一組解):運(yùn)用求逆思想: 或 ;左除法,原理上是運(yùn)用高斯消元法求解,但Matlab在實際執(zhí)行過程中是通過分解法進(jìn)行的(即先將矩陣A作分解,再回代計算): ;用符號矩陣法計算,這種計算方法最接近精確值,但計算速度最慢: 通過將矩陣施行初等行變換化成行簡化階梯形的辦法,

46、可以這樣實現(xiàn)之: ; .上面四種常用的辦法示例如下:>> A=1 2 3;2 7 5;1 4 9 %上面示例方程組系數(shù)A = 1 2 3 2 7 5 1 4 9>> b=1 6 -3' %方程組右端的系數(shù)b = 1 6-3>> x1_1=inv(A)*b,x1_2=A(-1)*b %方法一,求逆思想x1_1 = 2.0000 1.0000 -1.0000x1_2 = 2.0000 1.0000 -1.0000>> x2=Ab %方法二,左除思想x2 = 2 1-1>> x3=sym(A)sym(b) %方法三,符號法 x3 =

47、 2 1 -1>> C=A,b,rref(C) %方法四, 行簡化階梯形思想,最后輸出結(jié)果的一列為解C = 1 2 3 1 2 7 5 6 1 4 9 -3ans = 1 0 0 2 0 1 0 1 0 0 1 -1例 2.2 用選列主元的Gauss消元法解如下方程:解:直接建立求解該方程的M文件Gauss_line.m,求解程序編制如下:%求解例題2.2%高斯列主元消元法求解線性方程組Ax=b%A為輸入矩陣系數(shù),b為方程組右端系數(shù)%方程組的解保存在x變量中format long;%設(shè)置為長格式顯示,顯示15位小數(shù)A=0.00001,1;2,1b=1.00001,3'm,n

48、=size(A);%先檢查系數(shù)正確性if m=n error('矩陣A的行數(shù)和列數(shù)必須相同'); return;endif m=size(b) error('b的大小必須和A的行數(shù)或A的列數(shù)相同'); return;end%再檢查方程是否存在唯一解if rank(A)=rank(A,b) error('A矩陣的秩和增廣矩陣的秩不相同,方程不存在唯一解'); return;endc=n+1;A(:,c)=b; %(增廣)for k=1:n-1r,m=max(abs(A(k:n,k); %選主元 m=m+k-1; %修正操作行的值 if(A(m,k)

49、=0) if(m=k) A(k m,:)=A(m k,:); %換行 end A(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k)*A(k, k:c); %消去 endendx=zeros(length(b),1); %回代求解x(n)=A(n,c)/A(n,n);for k=n-1:-1:1 x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n)/A(k,k);enddisp('X=');disp(x);format short;%設(shè)置為默認(rèn)格式顯示,顯示5位運(yùn)行得到輸出結(jié)果如下:A = 2.000000000000000

50、1.000000000000000b = 3.000000000000000X= 1.000000000000000 1.000000000000000例 2.3 用消元法思想求的逆陣.解:解法一:直接建立求解的M文件:Gauss_Jordan.m,源程序如下:%Gauss-Jordan法求例2.3clc;A=1 -1 0;2 2 3;-1 2 1;A1=A;%先保存原來的方陣An,m=size(A); if n=m error('A必須為方陣'); return; endA(:,n+1:2*n)=eye(n);%構(gòu)造增廣矩陣for k=1:n l,m=max(abs(A(k:n,k)

溫馨提示

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

評論

0/150

提交評論