數(shù)值分析上機(jī)試驗(yàn)指導(dǎo)書講解_第1頁
數(shù)值分析上機(jī)試驗(yàn)指導(dǎo)書講解_第2頁
數(shù)值分析上機(jī)試驗(yàn)指導(dǎo)書講解_第3頁
數(shù)值分析上機(jī)試驗(yàn)指導(dǎo)書講解_第4頁
數(shù)值分析上機(jī)試驗(yàn)指導(dǎo)書講解_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、數(shù)值計(jì)算方法”上機(jī)實(shí)驗(yàn)指導(dǎo)書 實(shí)驗(yàn)一 誤差分析 實(shí)驗(yàn) 1.1(病態(tài)問題) 實(shí)驗(yàn)?zāi)康?:算法有“優(yōu)”與“劣”之分,問題也有“好”與“壞”之別。對(duì)數(shù)值方法 的研究而言,所謂壞問題就是問題本身對(duì)擾動(dòng)敏感者,反之屬于好問題。通過本實(shí)驗(yàn)可獲 得一個(gè)初步體會(huì)。 數(shù)值分析的大部分研究課題中,如線性代數(shù)方程組、矩陣特征值問題、非線性方程及 方程組等都存在病態(tài)的問題。病態(tài)問題要通過研究和構(gòu)造特殊的算法來解決,當(dāng)然一般要 付出一些代價(jià)(如耗用更多的機(jī)器時(shí)間、占用更多的存儲(chǔ)空間等) 。 問題提出 :考慮一個(gè)高次的代數(shù)多項(xiàng)式 20 p(x) ( x 1)(x 2) ( x 20) (x k) (1.1) k1 顯然該

2、多項(xiàng)式的全部根為 1,2,20共計(jì) 20個(gè),且每個(gè)根都是單重的。現(xiàn)考慮該多項(xiàng)式的 一個(gè)擾動(dòng) p( x) x19 0 (1.2) 其中 是一個(gè)非常小的數(shù)。這相當(dāng)于是對(duì)( 1.1)中 x19 的系數(shù)作一個(gè)小的擾動(dòng)。我們希望 比較( 1.1)和( 1.2)根的差別,從而分析方程( 1.1)的解對(duì)擾動(dòng)的敏感性。 實(shí)驗(yàn)內(nèi)容 :為了實(shí)現(xiàn)方便,我們先介紹兩個(gè) MATLAB 函數(shù):“roots”和“ poly”。 u roots(a) 其中若變量 a 存儲(chǔ) n+1 維的向量,則該函數(shù)的輸出 u 為一個(gè) n 維的向量。設(shè) a 的元素依次 為 a1,a2, ,an 1,則輸出 u 的各分量是多項(xiàng)式方程 a1xn

3、a2xn 1an x an 1 0 的全部根;而函數(shù) b poly (v 的輸出 b 是一個(gè) n+1 維向量,它是以 n 維向量 v 的各分量為根的多項(xiàng)式的系數(shù)。 可見“ roots” 和“ poly ”是兩個(gè)互逆的運(yùn)算函數(shù)。 ess 0.000000001; ve zeros(1,21); ve( 2) ess; roots( poly (1 : 20) ve) 上述簡單的 MATLAB 程序便得到 (1.2)的全部根,程序中的“ess”即是(1.2)中的 實(shí)驗(yàn)要求 : (1)選擇充分小的 ess,反復(fù)進(jìn)行上述實(shí)驗(yàn),記錄結(jié)果的變化并分析它們。如果擾動(dòng) 項(xiàng)的系數(shù) 很小,我們自然感覺( 1.1)

4、和( 1.2)的解應(yīng)當(dāng)相差很小。計(jì)算中你 有什么出乎意料的發(fā)現(xiàn)?表明有些解關(guān)于如此的擾動(dòng)敏感性如何? (2)將方程( 1.2)中的擾動(dòng)項(xiàng)改成 x18 或其它形式,實(shí)驗(yàn)中又有怎樣的現(xiàn)象出現(xiàn)? (3)(選作部分)請(qǐng)從理論上分析產(chǎn)生這一問題的根源。注意我們可以將方程(1.2) 寫成展開的形式, p( x, ) x20 x190 (1.3) 同時(shí)將方程的解 x 看成是系數(shù) 的函數(shù),考察方程的某個(gè)解關(guān)于 的擾動(dòng)是否敏感, 與研究它關(guān)于 的導(dǎo)數(shù)的大小有何關(guān)系?為什么?你發(fā)現(xiàn)了什么現(xiàn)象,哪些根關(guān)于 的變 化更敏感? 思考題一 :(上述實(shí)驗(yàn)的改進(jìn)) 在上述實(shí)驗(yàn)中我們會(huì)發(fā)現(xiàn)用 roots 函數(shù)求解多項(xiàng)式方程的精

5、度不高, 為此你可以考慮用 符號(hào)函數(shù) solve 來提高解的精確度,這需要用到將多項(xiàng)式轉(zhuǎn)換為符號(hào)多項(xiàng)式的函數(shù) poly2sym, 函數(shù)的具體使用方法可參考 MATLAB 的幫助。 思考題二 :(二進(jìn)制產(chǎn)生的誤差) 1000 用 MATLAB 計(jì)算 0.1 100 。結(jié)果居然有誤差!因?yàn)閺氖M(jìn)制數(shù)角度分析,這一計(jì)算 i1 應(yīng)該是準(zhǔn)確的。實(shí)驗(yàn)反映了 計(jì)算機(jī)內(nèi)部的二進(jìn)制本質(zhì) 。 思考題三 :(一個(gè)簡單公式中產(chǎn)生巨大舍入誤差的例子) 可以用下列式子計(jì)算自然對(duì)數(shù)的底數(shù) 這個(gè)極限表明隨著 n的增加,計(jì)算 e值的精度是不確定的?,F(xiàn)編程計(jì)算 f(n) (1 1)n與 n exp(1)值的差。 n大到什么程度的

6、時(shí)候誤差最大?你能解釋其中的原因嗎? 相關(guān) MATLAB 函數(shù)提示: poly(a)求給定的根向量 a 生成其對(duì)應(yīng)的多項(xiàng)式系數(shù)(降序)向量 roots(p)求解以向量 p 為系數(shù)的多項(xiàng)式(降序)的所有根 poly2sym(p) 將多項(xiàng)式向量 p 表示成為符號(hào)多項(xiàng)式(降序) sym(arg) 將數(shù)字、字符串或表達(dá)式 arg 轉(zhuǎn)換為符號(hào)對(duì)象 syms arg1 arg2 argk 將字符 arg1,arg2,argk定義為基本符號(hào)對(duì)象 solve(eq1) 求符號(hào)多項(xiàng)式方程 eq1 的符號(hào)解 實(shí)驗(yàn)二 插值法 實(shí)驗(yàn) 2.1(多項(xiàng)式插值的振蕩現(xiàn)象) 問題提出 :考慮一個(gè)固定的區(qū)間上用插值逼近一個(gè)函數(shù)。

7、顯然拉格朗日插值中使用的 節(jié)點(diǎn)越多,插值多項(xiàng)式的次數(shù)就越高。我們自然關(guān)心插值多項(xiàng)式的次數(shù)增加時(shí),Ln(x) 是 否也更加靠近被逼近的函數(shù)。龍格( Runge)給出一個(gè)例子是極著名并富有啟發(fā)性的。設(shè) 區(qū)間-1,1 上函數(shù) f ( x) 1 2 1 25x2 實(shí)驗(yàn)內(nèi)容:考慮區(qū)間 -1,1的一個(gè)等距劃分,分點(diǎn)為 xi1 2i , i 0,1,2, ,n n 則拉格朗日插值多項(xiàng)式為 n Ln(x) i0 1 2 1 2 5xi2 li x( 其中的 li(x),i 0,1,2, ,n是 n 次拉格朗日插值基函數(shù)。 實(shí)驗(yàn)要求 : (1) 選擇不斷增大的分點(diǎn)數(shù)目 n=2,3.,畫出原函數(shù) f(x)及插值多

8、項(xiàng)式函數(shù) Ln(x) 在 -1,1上的圖像,比較并分析實(shí)驗(yàn)結(jié)果。 ( 2)選擇其他的函數(shù),例如定義在區(qū)間 -5 ,5上的函數(shù) h(x) 1 x4 , g ( x ) arctan x 重復(fù)上述的實(shí)驗(yàn)看其結(jié)果如何 3)區(qū)間 a,b上切比雪夫點(diǎn)的定義為 xk ,k 1,2, ,n 1 b a b acos(2k 1) 2 2 2(n 1) 以x1,x2, xn 1為插值節(jié)點(diǎn)構(gòu)造上述各函數(shù)的拉格朗日插值多項(xiàng)式,比較其結(jié)果,試分析 原因。 實(shí)驗(yàn) 2.2(樣條插值的收斂性) 問題提出 :多項(xiàng)式插值是不收斂的,即插值的節(jié)點(diǎn)多,效果不一定就好。對(duì)樣條函數(shù) 插值又如何呢?理論上證明樣條插值的收斂性是比較困難的

9、,但通過本實(shí)驗(yàn)可以驗(yàn)證這一 理論結(jié)果 實(shí)驗(yàn)內(nèi)容 :請(qǐng)按一定的規(guī)則分別選擇等距或者非等距的插值節(jié)點(diǎn),并不斷增加插值節(jié)點(diǎn)的個(gè)數(shù)??紤]實(shí)驗(yàn) 2.1 中的函數(shù)或選擇其他你有興趣的函數(shù)。 實(shí)驗(yàn)要求 : (1)隨節(jié)點(diǎn)個(gè)數(shù)增加,比較被逼近函數(shù)和樣條插值函數(shù)誤差的變化情況。分析所得結(jié) 果并與拉格朗日多項(xiàng)式插值比較 (可以用 MATLAB 的函數(shù)“ spline”作此函數(shù)的三次樣條插 值,取 n=10、20,分別畫出插值函數(shù)及原函數(shù)的圖形 )。 (2)樣條插值的思想是早產(chǎn)生于工業(yè)部門。作為工業(yè)應(yīng)用的例子考慮如下問題:某汽 車制造商用三次樣條插值設(shè)計(jì)車門的曲線,其中一段的數(shù)據(jù)如下: xk 0 1 2 3 4 5

10、6 7 8 9 10 yk 0.0 0.79 1.53 2.19 2.71 3.03 3.27 2.89 3.06 3.19 3.29 yk 0.8 0.2 要求:i.自己編程計(jì)算(用三彎矩、三轉(zhuǎn)角方程均可) ii. 主函數(shù) myspline(x,y,邊界類型,邊界值, xi ) 其中: x 節(jié)點(diǎn) y 節(jié)點(diǎn)上的函數(shù)值 xi 未知節(jié)點(diǎn) 返回: S(xi) iii. 三對(duì)角方程組用追趕法求解 (書 P160) 實(shí)驗(yàn) 2.3:( 一維插值的應(yīng)用畫圖 ) 畫你自己的手的形狀,在 MATLAB中輸入 figure(position,get(0,screensize) axes(position,0 0

11、1 1) x,y=ginput; 將你的手掌張開放在計(jì)算機(jī)屏幕上,然后使用計(jì)算機(jī)鼠標(biāo)選取一系列點(diǎn)勾勒出手的輪 廓,按回車鍵結(jié)束 ginput過程,這樣就獲得了一系列你的手掌外形數(shù)據(jù)點(diǎn) (x,y) 。也可以這 樣獲得數(shù)據(jù)點(diǎn) ( x, y) ,先把手放在一張白紙上, 并用筆畫出它的輪廓線, 然后將紙貼在計(jì)算 機(jī)屏幕上,透過紙能看到平面上的鼠標(biāo),并通過 ginput記錄下輪廓上的點(diǎn)。 將x和 y坐標(biāo)值看作是兩個(gè)獨(dú)立變量的函數(shù),獨(dú)立變量的取值為從1到記錄的點(diǎn)的數(shù) 目。利用MATLAB 的插值函數(shù)進(jìn)行插值,并畫出你的手掌外形輪廓。 思考題 :(二維插值) 1. 在一丘陵地帶測量高程, x 和 y 方向每

12、隔 100 米測一個(gè)點(diǎn),得高程數(shù)據(jù) 如下。試用 MATLAB 的二維插值函數(shù)“ interp2”進(jìn)行插值,并由此找出最高點(diǎn) 和該點(diǎn)的高程。 y x 100 200 300 400 100 636 697 624 478 200 698 712 630 478 300 680 674 598 412 400 662 626 552 334 2. 畫出山區(qū)地貌圖。 利用 MATLAB 的 peaks 函數(shù)生成某山區(qū)的一些地點(diǎn)及其高度三維數(shù)據(jù)(單 位: m)。命令格式: x,y,z=peaks(n),生成的 n 階矩陣 x,y,z 為測量的山區(qū)地點(diǎn) 三維數(shù)據(jù)( n=30)。根據(jù) peaks 函數(shù)生成

13、的數(shù)據(jù),利用 Matlab 二維插值畫出該 山區(qū)的地貌圖和等值線圖 (提示函數(shù): interp2、 meshgrid、plot3 等)。 plot(x,y) subplot(m,n,k) yi=interp1(x,y,xi) pp=spline(x,y) 相關(guān) MATLAB 函數(shù)提示: 作出以數(shù)據(jù) (x(i),y(i) 為節(jié)點(diǎn)的折線圖,其中 x,y 為同長度的 向量 將圖形窗口分為 m*n 個(gè)子圖,并指向第 k 幅圖 根據(jù)數(shù)據(jù) (x,y) 給出在 xi 的分段線性插值結(jié)果 yi 返回樣條插值的分段多項(xiàng)式 (pp)形式結(jié)構(gòu) pp=csape(x,y, 邊界類型 ,邊界值 ) 生成各種邊界條件的三

14、次樣條插值 yi=ppval(pp,xi)pp 樣條在 xi 的函數(shù)值 ZI=interp2(x,y,z,xi,yi) x,xi 為行向量, y,yi 為列向量, z 為矩陣的雙線性二維插 值 ZI=interp2( ,spline) ZI=griddata(x,y,z,xi,yi) 使用二元三次樣條插值 x,y,z 均為向量(不必單調(diào))表示數(shù)據(jù), xi,yi 為網(wǎng)格向量 的三角形線性插值(不規(guī)則數(shù)據(jù)的二維插值) 實(shí)驗(yàn)三 函數(shù)逼近與曲線擬合 實(shí)驗(yàn) 3.1(曲線逼近方法的比較) 問題提出 :曲線的擬合和插值,是逼近函數(shù)的基本方法,每種方法具有各 自的特點(diǎn)和特定的適用范圍,實(shí)際工作中合理選擇方法是

15、重要的。 實(shí)驗(yàn)內(nèi)容 :考慮實(shí)驗(yàn) 2.1 中的著名問題。下面的 MATLAB 程序給出了該函 數(shù)的二次和三次擬合多項(xiàng)式。 x=-1:0.2:1; y=1/(1+25*x.*x); xx=-1:0.02:1; p2=polyfit(x,y,2); yy=polyval(p2,xx); plot(x,y, o ,xx,yy); xlabel( x ); ylabel( y ); hold on; p3=polyfit(x,y,3); yy=polyval(p3,xx); plot(x,y, o ,xx,yy); hold off; 適當(dāng)修改上述 MATLAB 程序,也可以擬合其他你有興趣的函數(shù)。 實(shí)

16、驗(yàn)要求 : (1) 將擬合的結(jié)果與拉格朗日插值及樣條插值的結(jié)果比較。 ( 2)歸納總結(jié)數(shù)值實(shí)驗(yàn)結(jié)果, 試定性地說明函數(shù)逼近各種方法的適用范圍, 及實(shí)際應(yīng)用中選擇方法應(yīng)注意的問題。 實(shí)驗(yàn) 3.2:(最小二乘擬合的經(jīng)驗(yàn)公式和模型) 1.(已知經(jīng)驗(yàn)公式) :某類疾病發(fā)病率為 y 和年齡段 x (每五年為一段,例 bx 如 05 歲為第一段, 610 歲為第二段 )之間有形如 y ae 的經(jīng)驗(yàn)關(guān)系,觀 測得到的數(shù)據(jù)表如下 x 1 2 3 4 5 6 7 8 9 y 0.898 2.38 3.07 1.84 2.02 1.94 2.22 2.77 4.02 x 10 11 12 13 14 15 16

17、17 18 19 y 4.76 5.46 6.53 10.9 16.5 22.5 35.7 50.6 61.6 81.8 實(shí)驗(yàn)要求 : bx ( 1)用最小二乘法確定模型 y ae 中的參數(shù) a和b (提示函數(shù): lsqcurvefit , lsqnonlin )。 bx ( 2)利用 MATLAB 畫出離散數(shù)據(jù)及擬合函數(shù) y ae 圖形。 3)利用 MATLAB 畫出離散點(diǎn)處的誤差圖,并計(jì)算相應(yīng)的均方誤差。 2(最小二乘擬合模型未知) 某年美國轎車價(jià)格的調(diào)查資料如表,其中 xi 表示轎車的使用年數(shù), yi 表示 相應(yīng)的平均價(jià)格, 實(shí)驗(yàn)要求 :試分析用什么形式的曲線來擬合表中的數(shù)據(jù), 并預(yù) 測

18、使用 4.5 年后轎車的平均價(jià)格大致為多少? xi 1 2 3 4 5 6 7 8 9 10 yi 2615 1943 1494 1087 765 538 484 290 226 204 實(shí)驗(yàn) 3.3(研究最佳平方逼近多項(xiàng)式的收斂性質(zhì)) 實(shí)驗(yàn)內(nèi)容和要求: 取函數(shù) f(x) ex ,在-1 ,1 上以勒讓德多項(xiàng)式為基函數(shù), 對(duì)于 n 0,1, ,10構(gòu)造最佳平方逼近多項(xiàng)式 pn(x),令 n(x) f(x) pn(x) ,將 n(x) x的曲線畫在一個(gè)圖上。 令En max f(x) pn(x) ,畫出 En n的曲線。做出 En n之間的最小二乘 1x1 曲線,能否提出關(guān)于收斂性的猜測。 思考

19、題一 :(病態(tài))考慮將0,130 等分節(jié)點(diǎn),用多項(xiàng)式 y 1 xx5生成 數(shù)據(jù),再用 polyfit 求其 3次、5次、10 次、 15次擬合多項(xiàng)式,并分析誤差產(chǎn)生 的原因。 思考題二: 調(diào)研 Matlab 擬合工具箱的使用。 相關(guān) MATLAB 函數(shù)提示: p=polyfit(x,y,k) 用 k 次多項(xiàng)式擬合向量數(shù)據(jù) (x,y) ,返回多項(xiàng)式的降冪系數(shù),當(dāng) k=n-1 時(shí),實(shí)現(xiàn)多項(xiàng)式插值,這里 n 是向量維數(shù) 實(shí)驗(yàn)四 數(shù)值積分與數(shù)值微分 實(shí)驗(yàn) 4.1 (高斯數(shù)值積分方法用于積分方程求解) 問題提出 :線性的積分方程的數(shù)值求解,可以被轉(zhuǎn)化為線性代數(shù)方程組的 求解問題。 而線性代數(shù)方程組所含未

20、知數(shù)的個(gè)數(shù), 與用來離散積分的數(shù)值方法的 節(jié)點(diǎn)個(gè)數(shù)相同。在節(jié)點(diǎn)數(shù)相同的前提下,高斯數(shù)值積分方法有較高的代數(shù)精度, 用它通常會(huì)得到較好的結(jié)果。 實(shí)驗(yàn)內(nèi)容 :求解第二類 Fredholm 積分方程 b y(t) k(t,s)y(s)ds f (t),a t b a 首先將積分區(qū)間 a,b等分成 n 份,在每個(gè)子區(qū)間上離散方程中的積分就得到 線性代數(shù)方程組。 實(shí)驗(yàn)要求 :分別使用如下方法,離散積分方程中的積分 1.復(fù)化梯形方法;2.復(fù)化辛甫森方法; 3.復(fù)化高斯方法。求解如下的積分方程。 2 1 t t t 1) y(t) 2 0et y(s)ds et ,方程的準(zhǔn)確解為 et ; e 1 0 11

21、 2) y(t) 0est y(s)ds 1 1e2t et ,方程的準(zhǔn)確解為 et ; 比較各算法的計(jì)算量和誤差以分析它們的優(yōu)劣。 實(shí)驗(yàn) 4.2(高維積分?jǐn)?shù)值計(jì)算的蒙特卡羅方法) 問題提出 :高維空間中的積分,如果維數(shù)不很高且積分區(qū)域是規(guī)則的或者 能等價(jià)地寫成多重積分的形式, 可以用一元函數(shù)積分的數(shù)值方法來計(jì)算高維空間 的積分。蒙特卡羅方法對(duì)計(jì)算復(fù)雜區(qū)域甚至不連通的區(qū)域上的積分并沒有特殊的 困難。 實(shí)驗(yàn)內(nèi)容 :對(duì)于一般的區(qū)域 ,計(jì)算其測度(只要理解為平面上的面積或 空間中的體積)的一般方法是:先找一個(gè)規(guī)則的區(qū)域 A 包含 ,且 A 的測度是 已知的。生成區(qū)域 A 中 m 個(gè)均勻分布的隨機(jī)點(diǎn)

22、pi ,i 1,2, ,m ,如果其中有 n 個(gè) 落在區(qū)域 中,則區(qū)域 的測度 m( )為 n/m。函數(shù) f(x) 在區(qū)域 上的積分可以 近似為:區(qū)域 的測度與函數(shù) f(x)在 中 n個(gè)隨機(jī)點(diǎn)上平均值的乘積,即 1 f(x)dx m( ) 1f (pk ) n pk 實(shí)驗(yàn)要求 :假設(shè)冰琪淋的下部為一錐體而上面為一半球,考慮冰琪淋體積問 題:計(jì)算錐面 z2 x2 y2 上方和球面 x2 y2 (z 1)2 1內(nèi)部區(qū)域的體積。如果 使用球面坐標(biāo),該區(qū)域可以表示為如下的積分: 2cos 2 2 sin d d d 用蒙特卡羅方法可以計(jì)算該積分。 另一方面,顯然這樣的冰琪淋可以裝在如下立方體的盒子里

23、1 x 1, 1 y 1,0 z 2 而該立方體的體積為 8。只要生成這個(gè)盒子里均勻分布的隨機(jī)點(diǎn),落入冰琪淋錐 點(diǎn)的個(gè)數(shù)與總點(diǎn)數(shù)之比再乘以 8 就是冰琪淋錐的體積。 比較兩種方法所得到的結(jié) 果。 類似的辦法可以計(jì)算復(fù)雜區(qū)域的測度(面積或體積) 。試求由下列關(guān)系所界 定區(qū)域的測度: 0 x 1,1 y 2, 1 z 3 (1) ex y sin( z) y 0 1 x 3, 1 y 4 33 (2) x3 y3 29 y ex 2 0 x 1,0 y 1,0 z 1 (3) x2 sin y z x z ex 1 相關(guān) MATLAB 函數(shù)提示: diff(x)如果 x 是向量,返回向量 x 的差

24、分;如果 x 是矩陣,則按各列作 差分 diff(x,k)k 階差分 q=polyder(p) 求得由向量 p 表示的多項(xiàng)式導(dǎo)函數(shù)的向量表示 q Fx=gradient(F,x) 返回向量 F 表示的一元函數(shù)沿 x 方向的導(dǎo)函數(shù) F(x) ,其中 x 是與 F 同維數(shù)的向量 z=trapz(x,y) x 表示積分區(qū)間的離散化向量; y 是與 x 同維數(shù)的向量, 表示被積 函數(shù); z 返回積分的近似值 z=guad(fun,a,b,tol) 自適應(yīng)步長 Simpson 積分法求得 Fun 在區(qū)間 a,b 上的定積 分, Fun為M 文件函數(shù)句柄, tol 為積分精度 z=dblquad(fun,

25、a,b,c,d,tol,method) 求得二元函數(shù) Fun(x,y)的重積分 z=triplequad(fun,a,b,c,d,e,f,tol,method) 求得三元函數(shù) Fun(x,y,z)的重積分 10 實(shí)驗(yàn)五 解線性方程組的直接方法 實(shí)驗(yàn) 5.1 (主元的選取與算法的穩(wěn)定性) 問題提出 :Gauss消去法是我們?cè)诰€性代數(shù)中已經(jīng)熟悉的。 但由于計(jì)算機(jī)的 數(shù)值運(yùn)算是在一個(gè)有限的浮點(diǎn)數(shù)集合上進(jìn)行的, 如何才能確保 Gauss消去法作為 數(shù)值算法的穩(wěn)定性呢? Gauss消去法從理論算法到數(shù)值算法,其關(guān)鍵是主元的選 擇。主元的選擇從數(shù)學(xué)理論上看起來平凡,它卻是數(shù)值分析中十分典型的問題。 實(shí)驗(yàn)內(nèi)

26、容 :考慮線性方程組 Ax b, A Rn n,b Rn 編制一個(gè)能自動(dòng)選取主元,又能手動(dòng)選取主元的求解線性方程組的 Gauss 消去過程。 實(shí)驗(yàn)要求 : 61 861 ( 1)取矩陣 A 861 86 7 15 b ,則方程有解 x* (1,1, ,1)T 15 14 取 n=10 計(jì)算矩陣的條件數(shù)。讓程序自動(dòng)選取主元 (順序消元 ) ,結(jié)果如何? (2)現(xiàn)選擇程序中手動(dòng)選取主元的功能。每步消去過程總選取按模最小或 按模盡可能小的元素作為主元, 觀察并記錄計(jì)算結(jié)果。 若每步消去過程總選取按 模最大的元素作為主元,結(jié)果又如何?分析實(shí)驗(yàn)的結(jié)果。 ( 3)取矩陣階數(shù) n=20 或者更大,重復(fù)上述實(shí)

27、驗(yàn)過程,觀察記錄并分析不 同的問題及消去過程中選擇不同的主元時(shí)計(jì)算結(jié)果的差異, 說明主元素的選取在 消去過程中的作用。 (4)選取其他你感興趣的問題或者隨機(jī)生成矩陣,計(jì)算其條件數(shù)。重復(fù)上 述實(shí)驗(yàn),觀察記錄并分析實(shí)驗(yàn)結(jié)果。 實(shí)驗(yàn) 5.2(線性代數(shù)方程組的性態(tài)與條件數(shù)的估計(jì)) 問題提出 :理論上,線性代數(shù)方程組 Ax b 的攝動(dòng)滿足 x co n(dA) A b x 1 A 1 A A b 矩陣的條件數(shù)確實(shí)是對(duì)矩陣病態(tài)性的刻畫,但在實(shí)際應(yīng)用中直接計(jì)算它顯 然不現(xiàn)實(shí),因?yàn)橛?jì)算 A 1 通常要比求解方程 Ax b 還困難。 實(shí)驗(yàn)內(nèi)容 :MATLAB 中提供有函數(shù) “condest”可以用來估計(jì)矩陣的條

28、件數(shù), 它給出的是按 1-范數(shù)的條件數(shù)。首先構(gòu)造非奇異矩陣 A 和右端,使得方程是可 以精確求解的。再人為地引進(jìn)系數(shù)矩陣和右端的攝動(dòng) A和 b,使得 A 和 b 充 11 分小 實(shí)驗(yàn)要求: 1)假設(shè)方程 Ax=b 的解為 x,求解方程 (A A)x? b b ,以 1-范數(shù), 給出 x x? x 的計(jì)算結(jié)果。 給出 x x 的計(jì)算結(jié)果。 (2)選擇一系列維數(shù)遞增的矩陣 (可以是隨機(jī)生成的) ,比較函數(shù)“condest” 所需機(jī)器時(shí)間的差別 .考慮若干逆是已知的矩陣,借助函數(shù)“eig”很容易給出 cond2(A) 的數(shù)值。將它與函數(shù)“ cond(A,2)”所得到的結(jié)果進(jìn)行比較。 (3)利用“co

29、ndest”給出矩陣 A 條件數(shù)的估計(jì), 針對(duì)( 1)中的結(jié)果給出 x x 的理論估計(jì),并將它與( 1)給出的計(jì)算結(jié)果進(jìn)行比較,分析所得結(jié)果。注意, 如果給出了 cond(A) 和 A 的估計(jì),馬上就可以給出 A 1 的估計(jì)。 ( 4)估計(jì)著名的 Hilbert 矩陣的條件數(shù)。 1 H (hi,j)n n, hi,j i j 1, i,j 1,2, ,n 思考題一:( Vadermonde矩陣) 1 x0 2 x0 x0n 1 2 n x1 x1 x1 1 2 n x2 x2 x2 2 n 1 xn xn xn A ,b n xi x0 i0 n x1i i0 n x2i i0 n xni i

30、0 其中, xk 1 0.1k,k 0,1, ,n , (1)對(duì) n=2,5,8,計(jì)算 A 的條件數(shù);隨 n 增大,矩陣性態(tài)如何變化? (2)對(duì) n=5,解方程組 Ax=b ;設(shè) A 的最后一個(gè)元素有擾動(dòng) 10-4,再求解 Ax=b ( 3)計(jì)算( 2)擾動(dòng)相對(duì)誤差與解的相對(duì)偏差,分析它們與條件數(shù)的關(guān)系。 (4)你能由此解釋為什么不用插值函數(shù)存在定理直接求插值函數(shù)而要用拉格朗 日或牛頓插值法的原因嗎? 12 相關(guān) MATLAB 函數(shù)提示: zeros(m,n) 生成 m 行, n 列的零矩陣 ones(m,n) 生成 m 行,n 列的元素全為 1 的矩陣 eye(n) 生成 n 階單位矩陣 r

31、and(m,n) 生成 m 行,n 列(0,1)上均勻分布的隨機(jī)矩陣 diag(x) 返回由向量 x 的元素構(gòu)成的對(duì)角矩陣 tril(A) 提取矩陣 A 的下三角部分生成下三角矩陣 triu(A) 提取矩陣 A 的上三角部分生成上三角矩陣 rank(A) 返回矩陣 A 的秩 det(A) 返回方陣 A 的行列式 inv(A) 返回可逆方陣 A 的逆矩陣 V ,D=eig(A) 返回方陣 A 的特征值和特征向量 norm(A,p) 矩陣或向量的 p 范數(shù) cond(A,p) 矩陣的條件數(shù) L , U,P=lu(A) 選列主元 LU 分解 R=chol(X) 平方根分解 Hi=hilb(n) 生成

32、 n 階 Hilbert 矩陣 13 實(shí)驗(yàn)六 解線性方程組的迭代法 實(shí)驗(yàn) 6.1(病態(tài)的線性方程組的求解) 問題提出 :理論的分析表明,求解病態(tài)的線性方程組是困難的。實(shí)際情況 是否如此,會(huì)出現(xiàn)怎樣的現(xiàn)象呢? 實(shí)驗(yàn)內(nèi)容 :考慮方程組 Hx=b 的求解,其中系數(shù)矩陣 H 為 Hilbert 矩陣, 1 H (hi,j )n n, hi ,j, i, j 1,2, ,n i j 1 這是一個(gè)著名的病態(tài)問題。 通過首先給定解 (例如取為各個(gè)分量均為 1)再 計(jì)算出右端 b 的辦法給出確定的問題。 實(shí)驗(yàn)要求 : (1)選擇問題的維數(shù)為 6,分別用 Gauss消去法、列主元 Gauss消去法、 J 迭代法

33、、GS迭代法和 SOR 迭代法求解方程組, 其各自的結(jié)果如何?將計(jì)算結(jié)果 與問題的解比較,結(jié)論如何? ( 2)逐步增大問題的維數(shù)(至少到 100),仍然用上述的方法來解它們,計(jì) 算的結(jié)果如何?計(jì)算的結(jié)果說明了什么? (3)討論病態(tài)問題求解的算法 實(shí)驗(yàn) 6.2 書上 P211 計(jì)算實(shí)習(xí)題 2,其中 N=100,第二小問改為用 Jacobi迭 代、G-S 迭代、紅黑排序的 G-S 迭代求解,并比較他們之間的收斂速度; 進(jìn)一步, 用 BSOR 迭代求解,試找出最優(yōu)松弛因子。 14 實(shí)驗(yàn)七 非線性方程求根 實(shí)驗(yàn) 7.1(迭代法、初始值與收斂性) 實(shí)驗(yàn)?zāi)康?:初步認(rèn)識(shí)非線性問題的迭代法與線性問題迭代法的

34、差別,探討 迭代法及初始值與迭代收斂性的關(guān)系。 問題提出 :迭代法是求解非線性方程的基本思想方法,與線性方程的情況 一樣,其構(gòu)造方法可以有多種多樣, 但關(guān)鍵是怎樣才能使迭代收斂且有較快的收 斂速度。 實(shí)驗(yàn)內(nèi)容 :考慮一個(gè)簡單的代數(shù)方程 x2 x 1 0 針對(duì)上述方程,可以構(gòu)造多種迭代法,如 xn 1 xn2 1 (7.1) 1 xn 1 1 (7.2) xn xn 1 xn 1 (7.3) 在實(shí)軸上取初始值 x0,請(qǐng)分別用迭代( 7.1)-(7.3)作實(shí)驗(yàn),記錄各算法 的迭代過程。 實(shí)驗(yàn)要求 : ( 1)取定某個(gè)初始值,分別計(jì)算( 7.1) -(7.3)迭代結(jié)果,它們的收斂性 如何?重復(fù)選取不

35、同的初始值, 反復(fù)實(shí)驗(yàn)。 請(qǐng)自選設(shè)計(jì)一種比較形象的記錄方式 (如利用 MATLAB 的圖形功能),分析三種迭代法的收斂性與初值選取的關(guān)系。 (2)對(duì)三個(gè)迭代法中的某個(gè),取不同的初始值進(jìn)行迭代,結(jié)果如何?試分 析迭代法對(duì)不同的初值是否有差異? (3)線性方程組迭代法的收斂性是不依賴初始值選取的。比較線性與非線 性問題迭代的差異,有何結(jié)論和問題。 相關(guān) MATLAB 函數(shù)提示: x=fzero(fun,x0) 返回一元函數(shù) fun 的一個(gè)零點(diǎn),其中 fun 為函數(shù)句柄, x0 為標(biāo) 量時(shí),返回在 x0 附近的零點(diǎn);x0 為向量 a,b時(shí),返回函數(shù)在 a,b 中的零點(diǎn) x,f,h=fsolve(fu

36、n,x0) 返回一元或多元函數(shù) x0 附近 fun 的一個(gè)零點(diǎn), 其中 fun 為 函數(shù)句柄, x0 為迭代初值; f 返回 fun 在 x 的函數(shù)值,應(yīng)該接近 0; h 返回值如果大于 0,說明計(jì)算結(jié)果可靠,否則不可靠 15 實(shí)驗(yàn)八 常微分方程初值問題數(shù)值解法 實(shí)驗(yàn) 8.1(Lorenz 問題與混沌) 問題提出 :考慮著名的 Lorenz 方程 (8.1) ddxt s(y x) dy rx y xz ddtz dz xy bz dt 其中 s,r,b 為變化區(qū)域有一定限制的實(shí)參數(shù)。該方程形式簡單,表面上看并 無驚人之處,但由該方程提示出的許多現(xiàn)象,促使“混沌”成為數(shù)學(xué)研究的嶄新 領(lǐng)域,在實(shí)

37、際應(yīng)用中也產(chǎn)生了巨大的影響。 實(shí)驗(yàn)內(nèi)容:先取定初值 y0=(0,0,0),參數(shù) s=10,r=28,b=8/3,用MATLAB 的數(shù)值 求常微分方程函數(shù) ods45編程對(duì)( 8.1)進(jìn)行求解 實(shí)驗(yàn)要求 : (1)對(duì)目前取定的參數(shù)值 s,r 和 b,選取不同的初值 y0 進(jìn)行運(yùn)算,觀察計(jì) 算的結(jié)果有什么特點(diǎn)?解的曲線是否有界?解的曲線是不是周期的或趨于某個(gè) 固定點(diǎn)? (2)在問題允許的范圍內(nèi)適當(dāng)改變其中的參數(shù)值 s,r,b,再選取不同的初始 值 y0 進(jìn)行運(yùn)算,觀察并記錄計(jì)算的結(jié)果有什么特點(diǎn)?是否發(fā)現(xiàn)什么不同的現(xiàn) 象? 思考題一 :考慮如下常微分方程 x rx bsi na(x) k0 k1c

38、o sm(t) 先固定其中參數(shù): r=0.9,b=3,a=1,k0=0,m=1,初始值為原點(diǎn), t 的范圍為 0-500 分別取不同的 k1,如 1,1.5,2,2.5,3,3.5 等,繪圖觀察相位圖( x,x)的 變化情況,能找到其中的規(guī)律嗎? 試試改變其它參數(shù)呢? 16 相關(guān) MATLAB 函數(shù)提示: t,y=ode45(odefun,tspan,y0) odefun 表示 f(t,y) 的函數(shù)句柄, t 是標(biāo)量, y 是標(biāo)量 或向量; tspan 是二維向量 t0,tf ,表示自變量初值 t0 和終值 tf ;y0 表示初值向量,若無輸出參數(shù),則作出圖形 17 附錄 MATLAB 簡介

39、這里介紹 MATLAB 一些入門知識(shí),包括 MATLAB 桌面和窗口, MATLAB 命令格式、數(shù)據(jù)格式、數(shù)據(jù)文件和變量管理, MATLAB 的數(shù)組和矩陣運(yùn)算, MATLAB 的字符串、元胞和結(jié)構(gòu)等數(shù)據(jù)類型, MATLAB 的程序設(shè)計(jì)方法, MATLAB 作圖方法在線幫助的使用和程序文件和目錄的管理等。 表一 MATLAB 的基本命令 主題詞 含義 主題詞 含義 format 設(shè)置數(shù)據(jù)顯示格式 feval 函數(shù)求值 who 顯示變量名 input 提示輸入 whos 顯示變量信息 disp 輸出 clear 清除內(nèi)存變量 tic 啟動(dòng)秒表 save 保存工作變量到文件 toc 時(shí)間讀數(shù)(秒)

40、load 從文件裝載變量 help 幫助 linspace 區(qū)間等分 lookfor 查找 length 獲取數(shù)組長度 type 列程序清單 size 矩陣大小 which 查找文件目錄 max 最大值 double 雙精度 min 最小值 str2num 字符串轉(zhuǎn)化為數(shù)值 sum 求和 num2str 數(shù)值轉(zhuǎn)化為字符串 find 條件檢索 MATLAB 桌面 啟動(dòng) MATLAB 后,就進(jìn)入 MATLAB 的桌面,圖 1 為 MATLAB6.1 的默認(rèn) ( Default)桌面。第一行為菜單欄, 第二行為工具欄, 下面是三個(gè)最常用的窗口。 右邊最大的是命令窗口( Command Window

41、),左上方前臺(tái)為發(fā)行說明書窗口 ( Launch pad),后臺(tái)為工作空間( Workspace),左下方為命令歷史( Command History )后臺(tái)為當(dāng)前目錄( Current Directory)。 1. 窗口 (1)命令窗口 該窗口是進(jìn)行 MATLAB 操作最主要的窗口。窗口中“ ”為命令輸入提示 符,其后輸入運(yùn)算命令,按回車鍵就可執(zhí)行運(yùn)算,并顯示運(yùn)算結(jié)果 .。 18 圖1 (2)發(fā)行說明書窗口 發(fā)行說明書窗口是 MATLAB 所特有的,用來說明用戶所擁有的 Mathworks 公司產(chǎn)品的工具包、演示以及幫助信息。 (3)工作空間 在默認(rèn)桌面,位于左上方窗口前臺(tái),列出內(nèi)存中 MA

42、TLAB 工作空間的所有 變量的變量名、 尺寸、字節(jié)數(shù)。 用鼠標(biāo)選中變量, 擊右鍵可以打開、 保存、刪除、 繪圖等操作。 (4)當(dāng)前目錄 在默認(rèn)桌面, 位于左下方窗口后臺(tái), 用鼠標(biāo)點(diǎn)擊可以切換到前臺(tái)。 該窗口列 出當(dāng)前目錄的程序文件( .m)和數(shù)據(jù)文件( .mat)等。用鼠標(biāo)選中文件,擊右鍵 可以進(jìn)行打開、運(yùn)行、刪除等操作。 (5)命令歷史( Command History) 該窗口列出在命令窗口執(zhí)行過的 MATLAB 命令行的歷史記錄。用鼠標(biāo)選中 命令行,擊右鍵可以進(jìn)行復(fù)制、執(zhí)行( Evaluate Selection)、刪除等操作。 除上述窗口外, MATLAB 常用窗口還有編程器窗口、圖

43、形窗口等。 、數(shù)據(jù)和變量 1.表達(dá)式 在命令窗口作一些簡單的計(jì)算, 就如同使用一個(gè)功能強(qiáng)大的計(jì)算器, 使用變 量無須預(yù)先定義類型。 19 例如,設(shè)球半徑為 r=2,求球的體積 V 4 r3 。 3 r=2%表達(dá)式將 2 賦予變量 r r=%系統(tǒng)返回 r 的值 2 v=4/3*pi*r3%pi 為內(nèi)置常量 ,乘方用 表示 v= 33.5103 幾個(gè)表達(dá)式可以寫在一行,用分號(hào)(; )或逗號(hào)(,)分割,用分號(hào)(;)使 該表達(dá)式運(yùn)算結(jié)果不顯示,而逗號(hào)(, )則顯示結(jié)果。也可以將一個(gè)長表達(dá)式分 在幾行上寫,用三點(diǎn)( )續(xù)行。 若需要修改已執(zhí)行過的命令行, 可以在命令歷史中找到該命令行復(fù)制, 再粘 貼至命

44、令窗口修改。也可以直接使用鍵盤 調(diào)出已執(zhí)行過的命令行修改。 2. 數(shù)據(jù)顯示格式 MATLAB 默認(rèn)的數(shù)據(jù)顯示格式為短格式( short):當(dāng)結(jié)果為整數(shù),就作為整 數(shù)顯示;當(dāng)結(jié)果是實(shí)數(shù), 以小數(shù)點(diǎn)后四位的長度顯示。 若結(jié)果的有效數(shù)字超出一 定范圍,以科學(xué)計(jì)數(shù)法顯示(如 3.2000e-006表示3.2 10 6 )。數(shù)據(jù)顯示格式可使 用命令 Format 改變。例如: format long;v%長格式, 16 位 v = 33.51032163829112 format short;v%短格式 v = 33.5103 format rational;v %有理格式,近似分?jǐn)?shù) v = 6501/

45、194 3. 復(fù)數(shù) MATLAB 中復(fù)數(shù)可以如同實(shí)數(shù)一樣,直接輸入和計(jì)算。例如: a=1+2i;b=5-4*i;c=a/b c = -0.0732 + 0.3415i 4. 預(yù)定義變量 MATLAB 有一些預(yù)定義變量(表 1),啟動(dòng)時(shí)就已賦值,可以直接使用,如 前我們使用的圓周率 pi 和虛數(shù)單位 i. 表1 常用預(yù)定義變量 變量名 說明 i或j 虛數(shù)單位 1 pi 圓周率 3.14159 eps 浮點(diǎn)數(shù)識(shí)別精度 2(-52)= 2.2204 10 16 realmin 最小正實(shí)數(shù) 2.2251 10 308 realmax 最大正實(shí)數(shù) 1.7977 10308 inf 無窮大 20 NaN

46、沒有意義的數(shù) 預(yù)定義變量在工作空間觀察不到。 如果預(yù)定義變量被用戶重新賦值, 則原來 的功能暫不能使用。當(dāng)這些用戶變量被清除( clear)或 MATLAB 重新啟動(dòng)后, 這些功能得以恢復(fù)。 5. 用戶變量 MATLAB 變量名總以字母開頭,以字母、數(shù)字或下劃線組成,區(qū)分大小寫, 有效字符長度為 63 個(gè)。如 A,a,a1,a_b都是合法的,且 a 與 A 表示不同變量。在 Command Window 中使用的變量一旦被賦值,就會(huì)攜帶這個(gè)值存在于工作空間, 直到被清除或被賦予新的值。 ans是系統(tǒng)一個(gè)特別的變量名。若一個(gè)表達(dá)式運(yùn)算結(jié)果沒有賦予任何變量, 系統(tǒng)自動(dòng)用 ans存放答案。例如: A

47、=5+4i;b=5-4*i;B=1;A*b%沒有定義 A*b 的輸出變量 ans = 41%ans 來接受計(jì)算結(jié)果,注意這是大寫 A 與 小寫 b 的乘積,盡管我們可以使用工作空間來查詢和清除變量, 但使用下列命令 方式更快捷: whos%查詢 Workspace中的變量列表 Name Size Bytes Class A 1x1 16 double array (complex) B 1x1 8 double array a 1x1 16 double array (complex) ans 1x1 8 double array b 1x1 16 double array (complex)

48、 c 1x1 16 double array (complex) Grand total is 6 elements using 80 bytes A%查詢變量 A 的值 A = 5.0000 + 4.0000i clear A%清除變量 A A%再查詢 A 的值,已經(jīng)不存在了 ? Undefined function or variable A. clear%清除 Workspace中所有變量 whos%Workspace中已沒有任何變量了 三、數(shù)組和矩陣運(yùn)算 MATLAB 基本數(shù)據(jù)單元是無需指定維數(shù)的數(shù)組。 數(shù)組運(yùn)算是 MATLAB 最鮮 明的特點(diǎn),一方面可以使得計(jì)算程序簡明易讀,另一方面

49、可以提高計(jì)算速度。 1. 數(shù)組的輸入 最常用的數(shù)組是雙精度數(shù)值數(shù)組( double array)。一維數(shù)組相當(dāng)于向量,二 維數(shù)組相當(dāng)于矩陣, 一維數(shù)組可以視為二維數(shù)組的特例。 二維數(shù)組的第一維稱為 “行”,第二維稱為“列” 。MATLAB 數(shù)組無需預(yù)先定義維數(shù)。直接輸入數(shù)組的 21元素,用中括號(hào)( )表示一個(gè)數(shù)組,同行元素間用空格或逗號(hào)分隔,不同行間 用分號(hào)或回車分隔,例如: linspace生 clear;a=1,2,3;4,5,6;7,8,9 a = 1 2 3 4 5 6 7 8 9 或 a=1 2 3 %這種方式特別適用于大型矩陣 4 5 6 7 8 9 a = 1 2 3 4 5 6

50、 7 8 9 對(duì)于等差數(shù)列構(gòu)造的一維數(shù)組,可用冒號(hào)運(yùn)算生成,也可用函數(shù) 成。 b=0:3:10 %初值: 增量:終值 b = 0 3 6 9 b=0:10 %增量為 1 可省略 b = 0 1 2 3 4 5 6 7 10 b=10:-3:0 b = 10 7 4 1 b=linspace(0,10,4) b = 0 3.3333 6.6667 length(b) ans = 4 b(3) ans = 6.6667 b(1,end) %遞減 %將區(qū)間0, 10等分為 4-1=3 份 10.0000 %查詢 b 的長度 %查詢 b 的第三個(gè)元素 %查詢 b 的首和尾元素 ans = 0 10 二

51、維數(shù)組元素雙下標(biāo)編址按通常方式,單下標(biāo)編址按列排序。 size(a)%查詢數(shù)組 a 的尺寸 ans = 3 3 a(3,2),a(6) 22 ans = c=a(1 3,2 3) 塊矩陣) c = 2 3 8 9 d=a(2,:) d = 4 5 6 a(:) ans = 1 4 ans = 8 %提取 a 的第一、第三行和第二、第三列(分 %提取 a 的第二行 %將 a 所有元素按單下標(biāo)順序排為列向量 7 2 5 8 3 6 9 一些特殊的二維數(shù)組可以用函數(shù)產(chǎn)生,例如: a=zeros(2,4) %生成 2行 4列零矩陣 a = 0 0 0 0 0 0 0 0 b=ones(1,4) %生成

52、 1行 4列1矩陣 b = 1 1 1 1 c=a;b %拼接 c = 0 0 0 0 0 0 0 0 1 1 1 1 c(2,1)=100 %修改部分元素 c = 0 0 0 0 100 0 0 0 1 1 1 1 reshape(c,2,6) %按 2 行 6 列重排矩陣元素 ans = 0 1 0 0 1 0 23 100 0 1 0 0 1 注意:數(shù)組下標(biāo)對(duì)應(yīng)矩陣的行和列,編址一律從 1 開始,不能用 0. 矩陣輸入也可用“ load”命令從外部數(shù)據(jù)文件導(dǎo)入 2. 數(shù)組運(yùn)算 數(shù)組運(yùn)算是指數(shù)組對(duì)應(yīng)元素之間的運(yùn)算, 也稱點(diǎn)運(yùn)算。 矩陣的乘法、 乘方和 除法有特殊的數(shù)學(xué)含義, 并不是數(shù)組對(duì)應(yīng)

53、元素的運(yùn)算, 所數(shù)組乘法、 乘方和除法 的運(yùn)算符前特別加了一個(gè)點(diǎn)。 特別要區(qū)分?jǐn)?shù)組運(yùn)算在乘法、 乘方和除法上的意義 和表示上與矩陣運(yùn)算的不同。 表2 數(shù)組運(yùn)算符 運(yùn)算 符號(hào) 說明 數(shù)組加與減 A+B 與 A-B 對(duì)應(yīng)元素之間加減 數(shù)乘數(shù)組 k*A 或 A*k k乘 A的每個(gè)元素 數(shù)與數(shù)組加減 k+A 或 k-A k 加(減) A 的每個(gè)元素 數(shù)組乘數(shù)組 A.*B 點(diǎn)運(yùn)算只有點(diǎn)乘、點(diǎn)乘方、點(diǎn)除三個(gè),表 示對(duì)應(yīng)元素之間的運(yùn)算; (.* )是一個(gè)整 體,點(diǎn)(.)不能漏掉,(.)和( *)之間也 不能有空格 數(shù)組乘方 A.k,k.A 數(shù)除以數(shù)組 k./A 數(shù)組除法 左除 A.B,右除 B./A cle

54、ar;A=1 -1;0 2;B=0 1;1 -1; A.*B%注意不是 A*B ans = 0 -1 0 -2 A.B,A./B Warning: Divide by zero. ans = 0 -1.0000 Inf -0.5000 Warning: Divide by zero. ans = Inf -1 0 -2 A.2 ans = 1 1 0 4 1./A Warning: Divide by zero. ans = 1.0000 -1.0000 Inf 0.5000 3. 矩陣運(yùn)算 矩陣是一個(gè)二維數(shù)組, 所以矩陣的加、 減、數(shù)乘等運(yùn)算與數(shù)組運(yùn)算是一致的 但是有兩點(diǎn)需要注意: 24 (

55、1)對(duì)于乘法、乘方和除法等三種運(yùn)算,矩陣運(yùn)算與數(shù)組運(yùn)算的運(yùn)算符及 含義不同:矩陣運(yùn)算按線性變換定義, 使用通常符號(hào); 數(shù)組運(yùn)算按對(duì)應(yīng)元素運(yùn)算 定義,使用點(diǎn)運(yùn)算符; (2)數(shù)與矩陣加減、矩陣除法在數(shù)學(xué)上是沒有意義的,在MATLAB 中為 簡便起見,定義了這兩類運(yùn)算,其含義見表 3. 表3 矩陣運(yùn)算符 運(yùn)算 符號(hào) 說明 轉(zhuǎn)置 A 加與減 A+B 與 A-B 同數(shù)組運(yùn)算 數(shù)乘矩陣 k*A 或 A*k 同數(shù)組運(yùn)算 矩陣乘法 A*B 矩陣乘方 Ak 數(shù)與矩陣加減 k+A 與 k-A k+A 等價(jià)于 k*ones(size(A)+A 矩陣除法 左除 AB ,右除 B/A 它們分別為矩陣方程 AX=B 和

56、XA=B 的解 A=1 2;3 4;B=4 3;2 1; 100+A ans = 101 102 103 104 A*B,A.*B%注意矩陣運(yùn)算和數(shù)組運(yùn)算的區(qū)別 ans = 8 5 20 13 ans = 4 6 6 4 AB,B/A,A.B,B./A%注意矩陣運(yùn)算和數(shù)組運(yùn)算的區(qū)別 ans = -6.0000 -5.0000 5.0000 4.0000 ans = -3.5000 2.5000 -2.5000 1.5000 ans = 4.0000 1.5000 0.6667 0.2500 ans = 4.0000 1.5000 0.6667 0.2500 4.數(shù)學(xué)函數(shù) 數(shù)組的數(shù)學(xué)函數(shù)也是按每

57、個(gè)元素的運(yùn)算, 使用通常的函數(shù)符號(hào), 常用數(shù)學(xué)函 數(shù)見表 4 25 表 4 數(shù)學(xué)函數(shù) 函數(shù) 意義 函數(shù) 意義 sin 正弦 fix 向 0 取整 cos 余弦 mod 模余 tan 正切 rem 除法余數(shù) cot 余切 abs 絕對(duì)值(模) asin 反正弦 exp 指數(shù)函數(shù) acos 反余弦 log 自然對(duì)數(shù) sqrt 開方 log10 以 10 為底的對(duì)數(shù) A=4 -1;3 2; B=exp(A) B = 54.5982 0.3679 20.0855 7.3891 C=fix(B) C = 54 0 20 7 D=sin(C) D = -0.5588 0 0.9129 0.6570 E=l

58、og(D) Warning: Log of zero. E = -0.5820 + 3.1416i -Inf -0.0911 -0.4201 5.關(guān)系與邏輯運(yùn)算 MATLAB 的關(guān)系運(yùn)算和邏輯運(yùn)算符都是對(duì)于元素的操作,其結(jié)果是特殊的 邏輯數(shù)組( logical array)表 5,“真”用 1 表示,“假”用 0 表示,而邏輯運(yùn)算中, 所有非零元素作為 1(真)處理。 表5 關(guān)系運(yùn)算和邏輯運(yùn)算 運(yùn)算符 含義 運(yùn)算符 含義 小于 b=sqrt(a); a=,num2str(a),a 的開方 =,num2str(b) ans = a=12,a的開方 =3.4641 MATLAB 命令可以定義成一個(gè)

59、字符串,使用 eval 可以使該字符串所表達(dá)的 MATLAB 命令得到執(zhí)行。 fun=x.2.*sin(x); x=1;eval(fun) ans = 0.8415 x=1:3;eval(fun) ans = 0.8415 3.6372 1.2701 2. 元胞和結(jié)構(gòu) 不管是數(shù)值數(shù)組還是字符數(shù)組, 其數(shù)據(jù)結(jié)構(gòu)必須是整齊的。 首先數(shù)值和字符 不能混合,其次小數(shù)組拼接成大數(shù)組時(shí),其尺寸 (size)必須相符 (agree)。例如: A=first;second%錯(cuò)誤 ? Error using = vertcat All rows in the bracketed expression must

60、have the same number of columns. 將不同類型、不同尺寸的數(shù)組,加大括號(hào)( ),可構(gòu)成一個(gè)元胞。幾個(gè)元 胞可以構(gòu)成元胞數(shù)組。 Ac1=first;1:3;Ac2=second;1 2;3 4; Ac=Ac1,Ac2 Ac = first second 1x3 double2x2 double size(Ac) ans = 2 2 Ac(2,1)%小括號(hào),查詢 Ac 的第二行第一列元素 ans = 1x3 double 28 Ac2,1 內(nèi)容 %大括號(hào),查詢 Ac 的第二行第一列元素的具體 ans = 1 2 3 一個(gè)結(jié)構(gòu)通過“域”來定義,比元胞更豐富、更靈活。幾個(gè)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論