數(shù)學(xué)實(shí)驗(yàn)報(bào)告試行稿.doc_第1頁(yè)
數(shù)學(xué)實(shí)驗(yàn)報(bào)告試行稿.doc_第2頁(yè)
數(shù)學(xué)實(shí)驗(yàn)報(bào)告試行稿.doc_第3頁(yè)
數(shù)學(xué)實(shí)驗(yàn)報(bào)告試行稿.doc_第4頁(yè)
數(shù)學(xué)實(shí)驗(yàn)報(bào)告試行稿.doc_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù) 學(xué) 實(shí) 驗(yàn) 報(bào) 告(試 行 稿) 數(shù)學(xué)試驗(yàn)作為一門(mén)旨在加深學(xué)生更深入了解體會(huì)所學(xué)數(shù)學(xué)原理內(nèi)涵并強(qiáng)化應(yīng)用所學(xué)知識(shí)能力的新興課程,尚無(wú)固定模式與基本內(nèi)容相對(duì)統(tǒng)一的教材。而基于各不同專(zhuān)業(yè)不同的實(shí)際需要并為適應(yīng)不斷發(fā)展的科學(xué)技術(shù),不應(yīng)也不可能要求此類(lèi)課出現(xiàn)類(lèi)似有幾百年歷史而形成的相對(duì)穩(wěn)定的基礎(chǔ)數(shù)學(xué)教學(xué)模式與相對(duì)統(tǒng)一的教材。而相應(yīng)配套的試驗(yàn)報(bào)告更應(yīng)具有相當(dāng)?shù)撵`活性,包括格式與基本要求,此試行稿僅提供一種模式參考,希望在使用過(guò)程中不斷改進(jìn),去舊納新。我們熱切期望教師與同學(xué)們提出自己的想法與意見(jiàn),使報(bào)告無(wú)論從形式、內(nèi)容與基本要求諸方面不斷完善,而這一過(guò)程是無(wú)止境的。 在報(bào)告中依據(jù)需要附加了一些Matlab的使用方法及與試驗(yàn)相關(guān)的部份程序,僅供參考。 學(xué)號(hào): 班號(hào): 姓名: 成績(jī): 實(shí)驗(yàn)一 Matlab的使用目的:初步掌握Matlab的常用功能,包括: (1)算術(shù)運(yùn)算及常用函數(shù)的數(shù)值運(yùn)算。 (2)矩陣的運(yùn)算,應(yīng)特別強(qiáng)調(diào)求逆、特征值、特征向量等的運(yùn)算指令與使用方法。 (3)掌握2維及3維畫(huà)圖方法。 (4)初步掌握編寫(xiě)幾個(gè)語(yǔ)句的小程序,并學(xué)會(huì)編輯、修改、存盤(pán)、打開(kāi)及調(diào)用自己編寫(xiě)的程序的方法。 (5)了解符號(hào)數(shù)學(xué)工具箱。注:教師可依據(jù)實(shí)際需要,強(qiáng)調(diào)或增加實(shí)驗(yàn)內(nèi)容,重點(diǎn)介紹某些工具箱的使用。內(nèi)容: 1上機(jī)操作第一章書(shū)中所給實(shí)例,學(xué)習(xí)掌握各種數(shù)據(jù)輸入方法。包括Linspace (a,b,n)。這一函數(shù)生成從a到b共n個(gè)數(shù)值的等差數(shù)組,公差不再給出。 2完成下列題目,對(duì)每一題應(yīng)附有必須的程序語(yǔ)句(1)稱(chēng)為陣左除矩陣,其計(jì)算結(jié)果與大致相同,但二者又有差異。,稱(chēng)右除,結(jié)果基本相同于。用左除與求逆的方法求解方程組,其中 ; (a)方法: 程序語(yǔ)句: 計(jì)算結(jié)果: (b)方法: 程序語(yǔ)句: 計(jì)算結(jié)果: (2)設(shè)有分塊陣A如下:其中E、R、O、S分別為單位陣、隨機(jī)陣、零陣與對(duì)角陣,通過(guò)數(shù)值計(jì)算驗(yàn)證要求:使矩陣生成函數(shù),及分別生成上述4個(gè)矩陣,寫(xiě)出生成語(yǔ)句。 E= ;R= O= ;S=寫(xiě)出A的生成語(yǔ)句 A=計(jì)算,寫(xiě)出驗(yàn)證時(shí)你所用的指令: 附:diag( )生成一個(gè)對(duì)角陣,一般調(diào)用格式為diag(v, k) 是一個(gè)維行向量,是一個(gè)整數(shù),時(shí)可缺省. 用下列說(shuō)明其使用方法. 如,diag生成,divg生成. (3)通過(guò)Matlab的幫助系統(tǒng)掌握函數(shù),的用法,并用此諸命令解決以下問(wèn)題。 (a)已知一個(gè)多項(xiàng)式零點(diǎn)為求此按降冪排列的多項(xiàng)式要求:生成多項(xiàng)式的語(yǔ)句為: 計(jì)算之值的指令與結(jié)果為: (4)矩陣的特征方程是關(guān)于的多項(xiàng)式,其根為的特征值,現(xiàn)已知多項(xiàng)式,若能確定一個(gè)矩陣,使的特征多項(xiàng)式恰為,則稱(chēng)為的友元矩陣,從而求的根的問(wèn)題轉(zhuǎn)化為求的特征值問(wèn)題。Matlab完成求友元陣的函數(shù)為,這里是一個(gè)按的降冪排列得到的系數(shù)行向量。 利用求友元陣的特征值的方法求 的根,并與求根函數(shù)比較所得結(jié)果。要求:求的指令與結(jié)果為: 求的特征值的語(yǔ)句結(jié)果分別為: 的結(jié)果為: 結(jié)論: (5)作函數(shù)與的圖形要求:在一幅圖上用plot畫(huà)出這4條曲線,你的指令為: 用subplot畫(huà)4個(gè)函數(shù)圖形的指令為: (6)fplot是專(zhuān)用于繪制一元函數(shù)曲線的命令,其自變量取值點(diǎn)步長(zhǎng)是通過(guò)內(nèi)部自適應(yīng)算法而產(chǎn)生的,所以對(duì)曲線伏起劇烈的函數(shù),用fplot命令比用一般等距取點(diǎn)的plot命令給出的曲線更光滑準(zhǔn)確。fplot的具體使用格式為:要求:創(chuàng)建如下函數(shù): function ; 在上,令誤差, 繪圖 (7)用作圖法求的根的近似值要求:繪圖語(yǔ)句為: 對(duì)軸軸加標(biāo)志并加網(wǎng)格線的程序語(yǔ)句為: (8)作曲面的三維圖形要求:用你所知的方法繪圖 (a) (b)注:在(5)、(6)、(7)、(8)各作圖題目中,所畫(huà)圖形若有條件請(qǐng)打印出來(lái),若不具備條件,請(qǐng)用手工繪制略圖,附在你的試驗(yàn)報(bào)告上,以后的繪圖題目亦有類(lèi)似要求。 (9)建立M函數(shù)作以下計(jì)算: (a)自然數(shù)的階乘;(b)中取的組合。要求: (a)的程序文件為: (b)的程序文件為: (10)input是編程中,人機(jī)對(duì)話的主要函數(shù)之一,用help查詢(xún)其用法,編制滿(mǎn)足如下要求的程序。 用input語(yǔ)句輸入一個(gè)函數(shù)。 求其一階導(dǎo)數(shù)與二階導(dǎo)數(shù)。 將函數(shù),及其一階與二階導(dǎo)數(shù)畫(huà)在同一幅圖中。要求:編寫(xiě)滿(mǎn)足要求的程序: (11)繪制極坐標(biāo)系下曲線 要求:繪圖語(yǔ)句: 討論參數(shù)的影響 (12)空間兩曲面交線 將與的曲面圖形和交線圖形分別畫(huà)在兩張圖上(用函數(shù)subplot)。其圖附于報(bào)告上。 (13)編寫(xiě)任意函數(shù)展開(kāi)為各階Taylor多項(xiàng)式的程序,并將各階展開(kāi)畫(huà)在同一幅圖中。要求:你的程序 學(xué)號(hào): 班號(hào): 姓名: 成績(jī): 實(shí)驗(yàn)二 平面線性映射的迭代目的:明確在線性映射中,特征值與特征向量所起的作用,通過(guò)具體實(shí)例,感受線性變換A的特征值中模最大者在計(jì)算機(jī)動(dòng)化設(shè)計(jì)中所扮演的角色。內(nèi)容: (1)已知概率轉(zhuǎn)移矩陣 計(jì)算的特征值,與及屬于它們的特征向量,寫(xiě)出求它們的Matlab指令。 指令: 結(jié)果: (2)已知今天晴、陰、雨的概率為(P11,P21,P31),則第天晴陰雨的概率計(jì)算公式為, 其中利用(1)的結(jié)果,寫(xiě)出利用的特征值與特征向量的利于計(jì)算的計(jì)算公式,你的公式為: 時(shí),你的計(jì)算結(jié)果為: (3)與的特征向量作比較,你發(fā)現(xiàn)了什么?請(qǐng)敘述你的想法。 (4)設(shè)有矩陣及4個(gè)二維向量如下 ,求的特征值與屬于他們的特征向量的指令為: (5)計(jì)算 考察三個(gè)點(diǎn)列的軌跡,在Matla上畫(huà)出它們的圖形,將圖形附在下面,注意在圖中加標(biāo)記,最好將三個(gè)圖畫(huà)在同一個(gè)圖中以作比較,結(jié)合書(shū)中問(wèn)題5談?wù)勀愕母邢搿?(6)對(duì)迭代 迭代映射為從某個(gè)方便的開(kāi)始,畫(huà)出由生成的點(diǎn)列。下面用表示該點(diǎn)列。 (7) 計(jì)算與,迭代足夠多次,觀察點(diǎn)列的圖形。將PLANAR1改寫(xiě)為Matlab程序,并用該程序完成本練習(xí)。PLANAR1.m (8)由試驗(yàn)結(jié)果看出,多次迭代后映射的作用近似于下式 說(shuō)明的含意 (9)運(yùn)行本節(jié)后所附Planer2的Matlab程序,觀察這17條軌線,結(jié)合練習(xí)4,體會(huì)模最大的特征值在變換中所起的作用。 (10)對(duì)矩陣 重復(fù)(9)的練習(xí),注意,與的生成圖形作比較,找出它的按絕對(duì)值最大的特征值與屬于這一特征值的方向。(1, 1)(1, 1)(1, 1)(1, 1) (11)試編寫(xiě)一個(gè)程序,不妨稱(chēng)之為動(dòng)畫(huà)演示程序,將所給圖形沿方向拉長(zhǎng),沿方向壓縮,使其變成一個(gè)斜置棱形。你的程序?yàn)椋哼\(yùn)行你的程序得到的圖形是: 12對(duì)單位圓面,用滿(mǎn)秩矩陣作坐標(biāo)變換,對(duì)得到的數(shù)據(jù)畫(huà)圖,觀察圖形與你所選矩陣的關(guān)系。 你所選坐標(biāo)變換矩陣 C = 你的畫(huà)圖程序?yàn)椋?變換后的圖形為: C的特征值與特征向量分別為 ; ; 依據(jù)圖形的變化情形,你的結(jié)論是: 按你的意愿將單位圓在某些方向拉伸或壓縮,依據(jù)事先的設(shè)定,你如何設(shè)計(jì)你的坐標(biāo)變換矩陣。 你提的壓縮,拉伸方案是 你設(shè)定的矩陣C應(yīng)如何得到 上機(jī)驗(yàn)證之。 注意:fill作為繪圖函數(shù),繪制并充填二維圖形,請(qǐng)借助help了解它的詳細(xì)使用情況。運(yùn)行下列程序語(yǔ)句 x=0 1 1 0 0 ; y=0 0 1 1 0; % 正方形頂點(diǎn) fill (x, y, y) % 繪圖并以黃色填充 axis ( 1 2 1 2 ) % 改變作標(biāo)軸 說(shuō)明:fill畫(huà)出連接點(diǎn)(0,0)(1,0)(1,1)(0,1)(0,0)的封閉折線圖形。 學(xué)號(hào): 班號(hào): 姓名: 成績(jī): 實(shí)驗(yàn)3 常微分方程數(shù)值解目的: 對(duì)實(shí)際問(wèn)題建立其所滿(mǎn)足要求的微分方程并解之,是培養(yǎng)學(xué)生應(yīng)用數(shù)學(xué)知識(shí)能力的重要環(huán)節(jié)。因一般非線性微分方程,大都不存在解析解,因此采用數(shù)值算法,分析所得數(shù)據(jù)并結(jié)合對(duì)其相關(guān)圖形的研究就成為處理具體課題的重要科研手段。 通過(guò)該實(shí)驗(yàn),應(yīng)使學(xué)生體會(huì)在何種情形下可對(duì)非線性方程近似轉(zhuǎn)化為線性方程以便求得解析解,而在何種情形下,這一近似因產(chǎn)生大的誤差被放棄而采用求數(shù)值解的方法。 通過(guò)試驗(yàn),要求同學(xué)們熟練掌握Matlab中求解微分方程數(shù)值解的函數(shù)ode23與ode45的用法。 試驗(yàn)布置的題目一般為簡(jiǎn)化的實(shí)際問(wèn)題,一方面旨在培養(yǎng)學(xué)生的建模能力,另一方面亦要求其有一定的編程,求解方程及對(duì)相關(guān)數(shù)據(jù)包括圖形的分析能力,這正是按排此一實(shí)驗(yàn)的初忠。內(nèi)容: (1)通過(guò)課堂學(xué)習(xí),明了ode23與ode45兩函數(shù)其程序內(nèi)核的數(shù)學(xué)方法分別近似為二階與四階龍格庫(kù)塔法。需要強(qiáng)調(diào)的是盡管ode45的誤差精度高于ode23,但在一些情形下,ode23處理實(shí)際問(wèn)題的效果要優(yōu)于ode45。 (2)對(duì)方程(單擺問(wèn)題) 令,方程化為與其等價(jià)的一階方程組 求解程序?yàn)椋ㄈ。ɑ《龋?1. function xdot=danbai (, ) 2. g=9.8; 3. l=25; 4. xdot(1)=x(2); 5. xdot(2)=g/l * sin (x (1) ; 6. xdot=xdot(1); xdot(2); 7. t, x=ode23(danbai, 0, 10, 0.1745, 0針對(duì)上敘程序,回答如下問(wèn)題: a) t的維數(shù)由什么確定?運(yùn)行程序試一試。 b) 寫(xiě)出的形式,說(shuō)明矩陣兩列的含意。 c) 去掉語(yǔ)句6中分號(hào),觀察出現(xiàn)的情形,并解釋說(shuō)明之。 d) t的值在第幾條語(yǔ)句中賦值? 仔細(xì)體會(huì)程序的運(yùn)作原理。 (3)對(duì)改進(jìn)的歐拉公式 a) 編寫(xiě)求微分方程數(shù)值解的程序 你的程序?yàn)椋?b) 用上述程序與ode23解下列微分方程 (1) 或 (2) , (4)一只小船渡過(guò)寬為的河流,目標(biāo)是起點(diǎn)正對(duì)著的另一岸上點(diǎn),已知河水流速與船在靜水中的速度之比為 a) 建立小船航線的方程,求其解析解。 b) 設(shè),=,用數(shù)值解法求渡河所需時(shí)間,任意時(shí)刻小船的位置及航行曲線,作圖并與解析解比較。 (5)研究種群競(jìng)爭(zhēng)模型,當(dāng)甲、乙兩個(gè)種群各獨(dú)自生存時(shí),數(shù)量演變服從下面規(guī)律。其中,分別為時(shí)刻甲、乙兩個(gè)種群的數(shù)量,為其固有增長(zhǎng)率,為它們的最大容量,而當(dāng)這兩個(gè)種群在同一環(huán)境中生存時(shí),由于乙消耗有限資源對(duì)甲的增長(zhǎng)產(chǎn)生影響,將甲的方程修改為 (1)這里的含義是,對(duì)于供養(yǎng)甲的資源而言,單位數(shù)量乙(相對(duì))的消耗率為單位數(shù)量甲(相對(duì))消耗率的倍,類(lèi)似,甲的存在也影響了乙的增長(zhǎng),乙的方程應(yīng)改為 (2)給定種群初始值為及參數(shù)后方程(1)與(2)確定了兩種群的變化規(guī)律,因其解析解不存在,試用數(shù)值解法研究以下問(wèn)題: a) 設(shè),計(jì)算,畫(huà)出它們的圖形及相圖,說(shuō)明時(shí)間充分大以后的變化趨勢(shì)。 b) 改變,但不變(或保持)并分析所得結(jié)果,若,再分析結(jié)果,由此你得到什么結(jié)論,請(qǐng)用各參數(shù)生態(tài)學(xué)上的含意作出 c) 試驗(yàn)當(dāng),時(shí)會(huì)有什么結(jié)果;當(dāng),時(shí)又會(huì)出現(xiàn)什么結(jié)果,能解釋這些結(jié)果嗎? (6)前言中,曾就導(dǎo)彈B追蹤飛機(jī)A的軌跡問(wèn)題展開(kāi)討論,那里,為簡(jiǎn)化問(wèn)題,假設(shè)B與A的距離不變,其中,為的飛行軌跡的參數(shù)方程,待求函數(shù)。,是的飛行軌跡,是已知的。下面,我們繼續(xù)討論,并去掉不變的條件,而令。 (a)證明,B的飛行路線滿(mǎn)足微分方程其中為B的恒定速率。 (b)下面的4個(gè)程序動(dòng)態(tài)顯示了B追蹤A并最終追上A的過(guò)程。讀懂并運(yùn)行程序。A的逃逸路線: function S=A(t) If t6 S=8*t; 0; else S=8*(12-t); 1; end說(shuō)明:A先沿軸正向飛行,后當(dāng)時(shí),調(diào)頭回飛。B的追蹤路線(待求解方程): function zs, isterminal, direction=B(t, z, flag) global w % speed of the B X=A(t); h=X-z; nh=norm(h); % nh= if nargin3 | isempty (flag) zs=(w/nh)*h; else switch (flag) case events zs=nh-1e-3; isterminal=1; direction=0; otherwise error (unknow flag:, flag); end end說(shuō)明:由(a),待解方程中存在;為在適當(dāng)時(shí)間(變的很小時(shí))中止運(yùn)算,求解方程的積分器ode23及ode45借助函數(shù)odeset( )設(shè)定events選項(xiàng)為on時(shí),當(dāng)isterminal=1,且direction=0時(shí),將終止迭代運(yùn)算。詳見(jiàn)help odeset. 求解方程及圖示追蹤過(guò)程的主程序如下: % 以 main1-m存盤(pán) global w yo=60; 70; % initial starting point of B w=10; % speed of the B options=odeset (RelTol, 1e-5, Events, on); t, y=ode23 (B, 0, 20, yo, options); j= ; for h=1: lengthe (t) w=A(t(h); j=j; w;end xmin=min(min(y(:, 1), min(j(:, 1); xmax=max(max(y(:, 1), max(j(:, 1); ymin=min(min(y(:, 2), min(j(:, 2); ymax=max(max(y(:, 2), max(j(:, 2); clf; hold on ; axis=(xmin, xmax, ymin, ymax); for h=1: length(t)-1 plot (y(h, 1), y (h+1, 1), y(h, 2), y(h+1, 2), -, color, red, EraseMode, none); plot (j(h, 1), j(h+1, 1), j(h, 2), j(h+1, 2), :, color, black, EraseMode, none); drawnow; pause (0.3); end p=max(size(y); cross_1(y(p, 1), y(p, 2);hold off說(shuō)明:cross_1是在B追上A的那點(diǎn)處作一個(gè)標(biāo)記。下面是這一函數(shù)的代碼。 function cross_1 (cx, cy) v=2; kx=cx, cx, cx, cx-v, cx+v; ky=cy, cy+2.5*v, cy+1.5*v, cy+1.5*v, cy+1.5*v; plot (kx, ky) plot (cx, cy, 0) (c)如果建立微分方程很困難,則可用仿真的方法在計(jì)算機(jī)上一步步模擬B追蹤A的實(shí)際過(guò)程。請(qǐng)給出算法,并編寫(xiě)程序動(dòng)態(tài)顯示B追蹤A的過(guò)程。 你的理論依據(jù)是: 你的程序。 學(xué)號(hào): 班號(hào): 姓名: 成績(jī): 實(shí)驗(yàn)四 Matlab程序編寫(xiě)目的: 程序的編寫(xiě)調(diào)試,是建模的重要組成部分。為進(jìn)一步提高同學(xué)們的編程能力,本節(jié)試驗(yàn)給出了一系列具有一定難度的實(shí)用程序,要求同學(xué)們讀懂并上機(jī)運(yùn)行之。 關(guān)于程序的功能說(shuō)明,除必要的文字簡(jiǎn)述,大部份附加于程序的幫助系統(tǒng)內(nèi)。而更深入了解程序的運(yùn)作機(jī)制,則需同學(xué)們進(jìn)一步閱讀相關(guān)書(shū)籍。 程序的選擇力求其實(shí)用性,并重視動(dòng)畫(huà)的演示效果,希望這些程序的給出,對(duì)激發(fā)同學(xué)們編寫(xiě)高質(zhì)量應(yīng)用程序的熱情起到拋磚引玉的效果。 一、options=odeset( )的設(shè)定形式 以求解高階微分方程為例,重點(diǎn)說(shuō)明結(jié)構(gòu)變量options中事件變量events的使用。 (1)求解高階方程時(shí),還須將其等價(jià)的轉(zhuǎn)化為一階方程組,已知待求解方程為 與其等價(jià)的一價(jià)微分方程組為: (2)求解范德堡(Vandor Pol)方程 與其等價(jià)的一階微分方程組為:在前項(xiàng)給出的結(jié)果下,編寫(xiě)待求解程序?yàn)椋?以vdpol.m存盤(pán) if navginodeset % 顯示odeset的設(shè)定內(nèi)容Abstol:(絕對(duì)誤差),缺省值le-6Reltol:(相對(duì)誤差),缺省值le-3Events: function在本問(wèn)題中,結(jié)構(gòu)options除Events的選項(xiàng)設(shè)定為函數(shù)Vdpolevents的地址(指針)外,其佘全部用缺省值, 在調(diào)用ode45時(shí),積分器指向vdpol, 由上一步值,遞歸的計(jì)算下一步值,同時(shí)調(diào)用events所指向的函數(shù)vdpolevents,并將新計(jì)算的函數(shù)值傳給vdpolevents, 之后計(jì)算value是否為0, 若不為0, 返回ode45繼續(xù)計(jì)算, 否則, 檢查is terminal的值,若此值為0, 則ode45繼續(xù)計(jì)算, 并將使Value為0的值返給te與ye, 但若isterminal值為1, 則終止ode45的調(diào)用,并將使Value=0的t與y值返給te與ye, 對(duì)direction的賦值為0, 1, -1, 值為0時(shí),忽略Value是大于0還是小于0趨于0,賦值為1時(shí),則當(dāng)Value大于0趨于0時(shí),終止運(yùn)算,。在實(shí)驗(yàn)三的問(wèn)題(6)中,給出了導(dǎo)彈追綜并追上擊中飛機(jī)的追綜路線求解程序,在那里終止ode45運(yùn)算的事件程序混編在待求解方程中。重新改寫(xiě)程序,將終止運(yùn)算程序與待求解方程分離。你的程序?yàn)椋?(a)待求解的B的追綜路線程序: (b)終止ode45調(diào)用的事件函數(shù): (c)求解方程的主程序?yàn)椋憾?yīng)用程序1:ex_draw(arg)這一程序在當(dāng)前坐標(biāo)軸下用鼠標(biāo)拖動(dòng)畫(huà)線,在畫(huà)線起點(diǎn),按鼠標(biāo)左鍵,出現(xiàn)一個(gè)“+”字,之后按住左鍵(不放鍵),拖動(dòng)鼠標(biāo),則可畫(huà)出一條紅線,指針到哪兒,紅線跟到哪兒,放開(kāi)鼠標(biāo),一條線畫(huà)線結(jié)束,之后可重復(fù)畫(huà)第二,第三條線,。按任意鍵結(jié)束畫(huà)線。函數(shù)以es_draw.m存盤(pán)。以下為程序代碼。%遞歸調(diào)用的畫(huà)線程序function ex_draw(arg)global DRAW_HL % 全局變量一般用大寫(xiě)字母。if nargin=0arg=ex_line;endif isstr(arg) % initial call,clear all % set things up.Hf=gcf;%若當(dāng)前有圖形窗口,將窗口句柄賦于 Hf,若無(wú)圖形窗口,則建立%新窗口對(duì)象,并將其句柄值存于Hf中。Set (Hf , Pointer,crossh,;%set up callback for line startBackingStore,off WindowButtonDownFcn,ex_draw(1)figure(Hf)elseif arg=1 % callback is line start pointfp=get(gca,CurrentPoint); % start of line pointset(gca,Userdata,fp(1,1:2) % store in axes userdataser(gcf,WindowButtonMotionFcn,ex_draw(2),WindowButtonUpFcn,ex_draw(3)elseif arg=2 % callback is mouse motioncp=get(gca,CurrentPoint);cp=cp(1,1:2);fp=get(gca,Userdata);Hl=line(Xdata,fp(1);cp(1),Ydata,fp(2);cp(2),EraseMode,xor,Color,r,LineStyle,-,Clipping,off);if isempty(DRAW_HL) % delete prior line if it existsdelete(DRAW_HL)endDRAW_HL=H1; % store current line handleelseif arg=3 % callback is line end point, finish upset(gcf,Pointer,arrow,BackingStore,onWindowButtonDownFcn, ,WindowButtonMotionFcn, ,WindowButtonUpFcn, )set(gca,Userdata,);set(DRAW_HL,EraseMode,normal) % render line betterkey=waitforbuttonpress;if keygtext(finish);returnelseex_draw;endend說(shuō)明:nargin 與nargout 為Matlab提供的檢測(cè)函數(shù)輸入輸出參數(shù)個(gè)數(shù)的函數(shù)。arg則表明函數(shù)有輸入?yún)?shù),但參數(shù)形式不定。亦可無(wú)參數(shù)調(diào)用。注意程序的遞歸調(diào)用。說(shuō)明:arg=1時(shí)的調(diào)用情形:arg=2 :arg=3 :說(shuō)明Key=waitforbuttonpress 的功能:三、應(yīng)用程序2:eigshow(arg)eigshow( ) 動(dòng)態(tài)顯示線性變換中特征值與特征向量的作用。注意各子程序的功能。讀懂并上機(jī)運(yùn)行。簡(jiǎn)述各程序模塊的功能。initialize:initv:action:movev:setmode:function eigshow(arg) %顯示二維矩陣的特征值的本質(zhì).if nargin= =0; initializeelseif arg= =0 actionelseif arg0 setmode(arg)else initialize(arg);endfunction initialize(arg)if nargin= =0 arg=6;endif isequal(get(gcf,tag),eigshow); h=get(gcf,userdata); mats=h.mats;else set(gcf,numbertitle,off,menubar,none) h.svd=0; mats= %二階方陣數(shù)組.5/4 0; 0 3/45/4 0; 0 3/41 0; 0 10 1; 1 00 1; -1 01 3; 4 2/41 3; 2 4/43 1; 4 2/43 1; -2 4/42 4; 2 4/42 4; -1 -2/46 4; -1 2/4randn(2,2);end%根據(jù)參數(shù)的不同確定變換矩陣.if all(size(arg)= =1) if (arglength(mats)mindex=arg;A=eval(matsmindex); %變換矩陣由二階方陣數(shù)組中的某一個(gè). else A=randn(2,2); S=sprintf(%4.2f %4.2f; %4.2f %4.2f,A.); %一個(gè)二維隨機(jī)陣. mindex=length(mats); mats=mats(1:mindex-1); S; mats(mindex); endelse A=arg; %變換矩陣直接在參數(shù)中指定. if isstr(A);S=A;A=eval(A); else S= sprintf( %4.2f %4.2f; %4.2f %4.2f,A.); end if any(size(A) =2)error(Matrix must be 2-by-2) end mats=S; mats; mindex=1;endclfif h.svd, t=svd/ (eig); else, t=eig/ (svd);enduicontrol( %界面控制按鈕style,pushbutton,units,normalized,position,.86 .60 .12 .06,string,t,value,h.svd,callback,eigshow(-1);uicontrol( style,pushbutton,units,normalized,position, .86 .50 .12 .06,string,help,callback,helpwin eigshow)uicontrol( style,pushbutton,units,normalized,position,.86 .40 .12 .06,string,close,callback,close(gcf)uicontrol( style,popup, %變換矩陣選擇下拉菜單.units,normalized,position,.28 .92 .48 .08,string,mats,tag,mats, fontname,courier fontweight,bold,fontsize,14, value,mindex, callback,eigshow(get(gco,value);s=1.1*max(1,norm(A); %圖形繪制.axis(-s s s s)axis squarexcolor=0 .6 0Axcolor=0 0 .8h.A=A;h.mats=mats;h.x=initv(1 0,x,xcolor);h.Ax=initv(A(:, 1),Ax,Axcolor);if h.svd h.y=initv(0 1,y,xcolor); h.Ay=initv(A(:, 2),Ay,Axcolor); xlabel(Make A*x pependicular to A*y,fontweight,bold) set(gcf,name,svdshow)else xlabel(Make A*x parallel to x,fontweight,bold) set(gcf,name,eigshow)endset(gcf,tag,eigshow, userdata,h, windowbuttondownfcn, eigshow(0);set(gcf, windowbuttonmotionfcn , eigshow(0) ), windowbuttonupfcn, set(gcf, windowbuttonmotionfcn , )%-function h=initv(v,t,color) %動(dòng)畫(huà)演示程序體.h.mark=line(v(1),v(2),marker,.,erase,none,color,color);h.line=line(0 v(1),0 v(2),erase,xor,color,color);h.text=text(v(1)/2,v(2)/2,t,fontsize,12,erase,xor,color,color);%-function actionh=get(gcf,userdata); %與用戶(hù)的交互作用程序.pt=get(gca,currentpoint);x=pt(1,1:2);x=x/norm(x);movev(h.x,x);A=h.A;movev(h.Ax,A*x);if h.svd y=-x(2);x(1); movev(h.y,y); movev(h.Ay,A*y);end%-function movev(h,v)set(h.mark,xdata,v(1),ydata,v(2);set(h.line, xdata,0 v(1),ydata,0 v(2);set(h.text,pos,v/2);%-function setmode(arg)h=get(gcf,userdata);h.svd=h.svd;set(gcf,userdata,h)initialize(get(findobj(gcf,tag,mats),value)四、閱讀與理解1:給出三段程序。mmgetxy( )調(diào)用mmcxy( ),mmcxy( )調(diào)用mmgcf,程序代碼如下:-function Hf=mmgcfHf=get(0,Children);if isempty(Hf)returnelse Hf=get(0,CurrentFigure);end-function out=mmcxy(arg)global MMCXY_OUTifnarginHf=mmgcf;if isempty(Hf);error(No Figure Available.),endHa=findobj(Hf,Type,axes);if isempty(Ha),error(No Axes in Current Figure.),endHu=uicontrol(Hf,Style,text, units,pixels, Position,1 1 140 15, HorizontalAlignment,left);set(Hf,Pointer,crossh, WindowButtonMotionFcn,mmcxy( move ), WindowButtonDownFcn,mmcxy( end ), Userdata,Hu);figure(Hf) %bring figure forwardif nargout %must return x-y data key=waitforbuttonpress; %pause until mouse is pressed if dey, out= ; %return empty if aborted mmcxy(end); %clean things up else out=MMCXY_OUT; %now that move is complete return point end returnend elseif strcmp(arg,move) %mouse is moving in figure windowcp=get(gca,CurrentPoint); %get current mouse posstionMMCXY_OUT=cp(1,1:2);xystr=sprintf(%.3g,%.3g,MMCXY_OUT);Hu=get(gcf,Userdata);set(Hu,String,xystr); %put x-ycoordinates in text boxelseif strcmp(arg,end) %mouse click occurred,clean things upHu=get(gcf,Userdata);delete(Hu)set(gcf,Pointer,arrow, WindowButtonMotionFcn, , WindowButtonDownFcn, , Userdata, ); endfunction xy=mmgctxy(n)if nargin= =0,n=5;end % nobody wants more points!xy= ;s=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,;axis(axis);hold onfor i=1:ntmp=mmcxy;if isempty(tmp) returnelse xy=xy;tmp; plot(xy(i,1),xy(i,2),r*) text(xy(i,1),xy(i,2)+0.05,si)endendfor j=1:2for i=1:2waitforbuttonpress;dot=get(gca,CurrentPoint);xdata(i)=dot(1,1);ydata(i)=dot(1,2);end line(xdata,ydata);endhold off

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論