數學實驗(線性代數、微積分、常微分方程、概率論與數理統(tǒng)計等)_第1頁
數學實驗(線性代數、微積分、常微分方程、概率論與數理統(tǒng)計等)_第2頁
數學實驗(線性代數、微積分、常微分方程、概率論與數理統(tǒng)計等)_第3頁
數學實驗(線性代數、微積分、常微分方程、概率論與數理統(tǒng)計等)_第4頁
數學實驗(線性代數、微積分、常微分方程、概率論與數理統(tǒng)計等)_第5頁
已閱讀5頁,還剩218頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGE1PAGE220內容簡介本書主要講授大學工科數學課程中的線性代數、微積分、常微分方程、概率論與數理統(tǒng)計等重要數學方法用MATLAB軟件的實現過程及其應用,內容分五個部分:第一部分為MATLAB軟件使用簡介,介紹MATLAB軟件的基本內容;第二部分為線性代數實驗,介紹用MATLAB軟件求解線性方程組、計算矩陣特征值和特征向量、進行矩陣的相似對角化及矩陣分解的方法;第三部分為微積分實驗,介紹用MATLAB軟件進行符號微積分運算、數值微分和數值積分計算的方法;第四部分為常微分方程實驗,介紹用MATLAB軟件求解線性(非線性)微分方程(組)的解析解和數值解、進行動態(tài)仿真的方法;第五部分為概率論與數理統(tǒng)計實驗,介紹用MATLAB軟件進行隨機變量的相關計算、隨機數的產生及樣本數據統(tǒng)計與可視化的方法。另外,針對具體內容介紹了相應的應用實例,以幫助學生逐步學會用所學知識去解決實際問題。每一章后附有一定量的實驗題,以供學生課后上機練習及實驗。本書適用于理工科院校大學本、??茖W生,以及具備工科數學知識和計算機知識的其他科技工作者。前言“數學實驗”是在數學應用于各個學科領域,特別是應用于工程技術領域的過程中產生的,是伴隨著計算機的廣泛使用和數學軟件的有效開發(fā)而發(fā)展的,它著重體現了“用數學”和“實現數學”的理念?!坝脭祵W”是指應用數學理論知識解決相關領域中的實際問題;“實現數學”是指通過計算機及數學軟件實現部分數學結果的理論推導和計算過程,使得抽象的數學內容直觀化、可視化。數學實驗課程是大學工科數學課程教學改革與建設的主要成果之一,目前已在全國各高校廣泛開設,并已成為大學工科數學課程的重要組成部分。數學實驗課開設的主要目的是通過“數學實驗”使學生深入理解數學基本概念和基礎理論、熟悉并掌握常用的數學軟件,培養(yǎng)學生應用數學知識并結合計算機工具解決實際問題的能力。數學實驗課將數學知識與計算機應用有機地結合起來,以數學知識為背景、以數學軟件為工具,為學生自覺學習數學方法、動手解決實際問題搭建了平臺,對提高學生學習數學的興趣、加強學生的數學理論基礎、培養(yǎng)學生的開拓性思維等具有重要作用。本書主要講授大學工科數學課程中的線性代數、微積分、常微分方程、概率論與數理統(tǒng)計等重要數學方法用MATLAB軟件的實現過程,內容分五個部分:第一部分為MATLAB軟件使用簡介,介紹功能強大的MATLAB軟件的基本運行,變量、矩陣、數組及其運算,函數及語句和M文件的編寫,以及繪圖功能及數據的導入導出等。第二部分為線性代數實驗,介紹用MATLAB軟件求解線性方程組、計算矩陣特征值和特征向量以及進行矩陣相似對角化和矩陣分解的方法。第三部分為微積分實驗,介紹用MATLAB軟件進行符號微積分運算、數值微分、函數插值和數值積分計算的方法。第四部分為常微分方程實驗,介紹用MATLAB軟件求解線性(非線性)微分方程(組)的解析解和數值解、進行向量場繪制和動態(tài)仿真的方法。第五部分為概率論與數理統(tǒng)計實驗,介紹用MATLAB軟件進行隨機變量相關計算、隨機數的產生,及進行樣本數據的統(tǒng)計描述與可視化的方法。另外,針對具體方法介紹了相應的應用實例,所以更有利于培養(yǎng)學生“用數學”的意識和能力。本書的主要閱讀對象是理工科院校本專科學生。數學實驗課對學生后繼課程的學習,特別是學生在課程設計和畢業(yè)設計等環(huán)節(jié)中的學習和研究具有重要幫助,提供思想和方法的指導。本課程也將為學生進一步學習數學建模、參加數學建模競賽、利用數學方法解決各個領域中的實際問題打下良好的基礎。本書由陳東彥老師組織編寫,主要由劉鳳秋、李善強、曹作寶編寫,牛犇、宋顯華、孫偉參與了部分內容的編寫,田廣悅老師對書中各部分內容的選編給與了很多具體的指導。由于缺乏經驗、水平有限,書中難免有不妥之處,希望同行專家及廣大讀者批評指正!編者目錄內容簡介 1前言 2第1章MATLAB軟件使用簡介 81.1MATLAB軟件使用入門 81.1.1MATLAB啟動/退出 81.1.2MATLAB操作的注意事項及常用技巧 111.1.3MATLAB幫助 111.2MATLAB的變量和表達式 131.3MATLAB矩陣創(chuàng)建及其運算 161.3.1MATLAB矩陣的創(chuàng)建 161.3.2MATLAB矩陣的運算 181.4M文件的編寫與調用 211.4.1文件的操作 221.4.2命令文件 231.4.3函數文件 241.5MATLAB編程 251.5.1MATLAB常用的程序控制語句 251.5.2MATLAB編程應用 301.6MATLAB基本繪圖 321.6.1二維圖形的繪制 321.6.2三維圖形的繪制 381.7MATLAB數據的導入與導出 411.7.1導入數據 411.7.2導出文本文件 441.7.3對MS-Excel電子表格文件的操作 46實驗1 48第2章線性代數實驗 502.1線性方程組的求解 502.1.1MATLAB中矩陣的相關運算 502.1.2線性方程組的求解 522.1.3應用實例 562.2矩陣的特征值與特征向量及其相似對角化 592.2.1矩陣的特征值與特征向量 592.2.2矩陣的相似對角化 612.2.3應用實例 642.3矩陣的分解 682.3.1矩陣的LU分解 682.3.2矩陣的QR分解 692.3.3矩陣的Cholesky分解 702.3.4矩陣的奇異值分解 712.3.5*矩陣的Hessenberg分解 742.3.6*矩陣的Schur分解 75實驗2 77第3章微積分實驗 803.1微積分符號運算 803.1.1符號變量與符號表達式 803.1.2符號函數的極限 813.1.3符號函數的微分 833.1.4符號函數的積分 883.1.5符號函數的求和與泰勒多項式 913.1.6應用實例 933.2數值微分 953.2.1數值微分計算方法 953.2.2數值微分的MATLAB實現 973.2.3應用實例 973.3函數插值 983.3.1拉格朗日插值 993.3.2函數插值的MATLAB實現 1003.3.3應用實例 1033.4數值積分 1063.4.1數值積分計算方法 1063.4.2誤差估計和收斂性 1133.4.3數值積分的MATLAB實現 1143.4.5應用實例 1203.5*二次曲面與曲面交線的繪制 1223.5.1二次曲面 1223.5.2空間兩曲面的交線 124實驗3 127第4章常微分方程實驗 1294.1常微分方程及其模型 1294.1.1常微分方程的基本概念 1294.1.2常微分方程模型 1314.2常微分方程解析解的MATLAB實現 1334.3常微分方程數值解及其MATLAB實現 1364.3.1數值解的Euler法 1374.3.2數值解的Runge-Kutta法 1404.3.3常微分方程數值解的MATLAB實現 1424.4*向量場繪圖及Simulink在求解微分方程上的應用 1474.4.1向量場繪圖 1474.4.2.Simulink應用 148實驗4 158第5章概率論與數理統(tǒng)計實驗 1605.1隨機變量及概率分布 1605.1.1概率密度函數值的計算 1615.1.2概率密度函數的可視化 1645.1.3分布函數的計算 1685.1.4逆累積分布函數的計算 1705.1.5隨機變量數字特征的計算 1735.2隨機數的產生及應用 1755.2.1隨機數的產生 1755.2.2應用實例 1785.3樣本的統(tǒng)計描述 1815.3.1樣本的統(tǒng)計量及其計算 1815.3.2樣本的分布及其可視化 1885.3.3應用實例 1945.4參數估計與假設檢驗 1985.4.1參數估計及其MATLAB實現 1985.4.2假設檢驗及其MATLAB實現 2015.4.3應用實例 204實驗5 207附錄 209附表1-1常用三角函數表 209附表1-2常用計算函數 209附表1-3文件操作函數表 210附表5-1常見分布概率密度函數表 210附表5-2常見分布函數表 212附表5-3專用函數計算概率密度函數表 213附表5-4專用函數計算累積概率值函數表 214附表5-5常用臨界值函數表 215附表5-6常見分布的均值和方差 215附表5-7隨機數產生函數表 216附表5-8參數估計函數表 217參考文獻 219

第1章MATLAB軟件使用簡介MATLAB是矩陣實驗室(MatrixLaboratory)的簡稱,由美國MathWorks公司出品,與Mathematica、Maple并稱為三大數學軟件。MATLAB是一個功能強大的常用數學軟件,它不但可以解決數學中的數值計算問題,而且可以解決符號演算、矩陣運算、繪制圖形、實現算法、創(chuàng)建用戶界面和連接其它編程語言的程序等問題,并且能夠方便地繪出各種函數圖形。MATLAB主要應用于工程計算、控制設計、信號與圖像處理、信號檢測、金融建模設計與分析等領域。它使用方便,輸入簡潔,并且很容易由用戶自行擴展,因此已成為國內外許多大學教學和科學研究中最常用且必不可少的工具。不同的操作系統(tǒng)有相應的MATLAB版本,本書介紹Windows操作系統(tǒng)下的MATLAB7.1版本的基本使用。1.1MATLAB軟件使用入門1.1.1MATLAB啟動/退出1.啟動MATLABWindows版本的MATLAB按照安裝光盤中的安裝說明成功安裝后,系統(tǒng)會在Windows【開始】菜單的【程序】子菜單中加入啟動MATLAB命令的圖標,用鼠標單擊此圖標就可啟動MATLAB系統(tǒng),如圖1.1。圖1.1啟動MATLAB啟動MATLAB后,就可以進入MATLAB的工作環(huán)境。首先出現MATLAB的圖標,接著就進入了其默認的桌面系統(tǒng)如圖1.2。圖1.2是MATLAB桌面系統(tǒng)的默認界面(通過更改Desktop菜單里的選項可以組合不同的窗口模式)。左上視窗為當前目錄(CurrentDirectory),可切換為工作空間(Workspace);其左下視窗為歷史命令(CommandHistory),可切換為當前目錄(CurrentDirectory);右半個視窗為命令窗口(CommandWindow),命令窗口是用戶與MATLAB進行人機交互的主要環(huán)境,在此可輸入命令或執(zhí)行M文件,>>是命令窗口的提示符,可以在它后面輸入命令或輸入語句。圖1.2MATLAB界面2.MATLAB基本演示下面通過三個實例來初步了解MATLAB的操作和功能。例1.1計算,并輸出的值。>>x1=sqrt(2),x2=pi↙x1=1.4142x2=3.1416思考題1:例1.1中的變量x1和x2中間“,”能否去掉,請驗證你的結果?注:MATLAB在提示符>>后的每一行輸入后需要輸入↙,即Enter鍵(回車)。例1.2繪制在區(qū)間,上的圖形。>>[X,Y]=meshgrid(-8:0.5:8);↙>>R=sqrt(X.^2+Y.^2)+eps;↙>>Z=sin(R)./R;↙>>surf(X,Y,Z)↙%surf函數繪制由矩陣X,Y,Z所確定的曲面輸出圖像如圖1.3所示:圖1.3直角坐標的圖形例1.3極坐標繪圖演示。>>t=0:0.01:2*pi;↙>>polar(t,sin(6*t))↙%圖1.4圖1.4極坐標繪圖3.退出MATLAB若要退出MATLAB,只需用鼠標點擊其系統(tǒng)集成界面右上角的關閉按鈕,或者在命令窗口輸入exit或quit命令即可。1.1.2MATLAB操作的注意事項及常用技巧1.注意事項(1)在命令窗口工作區(qū)中輸入MATLAB命令后,須按下Enter鍵,MATLAB才能執(zhí)行所輸入的命令,否則不執(zhí)行該命令。(2)MATLAB區(qū)分字母大小寫。(3)一般情況下,在命令窗口中輸入一個命令并按下Enter鍵,計算機會顯示此次輸入的執(zhí)行結果。為了簡便,在后續(xù)的章節(jié)中我們將不再顯示↙符號。(4)如果用戶不想顯示輸入的結果,只要在所輸命令的后面加上一個分號“;”即可。如:>>x=2+3↙x=5>>x=2+3;↙(5)可以在某一行結尾處鍵入3個英文句號“…”實現續(xù)行的目的。如:>>q=5^6+sin(pi)+exp(3)+(1+2+3+4+5)/sin(x)...-5*x+1/2-567/(x+y)(6)MATLAB中的變量必須為字母、數字及某些符號組合,某些情況也允許輸入漢字,但標點符號必須是英文狀態(tài)下的標點符號。(7)MATLAB中不需要專門定義變量類型,系統(tǒng)會自動根據表達式的值或輸入的值來確定變量的數據類型。(8)命令行與M文件中的注釋語句都以百分號“%”開始;語句行中百分號后面的該行內容將被忽略而不被執(zhí)行,在M文件中%后面的語句可以用help命令顯示出來。2.常用技巧特殊的功能鍵如下:(1)ESC恢復當前命令輸入前的空白狀態(tài)。(2)↑調出上一行命令。(3)↓調出下一行命令。其中,↑為鍵盤中的向上鍵,↓為鍵盤中的向下鍵。后兩個功能鍵在程序調試時很有用。在MATLAB實際使用中,往往需要對剛執(zhí)行過的命令進行修改后重新執(zhí)行,為了避免重復輸入,可用↑調出原命令后再做修改。1.1.3MATLAB幫助MATLAB的離線幫助文件內容豐富,是學習MATLAB的最佳資料,學習MATLAB首先要學會MATLAB幫助的使用。在命令窗口中輸入help命令或直接用鼠標左鍵單擊菜單中的Help按鈕(快捷鍵F1),可以打開如圖1.5所示的幫助窗口。圖1.5MATLAB幫助窗口圖1.5中左上角有四個可以切換的選項頁,分別為Contents,Index,Search和Demos,可以根據需要打開相應的選項頁查找所需的信息。當遇見一個新的函數時,可通過Search來進行查找其功能及詳細用法。Demos提供了大量的演示文件,也為初學者提供幫助。MATLAB還提供了在線幫助功能,但用戶需要連接網絡。下面介紹一下通過Search來查找sin函數。進入幫助界面后選中Search選項頁進入下一界面并在后面空白處輸入sin,點擊Go按鈕就會看到如圖1.6的結果。圖1.6MATLAB中的Seacrchfor搜索功能還可以在命令窗口直接輸入查找命令,例如>>helpsin↙SINSine.SIN(X)isthesineoftheelementsofX.Seealsoasin,sind.Overloadedfunctionsormethods(oneswiththesamenameinotherdirectories)helpsym/sin.mReferencepageinHelpbrowserdocsin借助于MATLAB提供的幫助系統(tǒng),可以解決在使用MATLAB過程中遇到的許多問題。1.2MATLAB的變量和表達式1.MATLAB變量命名規(guī)則(1)MATLAB中變量名可以包含字母、數字及下劃線,但必須以字母開頭,后面最多跟63個字母或數字,如x,y,asd_f,d3er45等都是合法的變量名。(2)變量名區(qū)分大小寫,如ab與Ab表示兩個不同的變量。(3)注意不要用MATLAB中的內部函數或命令名作為變量名。如果內部函數用作變量名,內部函數將失效。2.與工作空間中的變量有關的函數1)列出變量函數:who功能:列出當前工作空間中的變量,且內存中的當前變量以簡單形式列出函數:whos功能:列出當前內存變量的名稱、大小、類型等信息2)清除變量函數:clear功能:清除工作空間中的所有變量,用于釋放系統(tǒng)內存函數:clearall功能:清除函數工作空間和基本工作空間的所有函數變量,全局變量和類函數:clc功能:清除命令窗口3.MATLAB的運算符1)數學運算符+(加號),-(減號),*(乘號),\(左除),/(右除),^(乘冪)2)關系運算符<(小于),>(大于),<=(小于等于),>=(大于等于),==(等于),~=(不等于)3)邏輯運算符&(邏輯與運算),|(邏輯或運算),~(邏輯非運算)例1.4已知矩陣,,對其做簡單的關系與邏輯運算。>>A=[1,2;1,2];>>B=[1,1;1,2];>>C=(A<B)&(A==B)C=00004.MATLAB的表達式MATLAB的表達式是由常量、變量、函數和運算符組成的有意義的式子。MATLAB語句由變量、表達式及MATLAB命令組成,用戶輸入的語句由MATLAB系統(tǒng)解釋后運行。常見的MATLAB語句有兩種格式:格式1:表達式格式2:變量=表達式其中,系統(tǒng)自動將格式1中的表達式的運行結果賦值給內部變量ans,并在屏幕上輸出;在格式2中,系統(tǒng)將表達式的運行結果賦給了變量。例1.5用兩種形式計算算術運算結果。>>5^6+sin(pi)+exp(3)%計算結果賦給默認變量ansans=1.5645e+004%即為1.5645×104>>a=5^6+sin(pi)+exp(3)%計算結果賦給變量aa=1.5645e+004>>a=5^6+sin(pi)+exp(3);即如果在表達式后面加“;”,則執(zhí)行后不顯示運算結果。例1.5中的正弦、指數函數是MATLAB自帶的函數。MATLAB中還有很多類似的函數,常用的函數詳見附錄中的附表1-1和1-2。5.MATLAB的數據顯示MATLAB系統(tǒng)中數值數據的存儲和計算默認都是雙精度,如果需要可以利用format命令來調整數據的顯示格式。MATLAB默認顯示格式為formatloose(松散格式),屏幕的顯示會有一些空行,占用更大的篇幅,因此可以在命令語句輸入前,輸入顯示格式命令formatcompact(緊湊格式)。此外,format命令還可以用于控制數字顯示的方式,例如formatrat表示此后的數據顯示為近似的有理數。下面是format用于控制浮點變量的輸出精度的八種格式,如表1.1所示。表1.1format用于浮點數的八個格式類型結果例子formatshort固定5個小數的輸出3.1416formatlong固定15個小數的輸出3.14159265358979formatshorte帶有5位精度的浮點格式3.1416e+000formatlongte帶有15位精度的浮點格式3.141592653589793e+002formatshortg帶有5位數的最佳的定點數或浮點數3.1416formatlongg帶有15位數用于顯示double、7位用于顯示single的最佳的定點數或浮點數3.14159265358979formatshorteng工程格式,至少5個有效小數和冪為3的數3.1416e+007formatlongeng工程格式,正好有16位有效數字和冪為3的倍數3.14159265358979e+081例1.6分別用五位定點、十五位定點及有理數形式將表示出來。>>a=5+sin(7);>>formatshort,aa=5.6570>>formatlong,aa=5.65698659871879>>formatrat,aa=3117/5516.MATLAB中的常量在MATLAB中有些變量是固有的,在使用時注意輕易不要對這些變量重新賦值以免出現錯誤。一些常見變量及具體意義見表1.2。表1.2MATLAB中常量常量符號常量含義i或j虛數單位,定義為i2=j2=-1Inf或inf正無窮大,由零做除數引入此常量NaN不定式,表示非數值量,產生于0/0,∞/∞,0*∞等運算pi圓周率π的雙精度表示eps容差變量,PC上此值為2^-52realmin最小浮點數,2^-1022realmax最大浮點數,2^10231.3MATLAB矩陣創(chuàng)建及其運算MATLAB的基本運算單位是矩陣,能否熟練掌握矩陣的輸入、各種數值運算以及矩陣函數的使用是能否學好MATLAB的關鍵。1.3.1MATLAB矩陣的創(chuàng)建1.通過輸入直接創(chuàng)建矩陣輸入方法是先鍵入左方括號“[”,然后按行直接鍵入矩陣的所有元素,最后鍵入右方括號“]”。注意:整個矩陣以“[”和“]”作為首尾,同行的元素用“,”或空格隔開,不同行的元素用“;”或按Enter鍵來分隔;矩陣的元素可以是數字或表達式。例1.7直接輸入創(chuàng)建矩陣。>>A=[1,2,3;4,15,60;7,8,9]A=12341560789>>A=[1,2,34,15,607,8,9]A=123415607892.相關函數創(chuàng)建矩陣MATLAB提供了若干函數來創(chuàng)建一些特殊矩陣,見表1.3。表1.3生成特殊矩陣的相關函數函數名稱函數功能函數名稱函數功能zeros(m,n)m行n列零矩陣randn(m,n)m行n列正態(tài)分布隨機矩陣eye(n)n階單位矩陣magic(n)n階魔方矩陣ones(m,n)m行n列元素為1的矩陣rand(m,n)m行n列均勻分布隨機矩陣例1.8創(chuàng)建矩陣。>>ones(3)%生成元素都為1的3階方陣ans=111111111例1.9創(chuàng)建矩陣。>>zeros(2,5)%生成元素都為0的2行5列零矩陣ans=0000000000例1.10生成3階魔方矩陣。>>magic(3)ans=8163574923.冒號操作符“:”j:k表示生成步長為1的等差數列構成的數組:[j,j+1,j+2,…,k];j:i:k表示生成步長為i的等差數列構成的數組:[j,j+i,j+2*i,…,k];例1.11等差數列的生成。>>1:5%步長為1的等差數列ans=12345>>linspace(1,5,5)%給出區(qū)間[1,5]的5個等分點數據ans=12345>>1:2:7 %步長為2的等差數列ans=1357>>8:-2:0 %步長為-2的等差、遞減數列ans=864201.3.2MATLAB矩陣的運算1.MATLAB矩陣元素操作下面介紹矩陣元素的抽取與賦值、矩陣擴充、矩陣元素的刪除等操作。詳細用法見表1.4。1)矩陣元素的抽取與賦值例1.12已知矩陣,抽取與修改的一些元素。>>A=[12356;sin(3)79;log(2)61]%輸入矩陣AA=1.000023.000056.00000.14117.00009.00000.69316.00001.0000>>A(2,3) %抽取矩陣A的第二行第三列元素ans=9>>A(4) %抽取矩陣A(:)的第四個元素ans=23>>A(2:4) %抽取矩陣A(:)的第二、三、四個元素ans=0.14110.693123.0000>>A(1,:)%抽取矩陣A的第一行ans=12356>>A(:,3)%抽取矩陣A的第三列ans=5691>>a=A(1,3) %把矩陣A的第一行第三列元素賦值給變量aa=56>>A(2,1)=100 %把矩陣A的第二行第一列元素修改為100A=1.000023.000056.0000100.00007.00009.00000.69316.00001.0000>>B=A([3,1],[2,3])B= 61 23562)矩陣的擴充例1.13已知矩陣,,利用與生成矩陣,和。>>A=[1,3;6,9];%輸入矩陣A>>C=A;>>C(1,3)=100; %把矩陣A擴充為2行3列矩陣>>CC=13100690>>B=[1,5;0,8]; %輸入矩陣B>>D=[A,B] %由矩陣A與B合成矩陣D>>D=13156908>>F=[A,zeros(2);zeros(2),B] %矩陣A與B合成分塊矩陣FF=13006900001500083)矩陣部分元素的刪除例1.14已知矩陣,刪除的第一行。>>A=[12356;sin(3)79;log(2)61];>>A(1,:)=[]%刪出A的第一行A=0.14117.00009.00000.69316.00001.0000表1.4矩陣元素的操作用法功能A(i,j)矩陣A的第i行第j列元素A(:,j)矩陣A的第j列A(i,:)矩陣A的第i行A(:,:)矩陣A的所有元素構造一個2維矩陣A(:)矩陣A的所有元素按列構造一個列矩陣A(i)矩陣A(:)的第i個元素A(i:j)矩陣A(:)的第i個到j個元素構成的向量[]空矩陣A([i,j],[k,l])取出矩陣A的第i,j行及第k,l列交點上的元素2.矩陣的基本運算A+B:矩陣加法A-B:矩陣減法A*B:矩陣乘法A\B:矩陣的左除A/B:矩陣的右除transpose(A)或A':A的轉置k*A:數k乘以A矩陣A的n次冪:A^n矩陣的點冪:.^其中,矩陣的左除“\”和右除“/”。如果矩陣A是非奇異方陣,則A\B等于A的逆矩陣乘B,即inv(A)*B;同理B/A等于B乘A的逆矩陣,即B*inv(A)。具體計算時可不用逆矩陣而直接計算。右除B/A也可由(A'\B')'來實現。例1.15已知矩陣,,求和。>>A=[123;456];B=[321;654];>>C=A+BC=444101010>>C=A.^BC=143409631251296注:點和算術運算符之間不能有空格。例1.16已知,,求,和。>>X=[123];Y=[456];>>X.^2ans=149>>2.^Xans=248>>2.^[X;Y]ans=248163264例1.17矩陣,求的3次冪。>>symsa;>>A=[a01;0a3;0a2];>>A^3ans=[a^3,2*a^2+2*a,a*(a+2)+4+3*a][0,a*(a^2+3*a)+3*a^2+6*a,12+a*(6+3*a)+9*a][0,a*(a^2+3*a)+2*a^2+4*a,8+a*(6+3*a)+6*a]注:當矩陣中含有未知變量時,需要用syms聲明未知變量,否則會出現“???Undefinedfunctionorvariable'a'”的錯誤提示。列于表1.5中的其它的矩陣相關運算函數將在第二章中做詳細介紹。表1.5矩陣的其它相關運算函數名稱函數功能函數名稱函數功能rank(A)求A的秩rref(A)求A的行最簡形eig(A)求A的特征值及特征向量inv(A)求A的逆矩陣poly(A)求A的特征多項式det(A)求A的行列式trace(A)求A的跡norm(A,1)求A的1范數cond(A)求A的條件數1.4M文件的編寫與調用在初學階段,通常在命令窗口中輸入MATLAB語句。輸入一行命令后系統(tǒng)立即執(zhí)行該命令,這種方式稱為命令窗口下的命令行方式。用命令行方式編寫的程序可讀性差且不易存儲。因而,對于相對復雜問題的求解,一般先編寫成可存儲的程序文件,然后在MATLAB中執(zhí)行該程序文件,這種方式稱為程序文件方式。由MATLAB語句組成的程序文件類型是M文件,M文件的擴展名為m。M文件可分為兩種形式:一種是命令文件或腳本文件(scriptfile),是用戶為解決特定的問題而編制的。另一種是函數文件(functionfile),通常被其它M文件調用。它們都是由若干MATLAB語句或命令組成的文件。要注意在編寫M文件時,M文件名一定以字母開頭,且不要與內置函數重名。1.4.1文件的操作MATLAB類型文件的打開、關閉和保存等操作與Word非常相似。新建M文件的操作是在命令窗口中選擇FileNewM-File(見圖1.7),然后用鼠標單擊M-File,打開了MATLAB中的“M函數與M文件編輯器”(見圖1.8),用戶可以在該編輯窗口中編輯一個新的M文件。此編輯器還可以用來對已存在的M文件進行編輯、調試和運行。實際上,M文件也可用其它文本編輯器來建立、編輯。圖1.7新建M文件圖1.8M函數與M文件編輯器(編輯窗口)M文件有三種運行方式:一是在命令窗口中直接鍵入文件名,按Enter鍵;二是在編輯窗口中打開菜Tools,再單Run(快捷鍵F5);三是直接單擊工具欄中的Run圖標。M文件保存的路徑一定要在其設置的搜索路徑上,否則MATLAB找不到此文件,導致無法運行。后面的例題如果不特別說明,都是以第一種方式運行的。在M文件中,當表達式后面接分號時,與命令行方式的語句一樣,表達式的計算結果不顯示,但中間結果仍保存在內存中。1.4.2命令文件命令文件(也稱腳本文件)的一般形式為:<文件名>.m,如a1.m,pp.m等都是合法的M文件名。命令文件的格式特征如下:(1)用clear,closeall等語句開始,清除工作空間中原有的變量和圖形,以避免其它已執(zhí)行程序所殘留數據對當前程序的影響。(2)前幾行通常是注釋行,用于對此程序用途的說明,特別是在運行時對用戶輸入數據的要求,更要敘述清楚,否則程序的可讀性將很差。這些注釋行必須以%開始(這與C語言中的/**/類似),此后程序運行時將忽略%后的該行內容。MATLAB規(guī)定可以通過輸入“help文件名”來輸出該文件中的所有注釋。(3)程序的主體。如果文件中有全局變量,即可以在子程序即函數文件和主程序命令文件中共用的變量,應在程序的起始部分注明。其語句是global變量名1變量名2……為了改善程序的可讀性,應注重語句的縮進及與end的對應關系。在程序中有時誤操作輸入中文符號,可能導致程序無法運行,MATLAB用紅色標注有問題的語句。因而在輸入程序中,要注意中英文的切換。(4)命令文件常會調用用戶編寫的函數或者系統(tǒng)自帶的函數。例1.18編寫列出區(qū)間上的素數的程序。%列出素數的程序exam01_18.mclear,closeallM=input('輸入M的值M='),N=input('輸入N的值N=')x=M:N;%列出從M到N的全部自然數foru=2:sqrt(N)%列出除數(最大到N的平方根)n=find(rem(x,u)==0&x~=u);%找到不是素數的序號x(n)=[];%將其刪除掉end,x%循環(huán)結束,顯示結果>>exam01_18%執(zhí)行exam01_18.m,輸入5和20x=57111317191.4.3函數文件MATLAB提供了許多函數文件,且隨著版本的更新不斷擴充。MATLAB軟件的大部分功能都是來自其建立的函數集,利用這些函數可以使用戶方便地解決各種問題。函數文件的一般形式為:function<因變量>=<函數名>(<自變量>)M函數文件可以有多個自變量和多個因變量,當有多個因變量時用[]括起來。函數文件中的變量除非用global聲明,否則均為局部變量,不保存在工作空間中。下面看MATLAB自帶的求素數的M文件,通過其幫助很容易找到該函數為primes.m。>>typeprimes輸出:functionp=primes(n)%PRIMESGeneratelistofprimenumbers.%PRIMES(N)isarowvectoroftheprimenumberslessthanor%equaltoN.Aprimenumberisonethathasnofactorsother%than1anditself.%%ClasssupportforinputN:%float:double,single%%SeealsoFACTOR,ISPRIME.%Copyright1984-2004TheMathWorks,Inc.%$Revision:$$Date:2004/07/0517:02:09$iflength(n)~=1error('MATLAB:primes:InputNotScalar','Nmustbeascalar');endifn<2,p=zeros(1,0,class(n));return,endp=1:2:n;q=length(p);p(1)=2;fork=3:2:sqrt(n)ifp((k+1)/2)p(((k*k+1)/2):k:q)=0;endendp=p(p>0);注:函數文件是以function開始,后跟函數名(在保存時,會默認為M文件的文件名,不要修改為其它名稱,當M文件名與function后的函數名不一致時,調用函數文件時常會發(fā)生錯誤)。另外,函數文件通常都有變量的輸入輸出。下面來編寫函數文件。例1.19設方陣可逆,編寫求的M函數文件。%編寫exam01_19.m用于求矩陣A的四個值function[da,a2,inva,traa]=comp4(A)da=det(A) %da為矩陣A的行列式a2=A^2 %a2為矩陣A的平方inva=inv(A) %inva為矩陣A的逆矩陣traa=A' %traa為矩陣A的轉置因為函數的輸入變量為A,所以在調用前先給A賦值,然后才能對編寫的M文件進行調用。>>A=[1,2;5,8];%輸入矩陣A>>exam01_19%調用exam01_19.m函數計算矩陣的da=-2a2=11184574inva=-4.00001.00002.5000-0.5000traa=15281.5MATLAB編程在解決實際問題時,往往需要編寫較復雜的程序,下面將介紹MATLAB編程涉及到的內容。1.5.1MATLAB常用的程序控制語句程序控制結構有三種:順序結構、選擇結構和循環(huán)結構。任何復雜的程序都由這三種基本結構組成。1.順序結構按排列順序依次執(zhí)行各條語句,直到程序的最后,這是一種最簡單的程序結構,一般涉及數據的輸入、輸出和計算等。1)數據的輸入函數:input格式:A=input(‘提示信息’)其中,提示信息為字符串,此格式通過提示信息輸入A的值,輸入的A可以是數或者字符串,輸入字符串時必須帶單引號。例1.20輸入A的值和name的值。>>A=input('PleaseinputA:')%要求用戶輸入A的值(可以是數或字符串)PleaseinputA:1000%輸入1000A=1000>>name=input('What''syourname?')What'syourname?'MichaelJordan'%輸入'MichaelJordan'name=MichaelJordan2)數據的顯示函數:disp格式:disp(X)其中,X是數值矩陣或字符串,該格式用于顯示變量X的值,且一次只能顯示一個變量。例1.21顯示A的值。>>A='Hello,Tom!';>>disp(A)Hello,Tom!3)數據的格式化輸出若要求數字以某種形式輸出,則需要對數據的輸出進行格式化。除了用前面介紹的format進行控制外,還可以用fprintf來控制輸出。函數:fprintf格式:fprintf(fid,format,variables)其中,fid為文件句柄,若缺省,則輸出到屏幕上;format用來指定變量variables輸出時采用的格式,包含普通字符串、格式字符串(見表1.6)、轉義字符(見表1.7)。表1.6格式字符串%d整數%f實數:小數形式%e實數:科學計數法形式%s輸出字符串表1.7轉義字符\n換行\(zhòng)t制表符\b退格\\反斜杠%%百分號例1.22格式化輸出變量。>>a='Hello';>>b=2.4;>>c=100*pi;>>fprintf('a=%s,b=%f,c=%e\n',a,b,c)a=Hello,b=2.400000,c=3.141593e+0022.選擇結構1)條件語句if條件語句有3種形式:形式1:if表達式語句序列end說明:如果表達式的值為真,就執(zhí)行語句序列,否則執(zhí)行end后面的語句。形式2:if表達式 語句序列1else語句序列2end說明:如果表達式的值為真,就執(zhí)行語句序列1,否則執(zhí)行語句序列2。形式3:if表達式1 語句序列1elseif表達式2 語句序列2else 語句序列nend說明:如果表達式1的值為真,就執(zhí)行語句序列1,然后跳出if語句;否則判斷表達式2,如果表達式2的值為真,就執(zhí)行語句序列2,然后跳出if語句;否則依此類推,一直進行下去;如果所有的表達式的值都為假,就執(zhí)行else后面的語句序列n,然后跳出if語句。例1.23編寫分段函數的M函數文件,并計算函數值和。解:%exam01_23.mfunctiony=exam01_23(x)ifx<1y=xelseifx<=10 y=2*x-1elseifx<=30 y=3*x-11elsey=sin(x)+log(x)end%調用exam01_23.m函數文件計算函數值>>result=[exam01_23(0.2),exam01_23(2),exam01_23(30),exam01_23(10*pi)]result=0.20003.000079.00003.4473所以和。2)多向條件語句switch-case-end分支switch表達式case常量表達式1語句塊1case常量表達式2語句塊2case{常量表達式n,常量表達式n+1,…}語句塊notherwise語句塊n+1end說明:switch語句后面的表達式可以為任何類型;每個case后面可以是多個不同類型的常量表達式;與if語句不同,各個case和otherwise語句出現的先后順序不會影響程序運行的結果。例1.24根據輸入月份來判斷季節(jié)。%編寫exam01_24.mformonth=1:12 switchmonth case{3,4,5} season='Spring'; case{6,7,8} season='Summer'; case{9,10,11} season='Autumn'; case{12,1,2} season='Winter'; end fprintf('Month%d===>%s.\n',month,season); end%執(zhí)行exam01_24.m>>exam01_24Month1===>Winter.Month2===>Winter.Month3===>Spring.Month4===>Spring.Month5===>Spring.Month6===>Summer.Month7===>Summer.Month8===>Summer.Month9===>Autumn.Month10===>Autumn.Month11===>Autumn.Month12===>Winter.注:MATLAB的switch指令和C語言的switch指令略有差別:在C語言的switch中,每個case后需加上break以跳出該switch,而在MATLAB中則不需要。3.循環(huán)結構1)for循環(huán)fori=表達式語句1……….語句nend說明:表達式是一個向量,可以是m:n,m:s:n,也可以是字符串、字符串矩陣等;for循環(huán)的循環(huán)體中,可以多次嵌套for循環(huán)和其它的結構體。例1.25寫出Hilbert矩陣。%exam01_25.mn=input('n='),formatratfori=1:n,forj=1:n,h(i,j)=1/(i+j-1);end,end,h運行后,會提示輸入n,輸入5,得到如下的運行結果:h=11/21/31/41/51/21/31/41/51/61/31/41/51/61/71/41/51/61/71/81/51/61/71/81/9上面的代碼顯然可讀性很差,注意縮進對齊后為:n=input('n='),formatratfori=1:nforj=1:nh(i,j)=1/(i+j-1);endendh此時代碼的邏輯結構就清晰了。例1.26利用for循環(huán)求1~100的整數之和。%建立M文件exam01_26.msum=0;fori=1:100sum=sum+i;endsum%執(zhí)行M文件exam01_26.m。>>exam01_26sum=50502)while循環(huán)while表達式循環(huán)體語句end說明:表達式一般是由關系運算符、邏輯運算符及其它運算符組成,用來判斷循環(huán)要繼續(xù)進行還是要停止。若表達式的值非零,即邏輯為“真”,程序就繼續(xù)循環(huán);若表達式的值為零,就停止循環(huán)。例1.27利用while循環(huán)來計算1!+2!+?+50!的值。%建立M文件exam01_27.msum=0;i=1;whilei<51prd=1;j=1;whilej<=iprd=prd*j;j=j+1;endsum=sum+prd;i=i+1;enddisp(‘1!+2!+...+50!的和為:’)sum%執(zhí)行命令文件exam01_27.m>>exam01_271!+2!+...+50!的和為:sum=2.5613e+018即得到1!+2!+?+50!的值為。4.其它控制語句(1)函數break用于終止循環(huán)的執(zhí)行,即跳出最內層循環(huán)(2)函數continue用于結束本次循環(huán),進行下一次循環(huán),break和continue一般與if語句配合使用。(3)函數return用于退出正在運行的腳本或函數,通常用在函數文件中。MATLAB編程的內容涉及很廣,MATLAB也提供了一些現成函數供用戶直接調用,詳細請參閱幫助系統(tǒng)。1.5.2MATLAB編程應用前面介紹了MATLAB的基本控制流程語句,下面將介紹MATLAB的編程應用。例1.28(猜數游戲)請利用計算機隨機產生區(qū)間[0,100]上的一個整數,然后猜測所產生的這個數,根據猜測的情況給出不同的提示。如果猜測的數大于產生的數,則顯示Higher,小于則顯示Lower,等于則顯示Youwon!,同時退出游戲,用戶最多有7次機會。編寫猜數游戲的程序。%猜數游戲exam01_28.mclear;x=round(100*rand);%隨機產生區(qū)間[0,100]上的一個整數n=7;%7次機會test=1;disp(['歡迎參加猜數游戲!你共有',num2str(n),'次機會']);disp('請輸入一個0到100之間的整數');fork=1:nguess=input('Enteryourguess:');ifguess<xdisp('Lower');elseifguess>xdisp('Higher');elsedisp('Youwon!');test=0;break;endn=n-1;disp(['你還有',num2str(n),'次機會!']);endiftest==1disp('Youlost!')end%執(zhí)行exam01_28.m>>exam01_28歡迎參加猜數游戲!你共有7次機會請輸入一個0到100之間的整數Enteryourguess:50Higher你還有6次機會!Enteryourguess:25Higher你還有5次機會!Enteryourguess:12Lower你還有4次機會!Enteryourguess:19Lower你還有3次機會!Enteryourguess:22Lower你還有2次機會!Enteryourguess:24Lower你還有1次機會!Enteryourguess:23Youwon!從上面的猜數過程可見,是否能猜對似乎需要碰運氣。但實際還是有章可循的。上面的猜數過程利用的是數據結構里的折半查找算法。即由于該數介于0和100之間,因此第一次折半為(0+100)/2=50。輸入50,如果提示high,意味著數在51-100之間,繼續(xù)折半,就可以找到這個數。如果提示low,意味著要猜的數在1-49之間,繼續(xù)折半,就可以找到這個數。如果不是7次,而是6次,

溫馨提示

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

評論

0/150

提交評論