




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)學(xué)建模講義數(shù)學(xué)軟件簡(jiǎn)介1數(shù)學(xué)建模講義數(shù)學(xué)軟件簡(jiǎn)介1MATLAB簡(jiǎn)介MathematicalModelZ?'Mathematica——側(cè)重于數(shù)學(xué)方面,其它方面應(yīng)用不是很廣泛Lindo,Lingo——主要求解優(yōu)化問(wèn)題(建議與Matlab結(jié)合使用)2MATLAB簡(jiǎn)介MathematicalModelZ?'MATLAB的發(fā)展史
MATLAB名字由MATrix和LABoratory兩詞的前三個(gè)字母組合而成。那是20世紀(jì)七十年代,時(shí)任美國(guó)新墨西哥大學(xué)計(jì)算機(jī)科學(xué)系主任的CleveMoler出于減輕學(xué)生編程負(fù)擔(dān)的動(dòng)機(jī),為學(xué)生設(shè)計(jì)了一組調(diào)用LINPACK和EISPACK矩陣軟件工具包庫(kù)程序的的“通俗易用”的接口,此即用FORTRAN編寫(xiě)的萌芽狀態(tài)的MATLAB。
1984年由Little、Moler、SteveBangert合作成立MathWorks公司,并把MATLAB正式推向市場(chǎng)。從這時(shí)起,MATLAB的內(nèi)核采用C語(yǔ)言編寫(xiě),而且除原有的數(shù)值計(jì)算能力外,還新增了數(shù)據(jù)圖視功能。
1997年仲春,MATLAB5.0版問(wèn)世,緊接著是5.1、5.2,以及和1999年春的5.3版,現(xiàn)在最高版本有7.1?,F(xiàn)今的MATLAB擁有更豐富的數(shù)據(jù)類(lèi)型和結(jié)構(gòu)、更友善的面向?qū)ο?、更加快速精良的圖形可視、更廣博的數(shù)學(xué)和數(shù)據(jù)分析資源、更多的應(yīng)用開(kāi)發(fā)工具。3MATLAB的發(fā)展史MATLAB名字由MATrix和LAMATLAB語(yǔ)言的主要特點(diǎn)(1)具有豐富的數(shù)學(xué)功能
包括矩陣各種運(yùn)算。如:正交變換、三角分解、特征值、常見(jiàn)的特殊矩陣等。
包括各種特殊函數(shù)。如:貝塞爾函數(shù)、勒讓德函數(shù)、伽碼函數(shù)、貝塔函數(shù)、橢圓函數(shù)等。
包括各種數(shù)學(xué)運(yùn)算功能.如:數(shù)值微分,數(shù)值積分,插值,求極值,方程求根,FFT,常微分方程的數(shù)值解,符號(hào)運(yùn)算,極限問(wèn)題、積分問(wèn)題等。(2)具有很好的圖視系統(tǒng)可方便地畫(huà)出二維和三維圖形。圖形用戶界面GUI制作工具,可以制作用戶菜單和控件。使用者可以根據(jù)自己的需求編寫(xiě)出滿意的圖形界面。高級(jí)圖形處理。如:色彩控制、句柄圖形、動(dòng)畫(huà)等。4MATLAB語(yǔ)言的主要特點(diǎn)(1)具有豐富的數(shù)學(xué)功能包括矩陣(3)可以直接處理聲音和圖象文件。(4)具有若干功能非常強(qiáng)大的應(yīng)用工具箱。(5)使用方便,具有很好的擴(kuò)張功能。聲言文件。如:WAV文件(例:wavread,sound等).圖象文件。如:bmp、gif、pcx、tif、jpeg等文件。如:OPTIMAL、SIMULINK、DSP、SIGNAL等30多種.(6)具有很好的幫助功能可以M文件轉(zhuǎn)變?yōu)楠?dú)立于平臺(tái)的EXE可執(zhí)行文件。使用MATLAB語(yǔ)言編寫(xiě)的程序可以直接運(yùn)行,無(wú)需編譯。
提供十分詳細(xì)的幫助文件(PDF、HTML、demo文件)。
聯(lián)機(jī)查詢指令:help指令(例:helpelfun,helpexp,helpsimulink),lookfor關(guān)鍵詞(例:lookforfourier)。MATLAB的應(yīng)用接口程序API是MATLAB提供的十分重要的組件,由一系列接口指令組成。用戶就可在FORTRAN或C中,把MATLAB當(dāng)作計(jì)算引擎使用
。
5(3)可以直接處理聲音和圖象文件。(4)具有若干功能非常強(qiáng)大MATLAB的數(shù)據(jù)類(lèi)型
現(xiàn)有四種基本數(shù)據(jù)類(lèi)型:雙精度數(shù)組(7.0已改進(jìn))、字符串?dāng)?shù)組、元胞數(shù)組、構(gòu)架數(shù)組。(矩陣是特殊的數(shù)組)
元胞數(shù)組(CellArray)如同銀行里的保險(xiǎn)箱庫(kù)一樣。該數(shù)組的基本組分是元胞(Cell),以下標(biāo)來(lái)區(qū)分。元胞可以存放任何類(lèi)型、任何大小的數(shù)組。構(gòu)架數(shù)組(StructureArray)也能存放各類(lèi)數(shù)據(jù)。該數(shù)組的基本組分是構(gòu)架(Structure
),以下標(biāo)來(lái)區(qū)分。構(gòu)架必須在劃分“域”后才能使用。數(shù)據(jù)不能存放于構(gòu)架,只能存放在域中。構(gòu)架的域可以存放任何類(lèi)型、任何大小的數(shù)組。不同構(gòu)架的同名域中存放的內(nèi)容可不同。同一個(gè)元胞數(shù)組中各元胞的內(nèi)容可以不同。6MATLAB的數(shù)據(jù)類(lèi)型現(xiàn)有四種基本數(shù)據(jù)類(lèi)型:雙精度數(shù)組(7MATLAB中變量的命名規(guī)則(1)變量名必須是不含空格的單個(gè)詞;(2)變量名區(qū)分大小寫(xiě);(3)變量名必須以字母打頭,之后可以是任意字母、數(shù)字或下劃線,變量名中不允許使用標(biāo)點(diǎn)符號(hào).
(4)不區(qū)分變量與常量.一、變量與函數(shù)1、變量7MATLAB中變量的命名規(guī)則一、變量與函數(shù)1、變量7特殊變量表8特殊變量表82、數(shù)學(xué)運(yùn)算符號(hào)及標(biāo)點(diǎn)符號(hào)(1)MATLAB的每條命令后,若為逗號(hào)或無(wú)標(biāo)點(diǎn)符號(hào),則顯示命令的結(jié)果;若命令后為分號(hào),則禁止顯示結(jié)果.(2)“%”后面所有文字為注釋.(3)“...”表示續(xù)行.+加法運(yùn)算適用于兩個(gè)數(shù)或兩個(gè)矩陣或矩陣與向量的運(yùn)算;不同符號(hào)用法稍有差異
?!獪p法運(yùn)算*乘法運(yùn)算.*點(diǎn)乘運(yùn)算/除法運(yùn)算./點(diǎn)除運(yùn)算^乘冪運(yùn)算.^點(diǎn)乘冪運(yùn)算\反斜杠表示左除.92、數(shù)學(xué)運(yùn)算符號(hào)及標(biāo)點(diǎn)符號(hào)(1)MATLAB的每條命令后,若3.常用數(shù)學(xué)函數(shù)注意:這些函數(shù)可以直接以向量或矩陣作為參數(shù),輸出為對(duì)應(yīng)向量或矩陣。
函數(shù)名稱函數(shù)名稱
sin(x)正弦函數(shù)asin(x)反正弦函數(shù)
cos(x)余弦函數(shù)acos(x)反余弦函數(shù)
tan(x)正切函數(shù)atan(x)反正切函數(shù)abs(x)絕對(duì)值max(x)最大值
min(x)最小值sum(x)元素的總和
sqrt(x)開(kāi)平方exp(x)以e為底的指數(shù)
log(x)自然對(duì)數(shù)log10(x)以10為底的對(duì)數(shù)
floor(x)取整log2(x)以2為底的對(duì)數(shù)
sign(x)符號(hào)函數(shù)fix(x)取整
103.常用數(shù)學(xué)函數(shù)注意:這些函數(shù)可以直接以向量或矩陣作為參數(shù)4.1
M腳本文件對(duì)于一些比較簡(jiǎn)單的問(wèn)題,在指令窗中直接輸入指令計(jì)算。對(duì)于復(fù)雜計(jì)算,采用腳本文件(Scriptfile)最為合適。MATLAB只是按文件所寫(xiě)的指令執(zhí)行。M腳本文件的特點(diǎn)是:腳本文件的構(gòu)成比較簡(jiǎn)單,只是一串按用戶意圖排列而成的(包括控制流向指令在內(nèi)的)MATLAB指令集合。M文件有兩種形式:腳本文件(ScriptFile)和函數(shù)文件(FunctionFile)。這兩種文件的擴(kuò)展名,均為“.m”——Matlab的可執(zhí)行文件。4、M文件114.1M腳本文件對(duì)于一些比較簡(jiǎn)單的問(wèn)題,在指令窗中M文件腳本文件建立方法: 1.在Matlab中,點(diǎn):File->New->M-file,生成編輯窗口 2.在編輯窗口中輸入復(fù)雜的計(jì)算命令集合; 3.點(diǎn):File->Save,存盤(pán),文件名任意——易記憶的.例、隨機(jī)產(chǎn)生50個(gè)隨機(jī)數(shù),并用圖形顯示結(jié)果(比較均勻分布與正態(tài)分布)a=rand(1,50);subplot(1,2,1);plot(a);b=randn(1,50);subplot(1,2,2);plot(b);12M文件腳本文件建立方法:例、隨機(jī)產(chǎn)生50個(gè)隨機(jī)數(shù),并用圖形顯4.2M函數(shù)文件與腳本文件不同,函數(shù)文件猶如一個(gè)“黑箱”,把一些數(shù)據(jù)送進(jìn)并經(jīng)加工處理,再把結(jié)果送出來(lái)。MATLAB提供的函數(shù)指令大部分都是由函數(shù)文件定義的。M函數(shù)文件的特點(diǎn)是:從形式上看,與腳本文件不同,函數(shù)文件的笫一行總是以“function”引導(dǎo)的“函數(shù)申明行”。一般結(jié)構(gòu)如下function
因變量名=函數(shù)名(自變量名)%注釋行函數(shù)體.......returnfunction
因變量名=函數(shù)名(自變量名)子函數(shù)%(只在上函數(shù)中使用)%注釋內(nèi)容函數(shù)體.......return...............134.2M函數(shù)文件與腳本文件不同,函數(shù)文件猶如一個(gè)“4.3M函數(shù)文件的一般結(jié)構(gòu)典型M函數(shù)文件的結(jié)構(gòu)如下:
函數(shù)申明行:位于函數(shù)文件的首行,以關(guān)鍵字function開(kāi)頭,函數(shù)名以及函數(shù)的輸入輸出宗量都在這一行被定義。
笫一注釋行:緊隨函數(shù)申明行之后以%開(kāi)頭笫一注釋行。該行供lookfor關(guān)鍵詞查詢和help在線幫助使用。
在線幫助文本區(qū):笫一注釋行及其之后的連續(xù)以%開(kāi)頭的所有注釋行構(gòu)成整個(gè)在線幫助文本。
編寫(xiě)和修改記錄:與在線幫助文本區(qū)相隔一個(gè)“空”行,也以%開(kāi)頭,標(biāo)志編寫(xiě)及修改該M文件的作者和日期等。
函數(shù)體:為清晰起見(jiàn),它與前面的注釋以“空”行相隔。144.3M函數(shù)文件的一般結(jié)構(gòu)典型M函數(shù)文件的結(jié)構(gòu)如M文件建立方法:在Matlab中點(diǎn):File->New->M-file在編輯窗口中輸入程序內(nèi)容點(diǎn):File->Save存盤(pán),文件名必須函數(shù)名一致。例:定義函數(shù)f(x1,x2)=100(x2-x12)2+(1-x1)2functionf=fun(x)f=100*(x(2)-x(1)^2)^2+(1-x(1))^2;return1.建立M文件:fun.m2.可以直接使用函數(shù)fun.m例如:計(jì)算f(1,2),只需在Matlab命令窗口鍵入命令:x=[12];fun(x)15M文件建立方法:例:定義函數(shù)f(x1,x2)=100(x24.4函數(shù)調(diào)用和參數(shù)傳遞在MATLAB中,調(diào)用函數(shù)的常用形式是:[輸出參數(shù)1,輸出參數(shù)2,…]=函數(shù)名(輸入?yún)?shù)1,輸入?yún)?shù)2,…)函數(shù)調(diào)用可以嵌套,一個(gè)函數(shù)可以調(diào)用別的函數(shù),甚至調(diào)用它自己(遞歸調(diào)用)。MATLAB允許使用比“標(biāo)稱數(shù)目”較少的輸入輸出變量,實(shí)現(xiàn)對(duì)函數(shù)的調(diào)用。164.4函數(shù)調(diào)用和參數(shù)傳遞在MATLAB中,調(diào)用函數(shù)的常MATLAB在函數(shù)調(diào)用上有一個(gè)與眾不同之處:函數(shù)所傳遞的參數(shù)具有可調(diào)性。傳遞參數(shù)數(shù)目的可調(diào)性來(lái)源于如下兩個(gè)MATLAB永久變量:函數(shù)體內(nèi)的nargin給出調(diào)用該函數(shù)時(shí)的輸入?yún)?shù)數(shù)目。函數(shù)體內(nèi)的
nargout
給出調(diào)用該函數(shù)時(shí)的輸出參數(shù)數(shù)目。只要在函數(shù)文件中包括這兩個(gè)變量,就可以知道該函數(shù)文件調(diào)用時(shí)的輸入?yún)?shù)和輸出參數(shù)數(shù)目。值得注意:nargin、nargout本身都是函數(shù),不是變量,所以用戶不能賦值,也不能顯示。“變長(zhǎng)度”輸入輸出變量:varargin、varrgout。具有接受“任意多輸入”、返回“任意多輸出”的能力。17MATLAB在函數(shù)調(diào)用上有一個(gè)與眾不同之處:函數(shù)所傳遞的4.5MATLAB的程序流控制4.5.1程序流控制循環(huán)結(jié)構(gòu):MATLAB提供兩種循環(huán)方式。分支結(jié)構(gòu):if—[else]—end。//if—elseif—[else]—endfor—end循環(huán)和while---end循環(huán)。switch---case結(jié)構(gòu)。forx=array{commands}endwhileexpression{commands}endifexpression{commands1}else{commands2}endif(expression1)
{commands1}elseif(expression2)
{commands2}elseif(expression3)
{commands3}elseif…………else{commands}endswitch(a)case(a=)1
{commands1}case(a=)2
{commands3}case3……otherwise{commandn}end184.5MATLAB的程序流控制4.5.1程序流控制循環(huán)4.6圖形用戶界面(GUI)編程現(xiàn)代的主流應(yīng)用程序已經(jīng)從命令行的交互方式轉(zhuǎn)變?yōu)橐詧D形界面為主的交互方式,這主要是由于它給用戶帶來(lái)了操作和控制的方便與靈活性。(面向?qū)ο缶幊蹋㎝ATLAB能夠以比較簡(jiǎn)單的方式實(shí)現(xiàn)一系列的圖形界面功能。通過(guò)對(duì)控件、菜單屬性的設(shè)置和
Callback的編寫(xiě),就能夠滿足大多數(shù)用戶的需求??丶腃allback屬性:Callback屬性的取值是字符串,可以是某個(gè)M文件名或一小段MATLAB語(yǔ)句。當(dāng)用戶激活控件對(duì)象(例如:在控件對(duì)象圖標(biāo)上單擊鼠標(biāo)左鍵)時(shí),應(yīng)用程序就運(yùn)行Callback屬性定義的子程序。菜單的Callback屬性:Callback屬性的取值是字符串,可以是某個(gè)M文件名或一小段MATLAB語(yǔ)句。當(dāng)用戶激活菜單對(duì)象時(shí),若沒(méi)有子菜單就運(yùn)行Callback屬性定義的子程序。若有,先運(yùn)行Callback屬性定義的子程序,再顯示子菜單。194.6圖形用戶界面(GUI)編程現(xiàn)代的主流應(yīng)用程序已經(jīng)2.4M文件的調(diào)試編寫(xiě)M文件時(shí),錯(cuò)誤(Bug)在所難免。錯(cuò)誤有兩種:語(yǔ)法(Syntax)錯(cuò)誤和運(yùn)行(Run-time)錯(cuò)誤。語(yǔ)法錯(cuò)誤是指變量名、函數(shù)名的誤寫(xiě),標(biāo)點(diǎn)符號(hào)的缺、漏等。對(duì)于這類(lèi)錯(cuò)誤,通常能在運(yùn)行時(shí)發(fā)現(xiàn),終止執(zhí)行,并給出相應(yīng)的錯(cuò)誤原因以及所在行號(hào)。運(yùn)行錯(cuò)誤是算法本身引起的,發(fā)生在運(yùn)行過(guò)程中。相對(duì)語(yǔ)法錯(cuò)誤而言,運(yùn)行錯(cuò)誤較難處理。尤其是M函數(shù)文件,它一旦運(yùn)行停止,其中間變量被刪除一空,錯(cuò)誤很難查找。有兩種調(diào)試方法:直接調(diào)試法和工具調(diào)試法。202.4M文件的調(diào)試編寫(xiě)M文件時(shí),錯(cuò)誤(Bug)在所難2.4M文件的調(diào)試(續(xù)1)
直接調(diào)試法:可以用下面方法發(fā)現(xiàn)某些運(yùn)行錯(cuò)誤。在M文件中,將某些語(yǔ)句后面的分號(hào)去掉,迫使M文件輸出一些中間計(jì)算結(jié)果,以便發(fā)現(xiàn)可能的錯(cuò)誤。在適當(dāng)?shù)奈恢?,添加顯示某些關(guān)鍵變量值的語(yǔ)句(包括使用disp在內(nèi))。在原M腳本或函數(shù)文件的適當(dāng)位置,增添指令keyboard。
keyboard語(yǔ)句可以設(shè)置程序的斷點(diǎn)。
設(shè)置斷點(diǎn),單步執(zhí)行來(lái)查找算法錯(cuò)誤——debug;212.4M文件的調(diào)試(續(xù)1)直接調(diào)試法:可以用下面方法發(fā)2.5編程實(shí)踐例1設(shè)銀行年利率為11.25%.將10000元錢(qián)存入銀行,問(wèn)多長(zhǎng)時(shí)間會(huì)連本帶利翻一番?腳本文件實(shí)現(xiàn)方式(ex1.m):money=10000;years=0;rot=1+11.25/100;whilemoney<20000years=years+1;money=money*rot;endYears,money函數(shù)文件實(shí)現(xiàn)方式(ex2.m):function[years,money]=ex2(money,year)%%mony0=money;rot=1+11.25/100;Ifnargin>1fori=1:yearmoney=money*rot;endelseyear=0;whilemoney<2*money0years=years+1;money=money*rot;endend222.5編程實(shí)踐例1設(shè)銀行年利率為11.25%2.5編程實(shí)踐腳本文件計(jì)算定積分(ex3.m):a=-3;b=5;M=1000;detx=(b-a)/M;s=0;fori=1:Ms=s+fun1(a+detx*i);ends=s*detx編寫(xiě)函數(shù)文件(fun1.m):functionf=fun1(x)%分段函數(shù)定義%ifx>1f=x^2+1;elseifx<=0f=x^3;elsef=2*x;end例2計(jì)算分段函數(shù)的定積分232.5編程實(shí)踐腳本文件計(jì)算定積分(ex3.m):編寫(xiě)函數(shù)2.5編程實(shí)踐腳本文件計(jì)算(ex4.m):a(1)=100;b=a(1);fori=2:11a(i)=a(i-1)/2;b=b+a(i);endaa=zeros(1,2*length(a));aa(1:2:end)=a;plot(aa),b例3一球從100米高度自由落下,每次落地后反跳回原高度的一半,再落下.求它在第10次落地時(shí),共經(jīng)過(guò)多少米?第10次反彈有多高?242.5編程實(shí)踐腳本文件計(jì)算(ex4.m):例3一球二.常用函數(shù)簡(jiǎn)介——矩陣運(yùn)算(含數(shù)組)1.矩陣的建立與表示法:在命令窗口中輸入:A=[1,2,3;4,5,6;7,8,9]可以得到:A=123456789若要顯示整行或整列,則可以用(:)冒號(hào)來(lái)表示。冒(:)代表矩陣中行(ROWS)或列(COLUMNS)的全部。例如執(zhí)行命令:A(:,2),就會(huì)顯示第2列的全部,結(jié)果為:
ans=25825二.常用函數(shù)簡(jiǎn)介——矩陣運(yùn)算(含數(shù)組)252.矩陣的四則運(yùn)算符號(hào):加“+”減“—”乘“*”乘方“^”除“/”共軛轉(zhuǎn)置“'”非共軛轉(zhuǎn)置“.'”特殊符號(hào)“.”——“.*”,“./”,“.^” 左除“\”例如:b=[1+2i;3+4i]b=1.0000+2.0000i3.0000+4.0000ib'ans=1.0000-2.0000i3.0000-4.0000ib.'ans=1.0000+2.0000i3.0000+4.0000i運(yùn)算非常靈活262.矩陣的四則運(yùn)算符號(hào):運(yùn)算非常靈活263.其他特殊矩陣的生成方法:1)
eye(m,n)或eye(m)產(chǎn)生m*n或m*m的單位矩陣。例如:
eye(3,4)與eye(3)分別產(chǎn)生如下矩陣:
1000100010001000100012)zeros(m,n)或zeros(m)產(chǎn)生m*n或m*m的零矩陣。例如:zeros(3,4)與zeros(3)分別產(chǎn)生如下矩陣:
000000000000000000000273.其他特殊矩陣的生成方法:273)ones(m,n)或ones(m)產(chǎn)生m*n或m*m的全部元素為1的矩陣。例如:ones(3,4)與ones(3)分別產(chǎn)生如下矩陣:
1111111111111111111114.常用矩陣函數(shù):
1)d=eig(A)----返回矩陣A的特征值所組成的列向量;
[v,d]=eig(A)----返回分別由矩陣A的特征向量和特征值(以其為主對(duì)角線元素,其余元素為零)的兩個(gè)矩陣。283)ones(m,n)或ones(m)產(chǎn)生m*n或例如執(zhí)行命令:d=eig(A)結(jié)果為: d=16.1168-1.1168-0.0000例如執(zhí)行命令:[v,d]=eig(A)結(jié)果為: v=d=0.23200.78580.408216.1168000.52530.0868-0.81650-1.116800.8187-0.61230.408200-0.0000其中v(:,i)為d(i,i)所對(duì)應(yīng)的特征向量。29例如執(zhí)行命令:d=eig(A)結(jié)果為:292)det(A)計(jì)算行列式A的值。例如det(A)結(jié)果為:
ans=03)inv(A)求矩陣A的逆。例如:inv(A)結(jié)果為:
Warning:Matrixisclosetosingularorbadlyscaled.Resultsmaybeinaccurate.RCOND=2.055969e-018.ans=1.0e+016*-0.45040.9007-0.45040.9007-1.80140.9007-0.45040.9007-0.4504302)det(A)計(jì)算行列式A的值。例如det(A)4)orth(A)返回對(duì)應(yīng)于A的正交化矩陣。例如:orth(A)結(jié)果為:
ans=0.21480.88720.52060.24960.8263-0.38795)poly(A)若A為一矩陣,則返回A的特征多項(xiàng)式。例如:poly(A)結(jié)果為:
ans=1.0000-15.0000-18.0000-0.0000
若A為一向量,則返回以A的元素為根的特征多項(xiàng)式。例如:
r=[1,2,3];p=poly(r)結(jié)果為:
p=1-611-66)rank(A)計(jì)算矩陣A的秩。例如:r=rank(A)結(jié)果為:r=2314)orth(A)返回對(duì)應(yīng)于A的正交化矩陣。例如:o5.矩陣分解:
1)[q,r]=qr(A)將矩陣A做正交化分解,使得A=q*r。q為單位矩陣(unitarymatrix),其范數(shù)(norm)為1。r為對(duì)角化的上三角矩陣。例如:
[q,r]=qr(A)q=-0.12310.90450.4082-0.49240.3015-0.8165-0.8616-0.30150.4082r=-8.1240-9.6011-11.078200.90451.809100-0.0000norm(q)ans=1.0000325.矩陣分解:322)[L,U]=lu(A)將矩陣A做對(duì)角線分解,使得A=L*U,L為下三角矩陣(lowertriangularmatrix),U為上三角矩陣(uppertriangularmatrix)。例如:
[L,U]=lu(A)L=0.14291.000000.57140.50001.00001.000000U=7.00008.00009.000000.85711.7143000.0000332)[L,U]=lu(A)將矩陣A做對(duì)角線分解,使6.關(guān)系運(yùn)算符
MATLAB有用于比較矩陣的六個(gè)關(guān)系運(yùn)算符,也可以對(duì)矩陣與一個(gè)標(biāo)量進(jìn)行比較,即矩陣中的每個(gè)元素與標(biāo)量進(jìn)行比較。關(guān)系運(yùn)算符如下:<
小于<=
小于等于>
大于>=
大于等于==
等于~=
不等于
關(guān)系運(yùn)算符比較對(duì)應(yīng)的元素,產(chǎn)生一個(gè)僅包含1和0的具有相同維數(shù)的矩陣。其元素是:1
比較結(jié)果是真0
比較結(jié)果是假
在一個(gè)表達(dá)式中,算術(shù)運(yùn)算符優(yōu)先級(jí)最高,其次是關(guān)系運(yùn)算符,最低級(jí)別是邏輯運(yùn)算符。圓括號(hào)可以改變其順序??捎糜谕S矩陣比較及矩陣與單個(gè)元素比較。346.關(guān)系運(yùn)算符347.邏輯運(yùn)算符
在MATLAB中有四種邏輯運(yùn)算符:&
與|
或~
非xor
異或邏輯運(yùn)算符的運(yùn)算優(yōu)先級(jí)最低。在一個(gè)表達(dá)式中,關(guān)系運(yùn)算符和算術(shù)運(yùn)算符的運(yùn)算級(jí)別要高于邏輯運(yùn)算符。xor和or之間的差別在于:表達(dá)式中至少有一個(gè)是真,那么or是真;xor是表達(dá)式中有一個(gè)是真但不能兩者均為真時(shí)才為真。運(yùn)算符&和|比較兩個(gè)相同維數(shù)的矩陣,如同前一節(jié)一樣,它也能使一個(gè)標(biāo)量與一個(gè)矩陣進(jìn)行比較。邏輯運(yùn)算符是按元素比較的。零元素表示邏輯值假,任何其他值的元素表示邏輯值真。其結(jié)果是一個(gè)包含1和0的矩陣。357.邏輯運(yùn)算符358.邏輯函數(shù)在MATLAB中有幾個(gè)邏輯函數(shù)。在以下定義的函數(shù)中,假設(shè)A是一個(gè)m×n的矩陣,x是一個(gè)向量。在一些計(jì)算中,很重要的一點(diǎn)是要在給定的矩陣中以一定的特征定位。例如,在部分選主元的高斯消去法中,必須在工作列中尋找最大的項(xiàng)。MATLAB命令find可以用于這種情況。find(x)
返回一個(gè)x中包含非零元素的下標(biāo)的向量。如果所有的元素都是零,那么返回一個(gè)空矩陣,即[]。find(A)
返回一個(gè)長(zhǎng)的列向量,表示A中包含非零元素的下標(biāo)向量。[u,v]=find(A)
返回向量u和v,它們包含A中的非零元素的下標(biāo),即A中元素(uk,vk)為非零。[u,v,b]=find(A)
返回包含A中非零元素的下標(biāo)向量u和v以及一個(gè)包含對(duì)應(yīng)非零元素的向量。A中元素(uk,vk)為非零并且能在bk中找到。命令find可以與關(guān)系運(yùn)算符合用,這樣使命令更有用。例如:index=find(x>0.5)368.邏輯函數(shù)368.邏輯函數(shù)(續(xù))any(x)
如果x中的有一個(gè)元素為非零值,那么返回1;否則,返回0。
any(A)對(duì)A進(jìn)行列運(yùn)算,根據(jù)相應(yīng)列是否包含非零元素,返回一個(gè)帶1和0的行向量。all(x)
如果所有的元素都是非零值,返回1;否則,返回0。all(A)
對(duì)A進(jìn)行列操作,根據(jù)相應(yīng)列是否所有元素都為非零值,返回帶1和0的一個(gè)行向量。 例:all(x<=5)、all(all(A==A′))isnan(A)
返回一個(gè)維數(shù)與A相同的矩陣,在這個(gè)矩陣中,對(duì)應(yīng)A中有‘NaN’處為1,其他地方為0。isinf(A)
返回一個(gè)維數(shù)與A相同的矩陣,在這個(gè)矩陣中,對(duì)應(yīng)A中有‘inf’處為1,其他地方為0。isempty(A)
如果A是一個(gè)空矩陣,返回1;否則返回0。isequal(A,B)
如果A和B是相同的,即有相同的維數(shù)和相同的內(nèi)容,則返回1。isreal(A)
如果A是一個(gè)不帶虛部的實(shí)矩陣,則返回1;否則,返回零。isfinite(A)
返回一個(gè)與A維數(shù)相同的矩陣。在這個(gè)矩陣中,A中元素是有限的,則對(duì)應(yīng)元素為1;否則,為零。378.邏輯函數(shù)(續(xù))37二、圖形功能——2維2維圖形生產(chǎn)——函數(shù)plot 例子:1)y=[00.580.700.950.830.25];plot(y) 2)x=0:2*pi/30:2*pi;y=sin(x);plot(x,y)
多條曲線: x=0:2*pi/30:2*pi; y1=sin(x);y2=cos(x);
plot(x,y1,x,y2)命令holdon;holdoff函數(shù)linspase線型和顏色:plot(x,y1,’.+’,x,y2,’-*’)標(biāo)記:xlabel,ylabel,title,text,gtext(‘sinx’)坐標(biāo)系控制:axis多幅圖形:subplot(m,n,p)——畫(huà)面分成m×n區(qū)域的第p個(gè)區(qū)域中畫(huà)圖;畫(huà)函數(shù)圖象:fplot(‘sin(x)./x’,[-2020-0.41.2]),gtext(‘sin(x)/x’)38二、圖形功能——2維38二、圖形功能——3維3維圖形——mesh、surf、plot3()等
例子:1)做函數(shù)圖形x=-10:0.3:10;y=x;[X,Y]=meshgrid(x,y);Z=sqrt(X.^2+Y.^2);Z=sin(Z)./Z;mesh(X,Y,Z);(或surf(X,Y,Z))2)空間曲線——螺旋線
t=0:pi/50:10*pi;plot3(sin(t),cos(t),t)3)等高線contour 對(duì)1), holdon;contour3(X,Y,Z,10,’r’)39二、圖形功能——3維39三、多項(xiàng)式:多項(xiàng)式是用向量形式來(lái)表示,從最右邊算起,第一個(gè)為0階系數(shù),第二個(gè)為1階系數(shù),依次類(lèi)推。例如一個(gè)元三次多項(xiàng)式:4x^3+3x^2+2x+1用向量[4321]來(lái)表示。1.多項(xiàng)式的運(yùn)算:
1)乘:conv指令執(zhí)行多項(xiàng)式的相乘運(yùn)算,指令格式為:z=conv(x,y)例如: x=[135];y=[246]; z=conv(x,y) z= 210283830如果要對(duì)兩個(gè)以上的多項(xiàng)式進(jìn)行相乘,可以重復(fù)使用conv指令,例如:(x,y同上) conv(conv(x,y),x) ans= 2166817228428015040三、多項(xiàng)式:402)分解:與1)相反,用deconv指令,其指令格式為: [z,r]=deconv(x,y)——表示x除以y商為z,余數(shù)為r。 例如:[z,r]=deconv(z,x) z= 246 r= 000003)求根:roots指令用于求多項(xiàng)式的根。例如:
fx=[132]; rootoffx=roots(fx) rootoffx= -2 -1
有如roos([101])412)分解:與1)相反,用deconv指令,其指令格式為:4)polyval(p,x)計(jì)算多項(xiàng)式p在x處的值,其中x可以是數(shù)或向量或矩陣。例如: p=[1-611-6];
x=1;p1=polyval(p,x)結(jié)果為:p1=0 x=[1,2,3];p2=polyval(p,x)結(jié)果為:
p2=000
x=A;p3=polyval(p,x)結(jié)果為:
p3=000624601202103365)polyder(p)求p的微分多項(xiàng)式。例如:
p=[1-611-6];dp=polyder(p)dp=3-1211424)polyval(p,x)計(jì)算多項(xiàng)式p在x處的值,其
6)[r,p,k]=residue(a,b)求a/b的部分因式分解。若多項(xiàng)式a,b都沒(méi)有重根,則:例如用求x/(x^2+3x+2)的部分因式分解:
x=[10];y=[132];[r,p,k]=residue(x,y)r=2-1p=-2-1k=[]又例:x=[53-27];y=[-4083];[r,p,k]=residue(x,y);當(dāng)輸入三個(gè)參數(shù)r,p,k時(shí),該函數(shù)又會(huì)生成原來(lái)的函數(shù)。例如:
[x,y]=residue(r,p,k)x=10y=132436)[r,p,k]=residue(a,b)求a三、符號(hào)變量、符號(hào)運(yùn)算——符號(hào)運(yùn)算工具箱
函數(shù)sym用于生成符號(hào)變量和符號(hào)表達(dá)式,如:
x=sym(‘x’);a=sym(‘a(chǎn)lpha’) 分別創(chuàng)建變量x,alphaf=sym(‘a(chǎn)*x^2+b*x+c’)創(chuàng)建變量表達(dá)式f,但要注意此式并沒(méi)有自動(dòng)創(chuàng)建變量a,b,c,x??梢杂煤瘮?shù)syms對(duì)多個(gè)變量同時(shí)定義,如:
symsabcx
函數(shù)sym也可以用來(lái)表示確定的函數(shù),如f=sym(‘f(x)’)函數(shù)f(x)。44三、符號(hào)變量、符號(hào)運(yùn)算——符號(hào)運(yùn)算工具箱44常見(jiàn)符號(hào)計(jì)算:1.微分:diff是求微分最常用的函數(shù)。其輸入?yún)?shù)既可以是函數(shù)表達(dá)式,也可以是符號(hào)矩陣。Diff(f,x,n)表示對(duì)f關(guān)于x求n階導(dǎo)數(shù)。例如:1)下面程序段將生成表達(dá)式sin(ax),并分別對(duì)其中的x和a求導(dǎo)。 symsax f=sin(a*x); df=diff(f,x)df=cos(a*x)*a dfa=diff(f,a)dfa=cos(a*x)*x45常見(jiàn)符號(hào)計(jì)算:452)若輸入?yún)?shù)為矩陣,將對(duì)矩陣中的每個(gè)元素求導(dǎo).
symsaxA=[-sin(a*x),sin(a*x);cos(a*x),cos(a*x)]A=[-sin(a*x),sin(a*x)][cos(a*x),cos(a*x)]dy=diff(A,x)dy=[-cos(a*x)*a,cos(a*x)*a][-sin(a*x)*a,-sin(a*x)*a]462)若輸入?yún)?shù)為矩陣,將對(duì)矩陣中的每個(gè)元素求導(dǎo).463)、可用函數(shù)jacobian來(lái)計(jì)算Jacobi矩陣。
symsrlfx=r*cos(l)*cos(f);y=r*cos(l)*sin(f);z=r*sin(l);J=jacobian([x;y;z],[rlf])
J=[cos(l)*cos(f),-r*sin(l)*cos(f),-r*cos(l)*sin(f)][cos(l)*sin(f),-r*sin(l)*sin(f),r*cos(l)*cos(f)][sin(l),r*cos(l),0]473)、可用函數(shù)jacobian來(lái)計(jì)算Jacobi矩陣。472.積分:用函數(shù)int來(lái)求符號(hào)表達(dá)式的積分。命令格式為:
int(f,r,x0,x1)其中f為所要積分的表達(dá)式,r為積分變量,若為定積分,則x0,x1為積分上下限。例:
symsx; f=exp(-x^2) f=exp(-x^2)int(f,x) ans= 1/2*pi^(1/2)*erf(x) int(f,x,-inf,inf)ans= pi^(1/2)482.積分:用函數(shù)int來(lái)求符號(hào)表達(dá)式的積分。命令格式為:3.級(jí)數(shù)求和:函數(shù)用于對(duì)符號(hào)表達(dá)式求和。例:
symsk;s1=symsum(1/k^2,1,inf) s1=1/6*pi^2
s2=symsum(1/k,1,inf) s2= inf493.級(jí)數(shù)求和:函數(shù)用于對(duì)符號(hào)表達(dá)式求和。例:494.極限:用函數(shù)limit來(lái)求表達(dá)式的極限。函數(shù)limit的常用調(diào)用格式:數(shù)學(xué)表達(dá)式命令格式
Limit(f),或limit(f,x)
Limit(f,x,a),
或limit(f,a)
Limit(f,x,a,‘left’)
Limit(f,x,a,‘right’) symsx;f=exp(-x^2); limit(f,x,inf) ans= 0504.極限:用函數(shù)limit來(lái)求表達(dá)式的極限。505.化簡(jiǎn):
1)、collect(f)將表達(dá)式中相同次冪的項(xiàng)合并,也可以再輸入一個(gè)參數(shù)指定以哪個(gè)變量的冪次合并。
2)、expand(f)將表達(dá)式展開(kāi)。
3)、horner(f)將表達(dá)式轉(zhuǎn)換為嵌套格式。——減少運(yùn)算次數(shù)
4)、factor(f)將表達(dá)式分解因式,并且分解后的多項(xiàng)式的所有系數(shù)都為有理數(shù)。
5)、simplify(f)利用函數(shù)規(guī)則對(duì)表達(dá)式進(jìn)行化簡(jiǎn)。515.化簡(jiǎn):51clearclcsymsx;f='x^2*(sin(x))^2';diff(f);f1=simple(ans)diff(f,x,2);f2=simple(ans)diff(f,x,3);f3=simple(ans)diff(f,x,4);f4=simple(ans)int(f4,x)taylor(x^2*(sin(x))^2,15,x)52clear52數(shù)學(xué)建模講義數(shù)學(xué)軟件簡(jiǎn)介53數(shù)學(xué)建模講義數(shù)學(xué)軟件簡(jiǎn)介1MATLAB簡(jiǎn)介MathematicalModelZ?'Mathematica——側(cè)重于數(shù)學(xué)方面,其它方面應(yīng)用不是很廣泛Lindo,Lingo——主要求解優(yōu)化問(wèn)題(建議與Matlab結(jié)合使用)54MATLAB簡(jiǎn)介MathematicalModelZ?'MATLAB的發(fā)展史
MATLAB名字由MATrix和LABoratory兩詞的前三個(gè)字母組合而成。那是20世紀(jì)七十年代,時(shí)任美國(guó)新墨西哥大學(xué)計(jì)算機(jī)科學(xué)系主任的CleveMoler出于減輕學(xué)生編程負(fù)擔(dān)的動(dòng)機(jī),為學(xué)生設(shè)計(jì)了一組調(diào)用LINPACK和EISPACK矩陣軟件工具包庫(kù)程序的的“通俗易用”的接口,此即用FORTRAN編寫(xiě)的萌芽狀態(tài)的MATLAB。
1984年由Little、Moler、SteveBangert合作成立MathWorks公司,并把MATLAB正式推向市場(chǎng)。從這時(shí)起,MATLAB的內(nèi)核采用C語(yǔ)言編寫(xiě),而且除原有的數(shù)值計(jì)算能力外,還新增了數(shù)據(jù)圖視功能。
1997年仲春,MATLAB5.0版問(wèn)世,緊接著是5.1、5.2,以及和1999年春的5.3版,現(xiàn)在最高版本有7.1?,F(xiàn)今的MATLAB擁有更豐富的數(shù)據(jù)類(lèi)型和結(jié)構(gòu)、更友善的面向?qū)ο?、更加快速精良的圖形可視、更廣博的數(shù)學(xué)和數(shù)據(jù)分析資源、更多的應(yīng)用開(kāi)發(fā)工具。55MATLAB的發(fā)展史MATLAB名字由MATrix和LAMATLAB語(yǔ)言的主要特點(diǎn)(1)具有豐富的數(shù)學(xué)功能
包括矩陣各種運(yùn)算。如:正交變換、三角分解、特征值、常見(jiàn)的特殊矩陣等。
包括各種特殊函數(shù)。如:貝塞爾函數(shù)、勒讓德函數(shù)、伽碼函數(shù)、貝塔函數(shù)、橢圓函數(shù)等。
包括各種數(shù)學(xué)運(yùn)算功能.如:數(shù)值微分,數(shù)值積分,插值,求極值,方程求根,FFT,常微分方程的數(shù)值解,符號(hào)運(yùn)算,極限問(wèn)題、積分問(wèn)題等。(2)具有很好的圖視系統(tǒng)可方便地畫(huà)出二維和三維圖形。圖形用戶界面GUI制作工具,可以制作用戶菜單和控件。使用者可以根據(jù)自己的需求編寫(xiě)出滿意的圖形界面。高級(jí)圖形處理。如:色彩控制、句柄圖形、動(dòng)畫(huà)等。56MATLAB語(yǔ)言的主要特點(diǎn)(1)具有豐富的數(shù)學(xué)功能包括矩陣(3)可以直接處理聲音和圖象文件。(4)具有若干功能非常強(qiáng)大的應(yīng)用工具箱。(5)使用方便,具有很好的擴(kuò)張功能。聲言文件。如:WAV文件(例:wavread,sound等).圖象文件。如:bmp、gif、pcx、tif、jpeg等文件。如:OPTIMAL、SIMULINK、DSP、SIGNAL等30多種.(6)具有很好的幫助功能可以M文件轉(zhuǎn)變?yōu)楠?dú)立于平臺(tái)的EXE可執(zhí)行文件。使用MATLAB語(yǔ)言編寫(xiě)的程序可以直接運(yùn)行,無(wú)需編譯。
提供十分詳細(xì)的幫助文件(PDF、HTML、demo文件)。
聯(lián)機(jī)查詢指令:help指令(例:helpelfun,helpexp,helpsimulink),lookfor關(guān)鍵詞(例:lookforfourier)。MATLAB的應(yīng)用接口程序API是MATLAB提供的十分重要的組件,由一系列接口指令組成。用戶就可在FORTRAN或C中,把MATLAB當(dāng)作計(jì)算引擎使用
。
57(3)可以直接處理聲音和圖象文件。(4)具有若干功能非常強(qiáng)大MATLAB的數(shù)據(jù)類(lèi)型
現(xiàn)有四種基本數(shù)據(jù)類(lèi)型:雙精度數(shù)組(7.0已改進(jìn))、字符串?dāng)?shù)組、元胞數(shù)組、構(gòu)架數(shù)組。(矩陣是特殊的數(shù)組)
元胞數(shù)組(CellArray)如同銀行里的保險(xiǎn)箱庫(kù)一樣。該數(shù)組的基本組分是元胞(Cell),以下標(biāo)來(lái)區(qū)分。元胞可以存放任何類(lèi)型、任何大小的數(shù)組。構(gòu)架數(shù)組(StructureArray)也能存放各類(lèi)數(shù)據(jù)。該數(shù)組的基本組分是構(gòu)架(Structure
),以下標(biāo)來(lái)區(qū)分。構(gòu)架必須在劃分“域”后才能使用。數(shù)據(jù)不能存放于構(gòu)架,只能存放在域中。構(gòu)架的域可以存放任何類(lèi)型、任何大小的數(shù)組。不同構(gòu)架的同名域中存放的內(nèi)容可不同。同一個(gè)元胞數(shù)組中各元胞的內(nèi)容可以不同。58MATLAB的數(shù)據(jù)類(lèi)型現(xiàn)有四種基本數(shù)據(jù)類(lèi)型:雙精度數(shù)組(7MATLAB中變量的命名規(guī)則(1)變量名必須是不含空格的單個(gè)詞;(2)變量名區(qū)分大小寫(xiě);(3)變量名必須以字母打頭,之后可以是任意字母、數(shù)字或下劃線,變量名中不允許使用標(biāo)點(diǎn)符號(hào).
(4)不區(qū)分變量與常量.一、變量與函數(shù)1、變量59MATLAB中變量的命名規(guī)則一、變量與函數(shù)1、變量7特殊變量表60特殊變量表82、數(shù)學(xué)運(yùn)算符號(hào)及標(biāo)點(diǎn)符號(hào)(1)MATLAB的每條命令后,若為逗號(hào)或無(wú)標(biāo)點(diǎn)符號(hào),則顯示命令的結(jié)果;若命令后為分號(hào),則禁止顯示結(jié)果.(2)“%”后面所有文字為注釋.(3)“...”表示續(xù)行.+加法運(yùn)算適用于兩個(gè)數(shù)或兩個(gè)矩陣或矩陣與向量的運(yùn)算;不同符號(hào)用法稍有差異
?!獪p法運(yùn)算*乘法運(yùn)算.*點(diǎn)乘運(yùn)算/除法運(yùn)算./點(diǎn)除運(yùn)算^乘冪運(yùn)算.^點(diǎn)乘冪運(yùn)算\反斜杠表示左除.612、數(shù)學(xué)運(yùn)算符號(hào)及標(biāo)點(diǎn)符號(hào)(1)MATLAB的每條命令后,若3.常用數(shù)學(xué)函數(shù)注意:這些函數(shù)可以直接以向量或矩陣作為參數(shù),輸出為對(duì)應(yīng)向量或矩陣。
函數(shù)名稱函數(shù)名稱
sin(x)正弦函數(shù)asin(x)反正弦函數(shù)
cos(x)余弦函數(shù)acos(x)反余弦函數(shù)
tan(x)正切函數(shù)atan(x)反正切函數(shù)abs(x)絕對(duì)值max(x)最大值
min(x)最小值sum(x)元素的總和
sqrt(x)開(kāi)平方exp(x)以e為底的指數(shù)
log(x)自然對(duì)數(shù)log10(x)以10為底的對(duì)數(shù)
floor(x)取整log2(x)以2為底的對(duì)數(shù)
sign(x)符號(hào)函數(shù)fix(x)取整
623.常用數(shù)學(xué)函數(shù)注意:這些函數(shù)可以直接以向量或矩陣作為參數(shù)4.1
M腳本文件對(duì)于一些比較簡(jiǎn)單的問(wèn)題,在指令窗中直接輸入指令計(jì)算。對(duì)于復(fù)雜計(jì)算,采用腳本文件(Scriptfile)最為合適。MATLAB只是按文件所寫(xiě)的指令執(zhí)行。M腳本文件的特點(diǎn)是:腳本文件的構(gòu)成比較簡(jiǎn)單,只是一串按用戶意圖排列而成的(包括控制流向指令在內(nèi)的)MATLAB指令集合。M文件有兩種形式:腳本文件(ScriptFile)和函數(shù)文件(FunctionFile)。這兩種文件的擴(kuò)展名,均為“.m”——Matlab的可執(zhí)行文件。4、M文件634.1M腳本文件對(duì)于一些比較簡(jiǎn)單的問(wèn)題,在指令窗中M文件腳本文件建立方法: 1.在Matlab中,點(diǎn):File->New->M-file,生成編輯窗口 2.在編輯窗口中輸入復(fù)雜的計(jì)算命令集合; 3.點(diǎn):File->Save,存盤(pán),文件名任意——易記憶的.例、隨機(jī)產(chǎn)生50個(gè)隨機(jī)數(shù),并用圖形顯示結(jié)果(比較均勻分布與正態(tài)分布)a=rand(1,50);subplot(1,2,1);plot(a);b=randn(1,50);subplot(1,2,2);plot(b);64M文件腳本文件建立方法:例、隨機(jī)產(chǎn)生50個(gè)隨機(jī)數(shù),并用圖形顯4.2M函數(shù)文件與腳本文件不同,函數(shù)文件猶如一個(gè)“黑箱”,把一些數(shù)據(jù)送進(jìn)并經(jīng)加工處理,再把結(jié)果送出來(lái)。MATLAB提供的函數(shù)指令大部分都是由函數(shù)文件定義的。M函數(shù)文件的特點(diǎn)是:從形式上看,與腳本文件不同,函數(shù)文件的笫一行總是以“function”引導(dǎo)的“函數(shù)申明行”。一般結(jié)構(gòu)如下function
因變量名=函數(shù)名(自變量名)%注釋行函數(shù)體.......returnfunction
因變量名=函數(shù)名(自變量名)子函數(shù)%(只在上函數(shù)中使用)%注釋內(nèi)容函數(shù)體.......return...............654.2M函數(shù)文件與腳本文件不同,函數(shù)文件猶如一個(gè)“4.3M函數(shù)文件的一般結(jié)構(gòu)典型M函數(shù)文件的結(jié)構(gòu)如下:
函數(shù)申明行:位于函數(shù)文件的首行,以關(guān)鍵字function開(kāi)頭,函數(shù)名以及函數(shù)的輸入輸出宗量都在這一行被定義。
笫一注釋行:緊隨函數(shù)申明行之后以%開(kāi)頭笫一注釋行。該行供lookfor關(guān)鍵詞查詢和help在線幫助使用。
在線幫助文本區(qū):笫一注釋行及其之后的連續(xù)以%開(kāi)頭的所有注釋行構(gòu)成整個(gè)在線幫助文本。
編寫(xiě)和修改記錄:與在線幫助文本區(qū)相隔一個(gè)“空”行,也以%開(kāi)頭,標(biāo)志編寫(xiě)及修改該M文件的作者和日期等。
函數(shù)體:為清晰起見(jiàn),它與前面的注釋以“空”行相隔。664.3M函數(shù)文件的一般結(jié)構(gòu)典型M函數(shù)文件的結(jié)構(gòu)如M文件建立方法:在Matlab中點(diǎn):File->New->M-file在編輯窗口中輸入程序內(nèi)容點(diǎn):File->Save存盤(pán),文件名必須函數(shù)名一致。例:定義函數(shù)f(x1,x2)=100(x2-x12)2+(1-x1)2functionf=fun(x)f=100*(x(2)-x(1)^2)^2+(1-x(1))^2;return1.建立M文件:fun.m2.可以直接使用函數(shù)fun.m例如:計(jì)算f(1,2),只需在Matlab命令窗口鍵入命令:x=[12];fun(x)67M文件建立方法:例:定義函數(shù)f(x1,x2)=100(x24.4函數(shù)調(diào)用和參數(shù)傳遞在MATLAB中,調(diào)用函數(shù)的常用形式是:[輸出參數(shù)1,輸出參數(shù)2,…]=函數(shù)名(輸入?yún)?shù)1,輸入?yún)?shù)2,…)函數(shù)調(diào)用可以嵌套,一個(gè)函數(shù)可以調(diào)用別的函數(shù),甚至調(diào)用它自己(遞歸調(diào)用)。MATLAB允許使用比“標(biāo)稱數(shù)目”較少的輸入輸出變量,實(shí)現(xiàn)對(duì)函數(shù)的調(diào)用。684.4函數(shù)調(diào)用和參數(shù)傳遞在MATLAB中,調(diào)用函數(shù)的常MATLAB在函數(shù)調(diào)用上有一個(gè)與眾不同之處:函數(shù)所傳遞的參數(shù)具有可調(diào)性。傳遞參數(shù)數(shù)目的可調(diào)性來(lái)源于如下兩個(gè)MATLAB永久變量:函數(shù)體內(nèi)的nargin給出調(diào)用該函數(shù)時(shí)的輸入?yún)?shù)數(shù)目。函數(shù)體內(nèi)的
nargout
給出調(diào)用該函數(shù)時(shí)的輸出參數(shù)數(shù)目。只要在函數(shù)文件中包括這兩個(gè)變量,就可以知道該函數(shù)文件調(diào)用時(shí)的輸入?yún)?shù)和輸出參數(shù)數(shù)目。值得注意:nargin、nargout本身都是函數(shù),不是變量,所以用戶不能賦值,也不能顯示。“變長(zhǎng)度”輸入輸出變量:varargin、varrgout。具有接受“任意多輸入”、返回“任意多輸出”的能力。69MATLAB在函數(shù)調(diào)用上有一個(gè)與眾不同之處:函數(shù)所傳遞的4.5MATLAB的程序流控制4.5.1程序流控制循環(huán)結(jié)構(gòu):MATLAB提供兩種循環(huán)方式。分支結(jié)構(gòu):if—[else]—end。//if—elseif—[else]—endfor—end循環(huán)和while---end循環(huán)。switch---case結(jié)構(gòu)。forx=array{commands}endwhileexpression{commands}endifexpression{commands1}else{commands2}endif(expression1)
{commands1}elseif(expression2)
{commands2}elseif(expression3)
{commands3}elseif…………else{commands}endswitch(a)case(a=)1
{commands1}case(a=)2
{commands3}case3……otherwise{commandn}end704.5MATLAB的程序流控制4.5.1程序流控制循環(huán)4.6圖形用戶界面(GUI)編程現(xiàn)代的主流應(yīng)用程序已經(jīng)從命令行的交互方式轉(zhuǎn)變?yōu)橐詧D形界面為主的交互方式,這主要是由于它給用戶帶來(lái)了操作和控制的方便與靈活性。(面向?qū)ο缶幊蹋㎝ATLAB能夠以比較簡(jiǎn)單的方式實(shí)現(xiàn)一系列的圖形界面功能。通過(guò)對(duì)控件、菜單屬性的設(shè)置和
Callback的編寫(xiě),就能夠滿足大多數(shù)用戶的需求??丶腃allback屬性:Callback屬性的取值是字符串,可以是某個(gè)M文件名或一小段MATLAB語(yǔ)句。當(dāng)用戶激活控件對(duì)象(例如:在控件對(duì)象圖標(biāo)上單擊鼠標(biāo)左鍵)時(shí),應(yīng)用程序就運(yùn)行Callback屬性定義的子程序。菜單的Callback屬性:Callback屬性的取值是字符串,可以是某個(gè)M文件名或一小段MATLAB語(yǔ)句。當(dāng)用戶激活菜單對(duì)象時(shí),若沒(méi)有子菜單就運(yùn)行Callback屬性定義的子程序。若有,先運(yùn)行Callback屬性定義的子程序,再顯示子菜單。714.6圖形用戶界面(GUI)編程現(xiàn)代的主流應(yīng)用程序已經(jīng)2.4M文件的調(diào)試編寫(xiě)M文件時(shí),錯(cuò)誤(Bug)在所難免。錯(cuò)誤有兩種:語(yǔ)法(Syntax)錯(cuò)誤和運(yùn)行(Run-time)錯(cuò)誤。語(yǔ)法錯(cuò)誤是指變量名、函數(shù)名的誤寫(xiě),標(biāo)點(diǎn)符號(hào)的缺、漏等。對(duì)于這類(lèi)錯(cuò)誤,通常能在運(yùn)行時(shí)發(fā)現(xiàn),終止執(zhí)行,并給出相應(yīng)的錯(cuò)誤原因以及所在行號(hào)。運(yùn)行錯(cuò)誤是算法本身引起的,發(fā)生在運(yùn)行過(guò)程中。相對(duì)語(yǔ)法錯(cuò)誤而言,運(yùn)行錯(cuò)誤較難處理。尤其是M函數(shù)文件,它一旦運(yùn)行停止,其中間變量被刪除一空,錯(cuò)誤很難查找。有兩種調(diào)試方法:直接調(diào)試法和工具調(diào)試法。722.4M文件的調(diào)試編寫(xiě)M文件時(shí),錯(cuò)誤(Bug)在所難2.4M文件的調(diào)試(續(xù)1)
直接調(diào)試法:可以用下面方法發(fā)現(xiàn)某些運(yùn)行錯(cuò)誤。在M文件中,將某些語(yǔ)句后面的分號(hào)去掉,迫使M文件輸出一些中間計(jì)算結(jié)果,以便發(fā)現(xiàn)可能的錯(cuò)誤。在適當(dāng)?shù)奈恢?,添加顯示某些關(guān)鍵變量值的語(yǔ)句(包括使用disp在內(nèi))。在原M腳本或函數(shù)文件的適當(dāng)位置,增添指令keyboard。
keyboard語(yǔ)句可以設(shè)置程序的斷點(diǎn)。
設(shè)置斷點(diǎn),單步執(zhí)行來(lái)查找算法錯(cuò)誤——debug;732.4M文件的調(diào)試(續(xù)1)直接調(diào)試法:可以用下面方法發(fā)2.5編程實(shí)踐例1設(shè)銀行年利率為11.25%.將10000元錢(qián)存入銀行,問(wèn)多長(zhǎng)時(shí)間會(huì)連本帶利翻一番?腳本文件實(shí)現(xiàn)方式(ex1.m):money=10000;years=0;rot=1+11.25/100;whilemoney<20000years=years+1;money=money*rot;endYears,money函數(shù)文件實(shí)現(xiàn)方式(ex2.m):function[years,money]=ex2(money,year)%%mony0=money;rot=1+11.25/100;Ifnargin>1fori=1:yearmoney=money*rot;endelseyear=0;whilemoney<2*money0years=years+1;money=money*rot;endend742.5編程實(shí)踐例1設(shè)銀行年利率為11.25%2.5編程實(shí)踐腳本文件計(jì)算定積分(ex3.m):a=-3;b=5;M=1000;detx=(b-a)/M;s=0;fori=1:Ms=s+fun1(a+detx*i);ends=s*detx編寫(xiě)函數(shù)文件(fun1.m):functionf=fun1(x)%分段函數(shù)定義%ifx>1f=x^2+1;elseifx<=0f=x^3;elsef=2*x;end例2計(jì)算分段函數(shù)的定積分752.5編程實(shí)踐腳本文件計(jì)算定積分(ex3.m):編寫(xiě)函數(shù)2.5編程實(shí)踐腳本文件計(jì)算(ex4.m):a(1)=100;b=a(1);fori=2:11a(i)=a(i-1)/2;b=b+a(i);endaa=zeros(1,2*length(a));aa(1:2:end)=a;plot(aa),b例3一球從100米高度自由落下,每次落地后反跳回原高度的一半,再落下.求它在第10次落地時(shí),共經(jīng)過(guò)多少米?第10次反彈有多高?762.5編程實(shí)踐腳本文件計(jì)算(ex4.m):例3一球二.常用函數(shù)簡(jiǎn)介——矩陣運(yùn)算(含數(shù)組)1.矩陣的建立與表示法:在命令窗口中輸入:A=[1,2,3;4,5,6;7,8,9]可以得到:A=123456789若要顯示整行或整列,則可以用(:)冒號(hào)來(lái)表示。冒(:)代表矩陣中行(ROWS)或列(COLUMNS)的全部。例如執(zhí)行命令:A(:,2),就會(huì)顯示第2列的全部,結(jié)果為:
ans=25877二.常用函數(shù)簡(jiǎn)介——矩陣運(yùn)算(含數(shù)組)252.矩陣的四則運(yùn)算符號(hào):加“+”減“—”乘“*”乘方“^”除“/”共軛轉(zhuǎn)置“'”非共軛轉(zhuǎn)置“.'”特殊符號(hào)“.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基因治療藥物原料藥行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 非金屬無(wú)機(jī)氧化物企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略研究報(bào)告
- 2025年度智能交通股權(quán)抵押貸款合同書(shū)
- 吊帶企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 二零二五年度上海市精裝修商品房預(yù)售合同細(xì)則
- 仿制抗卵巢囊腫藥行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 二零二五年度醫(yī)療事故責(zé)任醫(yī)生聘用與免責(zé)合同
- 兒科藥物原料藥行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 家私材料企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 二零二五學(xué)校與志愿者簽訂的臨時(shí)性聘用合同范本
- 戶外廣告制作安裝合同模板
- 污水處理廠SBR工藝的設(shè)計(jì)說(shuō)明
- 2025年國(guó)家自然科學(xué)基金委員會(huì)招聘流動(dòng)編制人員59人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 歷史地理學(xué)研究-深度研究
- 2025江蘇太倉(cāng)市城市建設(shè)投資集團(tuán)限公司招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2.2 學(xué)會(huì)管理情緒(同步課件)2024-2025學(xué)年七年級(jí)道德與法治下冊(cè)(統(tǒng)編版2024)
- 14磁極與方向(教學(xué)設(shè)計(jì))-二年級(jí)科學(xué)下冊(cè)(教科版)
- 2025年山西經(jīng)貿(mào)職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2024年09月江蘇2024年蘇州金融租賃校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 2025年八省聯(lián)考數(shù)學(xué)試題(原卷版)
- 高教社馬工程倫理學(xué)(第二版)教學(xué)課件02
評(píng)論
0/150
提交評(píng)論