




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MATLAB語(yǔ)言基礎(chǔ)2.1MATLAB的窗口環(huán)境一、MATLAB語(yǔ)言的顯著特點(diǎn)1、具有強(qiáng)大的矩陣運(yùn)算能力:MatrixLaboratory,使得矩陣運(yùn)算非常簡(jiǎn)單。2、是一種演算式語(yǔ)言MATLAB的基本數(shù)據(jù)單元是既不需要指定維數(shù),也不需要說(shuō)明數(shù)據(jù)類型的矩陣(向量和標(biāo)量為矩陣的特例),而且數(shù)學(xué)表達(dá)式和運(yùn)算規(guī)則與通常的習(xí)慣相同。因此MATLAB語(yǔ)言編程簡(jiǎn)單,使用方便。二、MATLAB命令窗口啟動(dòng)MATLAB命令窗口計(jì)算機(jī)安裝好MATLAB之后,雙擊MATLAB圖標(biāo)啟動(dòng)后,產(chǎn)生默認(rèn)的MATLAB桌面-MATLABDesktop進(jìn)入MATLAB之后,會(huì)看道到一個(gè)視窗MATLABCommandWindow稱為指令視窗,它是用戶鍵入指令的地方,也是MATLAB計(jì)算結(jié)果顯示之處。而在它的功能選單一共有File,Edit,Options,Windows,Help五個(gè)主要功能,每一個(gè)之下各又有下一層的功能,我們會(huì)在后面相關(guān)的地方說(shuō)明。三.基本功能
1.MATLAB語(yǔ)句形式通過(guò)例題計(jì)算歸納一些MATLAB最基本的規(guī)則和語(yǔ)法結(jié)構(gòu)》變量=表達(dá)式; 通過(guò)等于符號(hào)將表達(dá)式的值賦予變量。當(dāng)鍵入回車鍵時(shí),該語(yǔ)句被執(zhí)行。語(yǔ)句執(zhí)行之后,窗口自動(dòng)顯示出語(yǔ)句執(zhí)行的結(jié)果。如果希望結(jié)果不被顯示,則只要在語(yǔ)句之后加上一個(gè)分號(hào)(;)即可。此時(shí)盡管結(jié)果沒(méi)有顯示,但它依然被賦值并在MATLAB工作空間中分配了內(nèi)存。2.MATLAB提供基本的算術(shù)運(yùn)算:
加(+)、減(-)、乘(*)、除(/)、冪次方(^),范例為:5+3,5-3,5*3,5/3,5^3
其它在計(jì)算常用的功能我們用一個(gè)算式來(lái)說(shuō)明。例:要計(jì)算面積Area=,半徑r=2,則可鍵入
>>r=2;>>area=pi*r^2;>>area=12.5664求(12+2*(7-4))/32的算術(shù)運(yùn)算結(jié)果。(1)用鍵盤在MATLAB指令窗中輸入以下內(nèi)容>>(12+2*(7-4))/3^2
(2)在上述表達(dá)式輸入完成后,按【Enter】鍵,該指令被執(zhí)行。(3)在指令執(zhí)行后,MATLAB指令窗中將顯示以下結(jié)果。ans=2
我們也可以將上述指令打在同一行,以,或是;分開(kāi),例如>>r=2,area=pi*r^2
>>r=2;area=pi*r^2;請(qǐng)注意上述二式的差異,前者有計(jì)算值顯示,而后者則無(wú)。
另外一個(gè)符號(hào)注解是由%起頭,也就是說(shuō)在%之后的任何文字都被視為程式的注解。注解的功能是簡(jiǎn)要的說(shuō)明程式的內(nèi)容,過(guò)多的注解在程式中或許沒(méi)有必要,但是我們寫程式時(shí)往往用了太少的注解。任何可能產(chǎn)生混淆的地方都應(yīng)該加注解,適量的注解可在以后想了解程式時(shí)能節(jié)省一些不必要的時(shí)間。例如:>>r=2;%鍵入半徑
>>area=pi*r^2;%計(jì)算面積四、變量和數(shù)值顯示格式
1、變量(1)變量名稱MATLAB對(duì)使用變量名稱的規(guī)定:變量名稱的英文大小寫是有區(qū)別的(apple,Apple,AppLe,三個(gè)變量不同)。變量的長(zhǎng)度上限為31個(gè)字元。變量名的第一個(gè)字必須是一英文字,隨后可以摻雜英文字、數(shù)字或是底線。變量中不能包含有標(biāo)點(diǎn)符號(hào)。(2)一些特殊的變量
以下列出MATLAB所定義的特別變量及其意義ans:用于結(jié)果的缺省變量名i或j:虛數(shù)單位pi:內(nèi)建的π值
nargin:函數(shù)的輸入變量個(gè)數(shù)eps:MATLAB定義的正的極小值=2.2204e-16nargout:函數(shù)的輸出變量個(gè)數(shù)inf:∞值,無(wú)窮大realmin:最小正實(shí)數(shù)realmax:最大正實(shí)數(shù)nan:無(wú)法定義一個(gè)數(shù)目,不定量flops:浮點(diǎn)運(yùn)算數(shù)(3)變量操作在命令窗口中,同時(shí)存儲(chǔ)著輸入的命令和創(chuàng)建的所有變量值,它們可以在任何需要的時(shí)候被調(diào)用。如要察看變量a的值,只需要在命令窗口中輸入變量的名稱即可:》a2、數(shù)值顯示格式任何MATLAB的語(yǔ)句的執(zhí)行結(jié)果都可以在屏幕上顯示,同時(shí)賦值給指定的變量,沒(méi)有指定變量時(shí),賦值給一個(gè)特殊的變量ans,數(shù)據(jù)的顯示格式由format命令控制。format只是影響結(jié)果的顯示,不影響其計(jì)算與存儲(chǔ);MATLAB總是以雙字長(zhǎng)浮點(diǎn)數(shù)(雙精度)來(lái)執(zhí)行所有的運(yùn)算。MATLAB可以將計(jì)算結(jié)果以不同的精確度的數(shù)字格式顯示,我們可以直接在指令視窗鍵入以下的各個(gè)數(shù)字顯示格式的指令,以π值為例:
>>pians=3.1416>>formatlong>>pians=3.14159265358979>>formatshorte>>pians=3.1416e+000如果結(jié)果為整數(shù),則顯示沒(méi)有小數(shù);如果結(jié)果不是整數(shù),則輸出形式有:五、簡(jiǎn)單的數(shù)學(xué)運(yùn)算(例exp02_01.m)1、常用的數(shù)學(xué)運(yùn)算符+,-,*(乘),/(左除),\(右除),^(冪)在運(yùn)算式中,MATLAB通常不需要考慮空格;多條命令可以放在一行中,它們之間需要用分號(hào)隔開(kāi);逗號(hào)告訴MATLAB顯示結(jié)果,而分號(hào)則禁止結(jié)果顯示。2、常用數(shù)學(xué)函數(shù)abs,sin,cos,tan,sqrt,exp,imag,real,sign,log,log10,conj,inv等
abs——取x的絕對(duì)值,例如:
x=-4;y=abs(x)y=4sin——取x的正弦值cos——取x的余弦值tan——取x的正切值sqrt——對(duì)x開(kāi)平方exp——取x的自然指數(shù)log——自然對(duì)數(shù)ln(x)log10——log10(x)
x+yi或x+yj——復(fù)數(shù)imag——復(fù)數(shù)的虛部real——復(fù)數(shù)的實(shí)部angle——復(fù)數(shù)的相角conj——共扼復(fù)數(shù)min(x)——向量的最小值max(x)——向量的最大值mean(x)——向量的平均值sum(x)——向量的總和sort(x)——向量的排序median(x)——每個(gè)列向量的中位數(shù)inv——矩陣的逆六、MATLAB的工作空間1、MATLAB的工作空間包含了一組可以在命令窗口中調(diào)整(調(diào)用)的參數(shù)who:顯示當(dāng)前工作空間中所有變量的一個(gè)簡(jiǎn)單列表,包括預(yù)設(shè)的計(jì)算結(jié)果的變數(shù)名whos:則列出變量的大小、數(shù)據(jù)格式等詳細(xì)信息clear:清除工作空間中所有的變量clear變量名:清除指定的變量clc:清除MATLAB命令窗口中所有的信息
2、保存和載入workspace(1)savefilenamevariables將變量列表variables所列出的變量保存到磁盤文件filename中Variables所表示的變量列表中,不能用逗號(hào),各個(gè)不同的變量之間只能用空格來(lái)分隔。未列出variables時(shí),表示將當(dāng)前工作空間中所有變量都保持到磁盤文件中。缺省的磁盤文件擴(kuò)展名為“.mat”。(2)loadfilenamevariables將以前用save命令保存的變量variables從磁盤文件中調(diào)入MATLAB工作空間。用load命令調(diào)入的變量,其名稱為用save命令保存時(shí)的名稱,取值也一樣。Variables所表示的變量列表中,不能用逗號(hào),各個(gè)不同的變量之間只能用空格來(lái)分隔。未列出variables時(shí),表示將磁盤文件中的所有變量都調(diào)入工作空間。3、退出工作空間quit或exit七、文件管理文件管理的命令,包括列文件名、顯示或刪除文件、顯示或改變當(dāng)前目錄等。(what、dir、type、delete、cd、which)what:顯示當(dāng)前目錄下所有與MATLAB相關(guān)的文件及它們的路徑。dir:顯示當(dāng)前目錄下所有的文件which:顯示某個(gè)文件的路徑cdpath:由當(dāng)前目錄進(jìn)入path目錄cd..:返回上一級(jí)目錄cd:顯示當(dāng)前目錄typefilename:在命令窗口中顯示文件filenamedeletefilename:刪除文件filename八、使用幫助1、help命令,在命令窗口中顯示help線上說(shuō)明
MATLAB的所有函數(shù)都是以邏輯群組方式進(jìn)行組織的,而MATLAB的目錄結(jié)構(gòu)就是以這些群組方式來(lái)編排的。helpmatfun
:矩陣函數(shù)-數(shù)值線性代數(shù)helpgeneral:通用命令helpgraphics:通用圖形函數(shù)helpelfun:基本的數(shù)學(xué)函數(shù)helpelmat:基本矩陣和矩陣操作helpdatafun:數(shù)據(jù)分析和傅立葉變換函數(shù)helpops:操作符和特殊字符helppolyfun:多項(xiàng)式和內(nèi)插函數(shù)helplang:語(yǔ)言結(jié)構(gòu)和調(diào)試helpstrfun:字符串函數(shù)helpcontrol:控制系統(tǒng)工具箱函數(shù)2、helpwin:幫助窗口3、helpdesk:幫助桌面,瀏覽器模式4、lookfor命令:返回包含指定關(guān)鍵詞的那些項(xiàng)5、demo:打開(kāi)示例窗口九.其它功能1.用↑↓二個(gè)游標(biāo)鍵可以將所下過(guò)的指令叫回來(lái)重覆使用。按下↑則前一次指令重新出現(xiàn),之后再按Enter鍵,即再執(zhí)行前一次的指令。而↓鍵的功用則是往后執(zhí)行指令。2.在鍵盤上的幾個(gè)鍵如→,←,Delete等,其功能則顯而易見(jiàn),試用即知無(wú)須多加說(shuō)明。3.鍵入who可以查看所有定義過(guò)的變數(shù)名稱。而鍵入clear則是去除所有定義過(guò)的變數(shù)名稱;如果只是要去除x及y
二個(gè)變數(shù)則可以鍵入clearxy。4.Ctrl-C(即同時(shí)按Ctrl及C二個(gè)鍵)可以用來(lái)中止執(zhí)行中的MATLAB的工作。5.命令窗口的分頁(yè)輸出
moreoff:不允許分頁(yè)
moreon:允許分頁(yè)
more(n):指定每頁(yè)輸出的行數(shù)回車鍵前進(jìn)一行空格鍵顯示下一頁(yè)q鍵結(jié)束當(dāng)前顯示MATLAB的運(yùn)算事實(shí)上是以陣列(array)及矩陣(matrix)方式在做運(yùn)算,而這二者在MATLAB的基本運(yùn)算性質(zhì)不同,陣列強(qiáng)調(diào)元素對(duì)元素的運(yùn)算,而矩陣則采用線性代數(shù)的運(yùn)算方式。宣告一變數(shù)為陣列或是矩陣時(shí),如果是要個(gè)別鍵入元素,須用中括號(hào)[]將元素置于其中。陣列為一維元素所構(gòu)成,而矩陣為多維元素所組成,例如:一、簡(jiǎn)易陣列2.2MATLAB陣列與矩陣>>x=[123]%一維1x3陣列>>x=[123;456]%二維2x3矩陣,以;區(qū)隔各行的元素>>x=[123%二維2x3矩陣,各行的元素分二行鍵入456]假設(shè)要計(jì)算y=sin(x),x=0,0.2π,0.4π,...,π,即可用陣列方式運(yùn)算,例如>>x=[00.2*pi0.4*pi0.6*pi0.8*pipi]%注意陣列內(nèi)也可作運(yùn)算x=00.62831.25661.88502.51333.1416>>y=sin(x)y=00.58780.95110.95110.58780.0000要找出陣列的某個(gè)元素或數(shù)個(gè)元素,可參考以下的例子>>x(3)%第三個(gè)x的元素ans=1.2566>>y(5)%第五個(gè)y的元素ans=0.5878>>x(1:5)%列出第一到第五個(gè)x的元素ans=00.62831.25661.88502.5133
>>y(3:-1:1)%列出第三到第一個(gè)y的元素,3為起始值,1為終止值,-1為增量ans=0.95110.58780>>x(2:2:6)%列出第二到第六個(gè)x的元素,2為起始值,6為終止值,2為增量ans=0.62831.88503.1416>>y([4251])%列出y元素,排列元素依序?yàn)樵瓉?lái)y陣列的4,2,5,1個(gè)ans=0.95110.58780.587802.建立陣列
前一節(jié)提到陣列產(chǎn)生的方式須個(gè)別鍵入其元素,這方法只適用于陣列元素很少時(shí)。如果要建立的陣列的元素多達(dá)數(shù)百個(gè),則須采用以下幾種方式>>x=(0:0.02:1)%以:區(qū)隔起始值=0、增量值=0.02、終止值=1>>x=linspace(0,1,51)%利用linspace,以區(qū)隔起始值=0終止值=1之間的元素?cái)?shù)目=51>>x=(0:0.01:1)*pi%注意陣列外也可作運(yùn)算
>>a=1:5,b=1:2:9%這二種方式更直接
a=
12345
b=
13579
>>c=[ba]%可利用先前建立的陣列a及陣列b,組成新陣列
c=
1357912345
>>d=[b(1:2:5)101]%由陣列b的三個(gè)元素再加上三個(gè)元素組成
d=
159101
3.陣列運(yùn)算以下將陣列的運(yùn)算符號(hào)及其意義列出,除了加減符號(hào)外其余的陣列運(yùn)算符號(hào)均須多加.
符號(hào)。陣列運(yùn)算功能+
加-
減.*
乘./
左除.^
次方.‘
轉(zhuǎn)置
>>a=1:5;a-2%從陣列a減2ans=
-10123
>>2*a-1%以2乘陣列a再減1ans=
13579
>>b=1:2:9;a+b%陣列a加陣列bans=
2581114
>>a.*b%陣列a及b中的元素與元素相乘ans=
16152845
>>a./b%陣列a及b中的元素與元素相除ans=
1.00000.666670.60000.57140.5556
>>a.^2%陣列中的各個(gè)元素作二次方ans=
1491625
>>2.^a%以2為底,以陣列中的各個(gè)元素為次方ans=
2481632
>>b.^a%以陣列b中的各個(gè)元素為底,以陣列a中的各個(gè)元素為次方ans=
19125240159049
>>b=a'%陣列b是陣列a的轉(zhuǎn)置結(jié)果b=
1
2
3
4
54.陣列運(yùn)算的特色
MATLAB在許多運(yùn)算皆是以陣列為對(duì)象,即是以陣列的元素為對(duì)象。因此除了“+”,“-”這二個(gè)運(yùn)算外,其余的運(yùn)算符號(hào)(乘、除、次方)皆須加上“.”來(lái)強(qiáng)調(diào)陣列之間的運(yùn)算。以下幾個(gè)例子可以說(shuō)明陣列運(yùn)算的特色。如果a,b各代表二個(gè)不同的陣列,a與b之間的運(yùn)算是元素對(duì)元素的方式,例如:a=[a1,a2,…,an]b=[b1,b2,…,bn]a.*b=[a1*b1,a2*b2,…,an*bn]a/b.=[a1/b1,a2/b2,…,an/bn]幾個(gè)例子如下:
>>x=1.5;%x是純量>>y=exp(x^2);%exp(x^2)是純量運(yùn)算>>y1=x/y%x/y是純量運(yùn)算
>>x=1:0.1:2;%x是陣列>>y=exp(x.^2);%exp(x.^2)是陣列運(yùn)算>>y1=x./y%x./y是陣列運(yùn)算須注意純量與陣列運(yùn)算的差別,例如>>x=2.0%x是一純量>>num=x^3-2*x^2+x-6.3;
>>den=x^2+0.05*x-3.14;
>>f=num/den>>x=1:5;%注意x是一陣列>>num=x.^3-2*x.^2+x-6.3;
>>den=x.^2+0.05*x-3.14;
>>f=num./den1、轉(zhuǎn)置:對(duì)于實(shí)矩陣用(’)符號(hào)或(.’)求轉(zhuǎn)置結(jié)果是一樣的;然而對(duì)于含復(fù)數(shù)的矩陣,則(’)將同時(shí)對(duì)復(fù)數(shù)進(jìn)行共軛處理,而(.’)則只是將其排列形式進(jìn)行轉(zhuǎn)置。》a=[123;456]'a=142536》a=[123;456].'a=142536》b=[1+2i2-7i]'b=1.0000-2.0000i2.0000+7.0000i》b=[1+2i2-7i].'b=1.0000+2.0000i2.0000-7.0000i二、矩陣的運(yùn)算+;-;*;\和/;^;.*;.\;./;.^如:a=[12;34];b=[35;59]》c=a+bd=a-b》c=d=47-2-3813-2-5》a*b=[1323;2951]》a/b=[-0.500.50;3.50–1.50]%左除》a\b=[-1-1;23]%右除》a^3=[3754;81118]》a.*b=[310;1536]》a./b=[0.330.40;0.600.44]》a.\b=[3.002.50;1.672.25]》a.^3=[18;2764]2、四則運(yùn)算與冪運(yùn)算只有維數(shù)相同的矩陣才能進(jìn)行加減運(yùn)算。注意只有當(dāng)兩個(gè)矩陣中前一個(gè)矩陣的列數(shù)和后一個(gè)矩陣的行數(shù)相同時(shí),才可以進(jìn)行乘法運(yùn)算。a\b運(yùn)算等效于求a*x=b的解;而a/b等效于求x*b=a的解。只有方陣才可以求冪。點(diǎn)運(yùn)算是兩個(gè)維數(shù)相同矩陣對(duì)應(yīng)元素之間的運(yùn)算,在有的教材中也定義為數(shù)組運(yùn)算。3、逆矩陣與行列式計(jì)算求逆:inv(A);求行列式:det(A)要求矩陣必須為方陣4、矩陣超越函數(shù)在MATLAB中exp、sqrt等命令也可以作用到矩陣上,但這種運(yùn)算是定義在矩陣的單個(gè)元素上的,即分別對(duì)矩陣的每一個(gè)元素進(jìn)行計(jì)算。超越數(shù)學(xué)函數(shù)可以在函數(shù)后加上m而成為矩陣的超越函數(shù),例如:expm,sqrtm。矩陣的超越函數(shù)要求運(yùn)算矩陣為方陣。》a=[123;456;235];》b=inv(a)b=-2.33330.33331.00002.66670.3333-2.0000-0.6667-0.33331.0000》det(a)ans=-3A(m,n):提取第m行,第n列元素A(:,n):提取第n列元素A(m,:):提取第m行元素A(m1:m2,n1:n2):提取第m1行到第m2行和第n1列到第n2列的所有元素(提取子塊)。A(:):得到一個(gè)長(zhǎng)列矢量,該矢量的元素按矩陣的列進(jìn)行排列。矩陣擴(kuò)展:如果在原矩陣中一個(gè)不存在的地址位置上設(shè)定一個(gè)數(shù)(賦值),則該矩陣會(huì)自動(dòng)擴(kuò)展行列數(shù),并在該位置上添加這個(gè)數(shù),而且在其他沒(méi)有指定的位置補(bǔ)零。消除子塊:如果將矩陣的子塊賦值為空矩陣[],則相當(dāng)于消除了相應(yīng)的矩陣子塊。三、矩陣的操作1、矩陣下標(biāo):MATLAB通過(guò)確認(rèn)矩陣下標(biāo),可以對(duì)矩陣進(jìn)行插入子塊,提取子塊和重排子塊的操作。例如:2、矩陣的大小[m,n]=size(A,x):返回矩陣的行列數(shù)m與n,當(dāng)x=1,則只返回行數(shù)m,當(dāng)x=2,則只返回列數(shù)n。length(A)=max(size(A)):返回行數(shù)或列數(shù)的最大值。rank(A):求矩陣的秩》a=[123;345];》[m,n]=size(a)m=2n=3》length(a)ans=3》max(size(a))ans=3》rank(a)ans=23.一些常用的特殊矩陣單位矩陣:eye(m,n);eye(m)
零矩陣:zeros(m,n);zeros(m)
一矩陣:ones(m,n);ones(m)
對(duì)角矩陣:對(duì)角元素向量
V=[a1,a2,…,an]A=diag(V)
隨機(jī)矩陣:rand(m,n)產(chǎn)生一個(gè)m×n的均勻分布的隨機(jī)矩陣》eye(2,3)ans=100010》zeros(2,3)ans=000000》ones(2,3)ans=111111》V=[572];A=diag(V)A=500070002》eye(2)ans=1001》zeros(2)ans=0000》ones(2)ans=1111如果已知A為方陣,則V=diag(A)可以提取A的對(duì)角元素構(gòu)成向量V。在MATLAB里,多項(xiàng)式由一個(gè)行向量表示,它的系數(shù)是按降序排列。例如,多項(xiàng)式x4-12x3+0x2+25x+116表示為:p=[1-12025116]注意:必須包括具有零系數(shù)的項(xiàng)。除非特別地辨認(rèn),MATLAB無(wú)法知道哪一項(xiàng)為零。四、多項(xiàng)式處理1.多項(xiàng)式的建立與表示方法2.多項(xiàng)式的運(yùn)算(1)根找出多項(xiàng)式的根,即多項(xiàng)式為零的值,可能是許多學(xué)科共同的問(wèn)題。MATLAB用函數(shù)roots找出一個(gè)多項(xiàng)式的根,并提供其它的多項(xiàng)式操作工具。?r=roots(p)r=11.74732.7028-1.2251+1.4672i-1.2251-1.4672i因?yàn)樵贛ATLAB中,無(wú)論是一個(gè)多項(xiàng)式,還是它的根,都是向量,MATLAB按慣例規(guī)定,多項(xiàng)式是行向量,根是列向量。給出一個(gè)多項(xiàng)式的根,也可以構(gòu)造相應(yīng)的多項(xiàng)式。在MATLAB中,命令poly執(zhí)行這個(gè)任務(wù)。?pp=poly(r)pp=1.0e+002* 0.0100-0.12000.00000.25001.1600+0.0000i
因?yàn)镸ATLAB無(wú)隙地處理復(fù)數(shù),當(dāng)用根重組多項(xiàng)式時(shí),如果一些根有虛部,由于截?cái)嗾`差,則poly的結(jié)果有一些小的虛部,這是很普通的。消除虛假的虛部,如上所示,只要使用函數(shù)real抽取實(shí)部。
?pp=real(pp)pp=1.0000-12.00000.000025.0000116.0000(2)乘法函數(shù)conv支持多項(xiàng)式乘法(執(zhí)行兩個(gè)數(shù)組的卷積)。兩個(gè)多項(xiàng)式a(x)=x3+2x2+3x+4和b(x)=x3+4x2+9x+16的乘積:
?a=[1234];b=[14916]; ?c=conv(a,b) c=162050758464結(jié)果是c(x)=x6+6x5+20x4+50x3+75x2+84x+64。兩個(gè)以上的多項(xiàng)式的乘法需要重復(fù)使用conv。
(3)加法對(duì)多項(xiàng)式加法,MATLAB不提供一個(gè)直接的函數(shù)。如果兩個(gè)多項(xiàng)式向量大小相同,標(biāo)準(zhǔn)的數(shù)組加法有效。把多項(xiàng)式a(x)與上面給出的b(x)相加。
?d=a+b d=261220結(jié)果是d(x)=2x3+6x2+12x+20。當(dāng)兩個(gè)多項(xiàng)式階次不同,低階的多項(xiàng)式必須用首零填補(bǔ),使其與高階多項(xiàng)式有同樣的階次。考慮上面多項(xiàng)式c和d相加:
?e=c+[000d] e=162052819684結(jié)果是e(x)=x6+6x5+20x4+52x3+81x2+96x+84。(4)除法在一些特殊情況,一個(gè)多項(xiàng)式需要除以另一個(gè)多項(xiàng)式。在MATLAB中,這由函數(shù)deconv完成。用上面的多項(xiàng)式b和c
?[q,r]=deconv(c,b) q=1234 r=0000000這個(gè)結(jié)果是b被c除,給出商多項(xiàng)式q和余數(shù)r,在現(xiàn)在情況下r是零,因?yàn)閎和q的乘積恰好是c。5)導(dǎo)數(shù)由于一個(gè)多項(xiàng)式的導(dǎo)數(shù)表示簡(jiǎn)單,MATLAB為多項(xiàng)式求導(dǎo)提供了函數(shù)polyder。
?g g=162048697244 ?h=polyder(g) h=6308014413872(6)估值(exp02_02.m)根據(jù)多項(xiàng)式系數(shù)的行向量,可對(duì)多項(xiàng)式進(jìn)行加,減,乘,除和求導(dǎo),也應(yīng)該能對(duì)它們進(jìn)行估值。在MATLAB中,由函數(shù)polyval來(lái)完成。?x=linspace(-1,3);%choose100datapointsbetween-1and3.?p=[14-7-10];%usespolynomialp(x)=x3+4x2-7x-10?v=polyval(p,x);計(jì)算x值上的p(x),把結(jié)果存在v里。然后用函數(shù)plot繪出結(jié)果。?plot(x,v),title('x^3+4x^2-7x-10'),xlabel('x')(7)有理多項(xiàng)式在許多應(yīng)用中,例如傅里葉(Fourier),拉普拉斯(Laplace)和Z變換,出現(xiàn)有理多項(xiàng)式或兩個(gè)多項(xiàng)式之比。在MATLAB中,有理多項(xiàng)式由它們的分子多項(xiàng)式和分母多項(xiàng)式表示。對(duì)有理多項(xiàng)式進(jìn)行運(yùn)算的兩個(gè)函數(shù)是residue和polyder。函數(shù)residue執(zhí)行部分分式展開(kāi)。?num=10*[12];%分子多項(xiàng)式?den=poly([-1;-3;-4]);%分母多項(xiàng)式?[res,poles,k]=residue(num,den)結(jié)果是余數(shù)、極點(diǎn)和部分分式展開(kāi)的常數(shù)項(xiàng)。下面的結(jié)果說(shuō)明了該問(wèn)題:
五.曲線擬合
在大量的應(yīng)用領(lǐng)域中,人們經(jīng)常面臨用一個(gè)解析函數(shù)描述數(shù)據(jù)(通常是測(cè)量值)的任務(wù)。對(duì)這個(gè)問(wèn)題有兩種方法。一種為插值法,數(shù)據(jù)假定是正確的,要求以某種方法描述數(shù)據(jù)點(diǎn)之間所發(fā)生的情況。另一種方法是曲線擬合或回歸,其目的就是在眾多的樣本點(diǎn)中進(jìn)行擬合,找出滿足樣本點(diǎn)分布的多項(xiàng)式。這在分析實(shí)驗(yàn)數(shù)據(jù),將實(shí)驗(yàn)數(shù)據(jù)做解析描述時(shí)非常有用。人們?cè)O(shè)法找出某條光滑曲線,它最佳地?cái)M合數(shù)據(jù),但不必要經(jīng)過(guò)任何數(shù)據(jù)點(diǎn)。exp02_03_1.m曲線擬合涉及回答兩個(gè)基本問(wèn)題:最佳擬合意味著什么?應(yīng)該用什么樣的曲線?可用許多不同的方法定義最佳擬合,并存在無(wú)窮數(shù)目的曲線。當(dāng)最佳擬合被解釋為在數(shù)據(jù)點(diǎn)的最小誤差平方和,且所用的曲線限定為多項(xiàng)式時(shí),那么曲線擬合是相當(dāng)簡(jiǎn)捷的。數(shù)學(xué)上,稱為多項(xiàng)式的最小二乘曲線擬合。對(duì)各數(shù)據(jù)點(diǎn)距離求平方,并把平方距離全加起來(lái),就是誤差平方和。使誤差平方和盡可能小的曲線,即是最佳擬合。最小二乘這個(gè)術(shù)語(yǔ)僅僅是使誤差平方和最小的省略說(shuō)法。在MATLAB中,用函數(shù)polyfit求解最小二乘曲線擬合問(wèn)題。
p=polyfit(x,y,n),其中x和y為樣本點(diǎn)向量,n為所求多項(xiàng)式的階數(shù),p為求出的多項(xiàng)式。例如:exp02_03_2.m
?x=[0.1.2.3.4.5.6.7.8.91];
?y=[-.4471.9783.286.167.087.347.669.569.489.3011.2];
為了用polyfit,須給函數(shù)賦予上面的數(shù)據(jù)和希望最佳擬合數(shù)據(jù)的多項(xiàng)式的階次或度。如果選擇n=1作為階次,得到最簡(jiǎn)單的線性近似。通常稱為線性回歸。,如果選擇n=2作為階次,得到一個(gè)2階多項(xiàng)式。現(xiàn)在,選擇一個(gè)2階多項(xiàng)式。
?n=2;%polynomialorder?p=polyfit(x,y,n)p= -9.810820.1293-0.0317
polyfit
的輸出是一個(gè)多項(xiàng)式系數(shù)的行向量。其解是y=-9.8108x2
+20.1293x-0.0317。為了將曲線擬合解與數(shù)據(jù)點(diǎn)比較,我們把二者都繪成圖。?xi=linspace(0,1,100);%x-axisdataforplotting?z=polyval(p,xi);為了計(jì)算在xi數(shù)據(jù)點(diǎn)的多項(xiàng)式值,調(diào)用MATLAB的函數(shù)polyval。
?plot(x,y,'o',x,y,xi,z,':')
畫出原始數(shù)據(jù)x和y,用'o'標(biāo)出該數(shù)據(jù)點(diǎn),在數(shù)據(jù)點(diǎn)之間,再用直線重畫原始數(shù)據(jù),并用點(diǎn)':'線,畫出多項(xiàng)式數(shù)據(jù)xi和z。?xlabel('x'),ylabel('y=f(x)'),title('SecondOrderCurveFitting')
將圖作標(biāo)志。
多項(xiàng)式階次的選擇是有點(diǎn)任意的。兩點(diǎn)決定一直線或一階多項(xiàng)式。三點(diǎn)決定一個(gè)平方或2階多項(xiàng)式。按此進(jìn)行,n+1數(shù)據(jù)點(diǎn)唯一地確定n階多項(xiàng)式。于是,在上面的情況下,有11個(gè)數(shù)據(jù)點(diǎn),我們可選一個(gè)高達(dá)10階的多項(xiàng)式。然而,高階多項(xiàng)式給出很差的數(shù)值特性,人們不應(yīng)選擇比所需的階次高的多項(xiàng)式。此外,隨著多項(xiàng)式階次的提高,近似變得不夠光滑,因?yàn)檩^高階次多項(xiàng)式在變零前,可多次求導(dǎo)。例如,選一個(gè)10階多項(xiàng)式exp02_03_3.m將這個(gè)解作圖,并把此圖與原始數(shù)據(jù)及2階曲線擬合相比較。可以看到,在10階擬合中,在左邊和右邊的極值處,數(shù)據(jù)點(diǎn)之間出現(xiàn)大的紋波。當(dāng)企圖進(jìn)行高階曲線擬合時(shí),這種紋波現(xiàn)象經(jīng)常發(fā)生。顯然,“越多就越好”的觀念在這里不適用。六.多項(xiàng)式插值多項(xiàng)式插值是指根據(jù)給定的有限個(gè)樣本點(diǎn),產(chǎn)生另外的估計(jì)點(diǎn)以達(dá)到數(shù)據(jù)更為平滑的效果。該技巧在信號(hào)處理與圖像處理上應(yīng)用廣泛。插值定義為對(duì)數(shù)據(jù)點(diǎn)之間函數(shù)的估值方法,這些數(shù)據(jù)點(diǎn)是由某些集合給定。當(dāng)人們不能很快地求出所需中間點(diǎn)的函數(shù)值時(shí),插值是一個(gè)有價(jià)值的工具。例如,當(dāng)數(shù)據(jù)點(diǎn)是某些實(shí)驗(yàn)測(cè)量的結(jié)果或是過(guò)長(zhǎng)的計(jì)算過(guò)程時(shí),就有這種情況。最簡(jiǎn)單插值的例子是MATLAB的作圖。按缺省,MATLAB用直線連接所用的數(shù)據(jù)點(diǎn)以作圖。這個(gè)線性插值猜測(cè)中間值落在數(shù)據(jù)點(diǎn)之間的直線上。當(dāng)然,當(dāng)數(shù)據(jù)點(diǎn)個(gè)數(shù)的增加和它們之間距離的減小時(shí),線性插值就更精確。例如exp02_04_01.m作sine函數(shù)的兩個(gè)圖,一個(gè)在數(shù)據(jù)點(diǎn)之間用60個(gè)點(diǎn),它比另一個(gè)只用6個(gè)點(diǎn)更光滑和更精確。如曲線擬合一樣,插值要作決策。根據(jù)所作的假設(shè),有多種插值。而且,可以在一維以上空間中進(jìn)行插值。即如果有反映兩個(gè)變量函數(shù)的插值,z=f(x,y),那么就可在x之間和在y之間,找出z的中間值進(jìn)行插值。MATLAB在一維函數(shù)interp1和在二維函數(shù)interp2中,提供了許多的插值選擇。
所用指令有一維的interp1、二維的interp2、三維的interp3。這些指令分別有不同的方法(method),設(shè)計(jì)者可以根據(jù)需要選擇適當(dāng)?shù)姆椒ǎ詽M足系統(tǒng)屬性的要求。Helppolyfun可以得到更詳細(xì)的內(nèi)容。(1)一維插值y=interp1(xs,ys,x,’method’)在有限樣本點(diǎn)向量xs與ys中,插值產(chǎn)生向量x和y,所用方法定義在method中,有4種選擇:nearest:執(zhí)行速度最快,輸出結(jié)果為直角轉(zhuǎn)折linear:默認(rèn)值,在樣本點(diǎn)上斜率變化很大spline:最花時(shí)間,但輸出結(jié)果也最平滑cubic:最占內(nèi)存,輸出結(jié)果與spline差不多(2)二維插值y=interp2(xs,ys,zs,xi,yi,’method’)xs,ys,zs是進(jìn)行插值的基準(zhǔn)數(shù)據(jù);xi,yi是待求插補(bǔ)函數(shù)值y的自變量對(duì)組;Method是插值方法名。xs,ys必須滿足:A、同維矩陣;B、矩陣中的元素,無(wú)論行向還是列向,都必須單調(diào)排列;C、xs,ys
是“經(jīng)緯”格式矩陣(即xs陣每一行的元素依次單調(diào)排列,而任何兩行都相同;ys陣每一列的元素依次單調(diào)排列,而任何兩列都相同)xi,yi允許有兩種不同格式:A、xi,yi是“經(jīng)緯”格式矩陣B、xi,yi也可以是向量,但xi,yi均必須取單調(diào)行或列向量。可以借助meshgrid指令,只要給定兩個(gè)自變量的分度向量w,d,通過(guò)[xi,yi]=meshgrid(w,d)即可得到符合要求的經(jīng)緯”格式矩陣xi,yi(3)插值舉例A、一維插值exp02_04_02.m
exp02_04_03.m假設(shè)12小時(shí)內(nèi),一小時(shí)測(cè)量一次室外溫度,數(shù)據(jù)存儲(chǔ)在兩個(gè)MATLAB變量中。B、二維插值二維插值是基于與一維插值同樣的基本思想。二維插值是對(duì)兩變量的函數(shù)z=f(x,y)
進(jìn)行插值。exp02_04_04.m假設(shè)有一組海底深度測(cè)量數(shù)據(jù),要求采用插值方式繪制海底形狀圖。七、關(guān)系和邏輯運(yùn)算
MATLAB的運(yùn)算符有三種類型:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符。它們的處理順序依次為算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符。在前面我們已經(jīng)介紹例算術(shù)運(yùn)算符,這里我們著重介紹后兩種運(yùn)算符。除了傳統(tǒng)的數(shù)學(xué)運(yùn)算,MATLAB支持關(guān)系和邏輯運(yùn)算。這些操作符和函數(shù)的目的是提供求解真/假命題的答案。一個(gè)重要的應(yīng)用是控制基于真/假命題的一系列MATLAB命令(通常在M文件中)的流程,或執(zhí)行次序。作為所有關(guān)系和邏輯表達(dá)式的輸入,MATLAB把任何非零數(shù)值當(dāng)作真,把零當(dāng)作假。所有關(guān)系和邏輯表達(dá)式的輸出,對(duì)于真,輸出為1;對(duì)于假,輸出為零。1關(guān)系操作符MATLAB關(guān)系操作符包括所有常用的比較。<小于<=小于或等于>大于>=大于或等于==等于關(guān)系操作符說(shuō)明~=不等于MATLAB關(guān)系操作符能用來(lái)比較兩個(gè)同樣大小的數(shù)組,或用來(lái)比較一個(gè)數(shù)組和一個(gè)標(biāo)量。在后一種情況,標(biāo)量和數(shù)組中的每一個(gè)元素相比較,結(jié)果與數(shù)組大小一樣。下面給出幾個(gè)示例:
?A=1:9,B=9-A A=123456789 B=876543210 ?tf=A>4 tf=000011111找出A中大于4的元素。0出現(xiàn)在A<=4的地方,1出現(xiàn)在A>4的地方。?tf=(A==B)tf=000000000找出A中的元素等于B中的元素。注意,=和==意味著兩種不同的事:==比較兩個(gè)變量,當(dāng)它們相等時(shí)返回1,當(dāng)它們不相等時(shí)返回0;在另一方面,=被用來(lái)將運(yùn)算的結(jié)果賦給一個(gè)變量。?tf=B-(A>2)tf=87543210-1找出A>2,并從B中減去所求得的結(jié)果向量。這個(gè)例子說(shuō)明,由于邏輯運(yùn)算的輸出是1和0的數(shù)組,它們也能用在數(shù)學(xué)運(yùn)算中。?B=B+(B==0)*epsB=8.00007.00006.00005.00004.00003.00002.00001.00000.0000這是一個(gè)演示,表明如何用特殊的MATLAB數(shù)eps來(lái)代替在一個(gè)數(shù)組中的零元素,eps近似為2.2e-16。這種特殊的表達(dá)式在避免被0除時(shí)是很有用的。例如:?x=(-3:3)/3x=-1.0000-0.6667-0.333300.33330.66671.0000?sin(x)./xWarning:Dividebyzeroans=0.84150.92760.9816NaN0.98160.92760.8415由于第四個(gè)數(shù)據(jù)是0,計(jì)算函數(shù)sin(x)/x時(shí)給出了一個(gè)警告。由于sin(0)/0是沒(méi)定義的,在該處MATLAB結(jié)果返回NaN。用eps替代0以后,再試一次,?x=x+(x==0)*eps;?sin(x)./xans=0.84150.92760.98161.00000.98160.92760.8415
2邏輯操作符邏輯操作符提供了一種組合或否定關(guān)系表達(dá)式。MATLAB邏輯操作符包括:表2&
與|
或邏輯操作符說(shuō)明~
非邏輯操作符用法的一些例子有:?A=1:9;B=9-A;?tf=A>4%找出A大于4tf=000011111?tf=~(A>4)%對(duì)上面的結(jié)果取非,也就是1替換0,0替換1tf=111100000?tf=(A>2)&(A<6)%在A大于2‘與’A小于6處返回1tf=001110000上面的功能易于產(chǎn)生數(shù)組來(lái)表示不連續(xù)信號(hào),或由多段其他信號(hào)所組成的信號(hào)。基本想法是,把數(shù)組中要保持的那些值與1相乘,所有其他值與0相乘。例如(exp02_04_05.m)3關(guān)系與邏輯函數(shù)除了上面的關(guān)系與邏輯操作符,MATLAB提供了大量的其他關(guān)系與邏輯函數(shù),包括:xor(x,y)異或運(yùn)算。x或y非零(真)返回1,x和y都是零(假)或都是非零(真)返回0。any(x)如果在一個(gè)向量x中,任何元素是非零,返回1;矩陣x中的每一列有非零元素,返回1。其他關(guān)系與邏輯函數(shù)all(x)如果在一個(gè)向量x中,所有元素非零,返回1;矩陣x中的每一列所有元素非零,返回1。
4NaNs和空矩陣NaNs和空矩陣([])要求在MATLAB中作特殊處理,特別是用在邏輯或關(guān)系表達(dá)式里。例如,?a=[12naninfnan]a=12NaNInfNaN?b=2*ab=24NaNInfNaN?c=sqrt(a)c=1.00001.4142NaNInfNaN?d=(a==nan)d=00000?f=(a~=nan)f=11111上面的第一和第二計(jì)算式對(duì)NaN輸入給出NaN結(jié)果。然而,最后兩個(gè)計(jì)算式當(dāng)NaN與NaN相比較時(shí),(a==nan)產(chǎn)生全部為0或假的結(jié)果,同時(shí)(a~=nan)產(chǎn)生全部1或真值。于是,單個(gè)NaNs相互不相等。由于NaNs的這種特性,MATLAB有一個(gè)內(nèi)置邏輯函數(shù)尋找NaNs。?g=isnan(a)g=00101這個(gè)函數(shù)用find命令能找出NaNs的下標(biāo)值。例如,?i=find(isnan(a))i=35?a(i)=zeros(size(i))%changesNaNsinatozerosa=120Inf0空矩陣由MATLAB的生成器確定,并有它自己的特性。空矩陣是MATLAB大小為零的變量。?size([]) ans=00當(dāng)沒(méi)有合適的結(jié)果時(shí),MATLAB中許多函數(shù)返回空矩陣。如?x=(1:5)-3%newdatax=-2-1012?y=find(x>2)y=[]在這個(gè)例子里,x沒(méi)有包含大于2的值,所以沒(méi)有返回下標(biāo)。為了測(cè)試空結(jié)果,MATLAB提供了邏輯函數(shù)isempty。?isempty(y)ans=1八、MATLAB數(shù)據(jù)處理1、矩陣分解(1)奇異值分解[U,S,V]=svd(A)例:a=9868可以驗(yàn)證:u*u’=Iv*v’=Iu*s*v’=a求矩陣A的奇異值及分解矩陣,滿足U*S*V’=A,其中U、V矩陣為正交矩陣(U*U’=I),S矩陣為對(duì)角矩陣,它的對(duì)角元素即A矩陣的奇異值。[u,s,v]=svd(a)u=0.7705-0.63750.63750.7705s=15.5765001.5408v=0.6907-0.72310.72310.6907(2)特征值分解[V,D]=eig(A)例:a=9868[v,d]=eig(a)v=0.7787-0.73200.62740.6813d=15.4462001.5538求矩陣A的特征向量V及特征值D,滿足A*V=V*D。其中D的對(duì)角線元素為特征值,V的列為對(duì)應(yīng)的特征向量。如果D=eig(A)則只返回特征值。(3)正交分解[Q,R]=qr(A)例:a=9868[q,r]=qr(a)q=-0.8321-0.5547-0.55470.8321r=-10.8167-11.094002.2188將矩陣A做正交化分解,使得Q*R=A,其中Q為正交矩陣(其范數(shù)為1,指令norm(Q)=1),R為對(duì)角化的上三角矩陣。norm(q)ans=1q*rans=9.00008.00006.00008.0000(4)三角分解[L,U]=lu(A)將A做對(duì)角線分解,使得A=L*U,其中L為下三角矩陣,U為上三角矩陣。例:a=[123;456;789][l,u]=lu(a)l=0.141.0000.570.501.001.0000u=7.008.009.0000.861.71000.002、常微分方程數(shù)值解只包含一個(gè)自變量的微分方程是常微分方程(OrdinaryDifferentialEquations,ODE)。當(dāng)常微分方程式能解析求解時(shí),可用MATLAB的符號(hào)工具箱中的功能找到精確解。在微分方程難以獲得解析解的情況下,可在數(shù)值上求解。根據(jù)微分方程組,可用MATLAB的函數(shù)ode23和ode45求出系統(tǒng)隨時(shí)間變化的運(yùn)動(dòng)情況。[t,x]=ode23(‘f_name’,to,tf,xo,tol)[t,x]=ode45(‘f_name’,to,tf,xo,tol)兩個(gè)函數(shù)都運(yùn)用了基本的龍格-庫(kù)塔(Runge-Kutta)數(shù)值積分法的變形。ode23運(yùn)用一個(gè)組合得2/3階龍格-庫(kù)塔-芬爾格(Runge-Kutta-Fehlerg)算法,而ode45運(yùn)用組合的4/5階龍格-庫(kù)塔-芬爾格算法。(Exp02_04_06.m)采用簡(jiǎn)潔格式的ODE文件和解算指令,研究圍繞地球旋轉(zhuǎn)的衛(wèi)星軌道。構(gòu)成的一階微分方程組為Y=[y1y2y3y4]T=[xyvxvy]T=[xyx'y']T,則
初始條件為Y(0)=[x(0)00vy(0)]T(exp02_04_07.m)計(jì)算衛(wèi)星經(jīng)過(guò)近地點(diǎn)和遠(yuǎn)地點(diǎn)的時(shí)間,并在圖上標(biāo)志。3、常微分方程的符號(hào)解符號(hào)數(shù)學(xué)是以符號(hào)(如a,b,c,d,x,y,z)為對(duì)象的數(shù)學(xué)。區(qū)別于以數(shù)字為對(duì)象的MATLAB基本部分。符號(hào)表達(dá)式是代表數(shù)字、函數(shù)、算子和變量的MATLAB字符串,或字符串?dāng)?shù)組。不要求變量有預(yù)先確定的值,符號(hào)方程式是含有等號(hào)的符號(hào)表達(dá)式。符號(hào)算術(shù)是使用已知的規(guī)則和給定符號(hào)恒等式求解這些符號(hào)方程的實(shí)踐,它與代數(shù)和微積分所學(xué)到的求解方法完全一樣。符號(hào)矩陣是數(shù)組,其元素是符號(hào)表達(dá)式。符號(hào)計(jì)算的特點(diǎn)是:運(yùn)算以推理解析的方式進(jìn)行,因此不受計(jì)算誤差累積問(wèn)題困擾;計(jì)算或給出完全正確的封閉解,或給出任意精度的數(shù)值解;指令調(diào)用簡(jiǎn)單;計(jì)算所需時(shí)間較長(zhǎng)。符號(hào)數(shù)學(xué)式的基本表示方法MATLAB中,如果鍵入f=3*x^2+5*x+2或y=sin(x)系統(tǒng)會(huì)指出???Undefinedfunctionorvariable'x'.變量x無(wú)定義,因?yàn)樗髕必須是一個(gè)數(shù);MATLAB也可以接受形為f=‘3*x^2+5*x+2’,或y=‘sin(x)’的語(yǔ)句,這時(shí)f和y都是一個(gè)字符串,但它沒(méi)有任何含義。因?yàn)樗鼘?duì)字符串個(gè)的內(nèi)容不作任何分析。符號(hào)數(shù)學(xué)工具箱必須要能分析字符串的含義,為此,符號(hào)數(shù)學(xué)式的基本表示方法是:首先要對(duì)符號(hào)變量作出定義。用語(yǔ)句x=sym(‘x’);就定義了x是一個(gè)字符(串)變量,此后鍵入的算式f=3*x^2+5*x+2,或y=sin(x)就具有了符號(hào)函數(shù)的意義,連表明字符串的引號(hào)都可省略,f和y也成為字符(串)變量。如果一個(gè)數(shù)學(xué)符號(hào)表示式中有多個(gè)符號(hào),如z=a*t^2+b*t+c可以用簡(jiǎn)化的多個(gè)符號(hào)變量定義語(yǔ)句放在此表示式的前面。symsa,b,c,t求解常微分方程的符號(hào)法和數(shù)值法有很好的互補(bǔ)作用。MATLAB中,函數(shù)dsovle計(jì)算常微分方程的符號(hào)解,一般格式為S=dsovle(‘D_1',‘D_2',…,‘D_n')dsovle句法與大多數(shù)其它函數(shù)有一些不同,用字母D來(lái)表示求微分,D2,D3等等表示重復(fù)求微分,并以此來(lái)設(shè)定方程。任何D后所跟的字母為因變量。方程=0用符號(hào)表達(dá)式D2y=0來(lái)表示。獨(dú)立變量可以指定或缺省。
例如,一階方程dy/dx=1+y^2的通解為:>>dsolve('Dy=1+y^2')ans= -tan(-x+C1)其中,C1是積分常數(shù)。求解初值y(0)=1的同一個(gè)方程就可產(chǎn)生:>>dsolve('Dy=1+y^2','y(0)=1')y= tan(x+1/4*pi)獨(dú)立變量可用如下形式指定:>>dsolve('Dy=1+y^2','y(0)=1','v')ans= tan(v+1/4*pi)例如,二階方程的通解為:>>y=dsolve('D2y-2Dy-3*y=0')y= -2/3+C1*sinh(3^(1/2)*t)+C2*cosh(3^(1/2)*t)(exp02_04_08.m)求dx/dt=y,dy/dt=-x的解(exp02_04_09.m)畫出微分方程y=xy’-(y’)2的通解和特解的關(guān)系。(exp02_04_10.m)求解兩點(diǎn)邊值問(wèn)題:xy''-3y'=x2,y(1)=0,y(5)=0。(exp02_04_11.m)求解邊值問(wèn)題:df/dx=3f+4g,dg/dx=-4f+3g,f(0)=0,g(0)=1的解。4、數(shù)據(jù)分析(1)求零點(diǎn)fzero():在許多應(yīng)用中,需尋找函數(shù)過(guò)零或等于其它常數(shù)的點(diǎn)。MATLAB提供了該問(wèn)題的數(shù)值解法——函數(shù)fzero。fzero不僅能尋找零點(diǎn),還可以尋找函數(shù)等于任何常數(shù)值的點(diǎn)。例如,為了尋找f(x)=c的點(diǎn),定義函數(shù)g(x)=f(x)-c,然后,在fzero中使用g(x),就會(huì)找出g(x)為零的x值,它發(fā)生在f(x)=c時(shí)。MATLAB中基本格式為:z=fzero(fun,x0)其中fun是函數(shù)名,x0表示零點(diǎn)初始猜測(cè)。當(dāng)x0取標(biāo)量時(shí),指令在它兩側(cè)尋找一個(gè)與之最靠近的零點(diǎn);當(dāng)x0取二元向量[a,b]時(shí)指令將在區(qū)間內(nèi)尋找零點(diǎn)。一般步驟:①利用MATLAB作圖指令獲取初步近似解;②求任意一元函數(shù)零點(diǎn)的精確解;(exp02_04_12.m)求y=2e-xsin(x)的零點(diǎn)。(2)求極值:fminbnd,fminbnds在許多應(yīng)用中,需確定函數(shù)的極值,即最大值(峰值)和最小值(谷值)。數(shù)學(xué)上,可通過(guò)確定函數(shù)導(dǎo)數(shù)(斜率)為零的點(diǎn),解析上求出這些極值點(diǎn)。然而,即使很多容易求導(dǎo)的函數(shù),也常常很難找到導(dǎo)數(shù)為零的點(diǎn)。在這種情況下,必須數(shù)值上尋找函數(shù)的極值點(diǎn)。MATLAB提供了兩個(gè)完成此功能的函數(shù)fminbnd和fminbnds。這兩個(gè)函數(shù)分別尋找一維或n維函數(shù)的最小值。因?yàn)閒(x)的最大值等于-f(x)的最小值,所以,上述fminbnd和fminbnds可用來(lái)求最大值和最小值。把上述圖形倒過(guò)來(lái)看,在這個(gè)狀態(tài)下,峰值變成了谷值,而谷值則變成了峰值。(exp02_04_13.m)求y=2e-xsin(x)的最小值和最大值。(3)頻譜分析(fft):y=FFT(x)在MATLAB中,函數(shù)fft計(jì)算一個(gè)信號(hào)的離散富里葉(Fourier)變換。分析連續(xù)信號(hào)的富里葉變換的問(wèn)題(exp02_04_14.m)解析上,該富里葉變換為:下面的MATLAB語(yǔ)句用FFT估計(jì)Fp(w),并且用圖形把所得到結(jié)果與上面的解析表達(dá)式的結(jié)果Fa(w)進(jìn)行比較。(4)數(shù)據(jù)分析函數(shù)由于MATLAB面向矩陣,所以它很容易對(duì)數(shù)據(jù)集合進(jìn)行統(tǒng)計(jì)分析。按規(guī)定,數(shù)據(jù)集存儲(chǔ)在面向列的矩陣?yán)铩R簿褪牵粋€(gè)矩陣的每一列代表不同的被測(cè)變量,每一行代表各個(gè)樣本或觀察值。例如(exp02_04_15.m)記錄一個(gè)月31天的三城市每日高溫(單位為0C),變量temps中每一行包含了給定一天的高溫;每一列包含不同城市的高溫。在MATLAB里的數(shù)據(jù)分析是按面向列矩陣而進(jìn)行的。不同的變量存儲(chǔ)在各列中,而每行表示每個(gè)變量的不同觀察。MATLAB統(tǒng)計(jì)函數(shù)包括:
corrcoef(x)求相關(guān)系數(shù)cov(x)協(xié)方差矩陣histogram(x)直方圖和棒圖max(x),max(x,y)最大分量mean(x)均值或列的平均值min(x),min(x,y)最小分量prod(x)列元素的積數(shù)據(jù)分析函數(shù)sum(x)各列的元素和(5)數(shù)值積分運(yùn)算MATLAT提供了在有限區(qū)間內(nèi),數(shù)值計(jì)算某函數(shù)下的積分或面積的三種函數(shù):trapz,quad和quadl。trapz通過(guò)計(jì)算若干梯形面積的和來(lái)近似某函數(shù)的積分;quad和quadl是基于數(shù)學(xué)上的正方形概念來(lái)計(jì)算函數(shù)的面積,這些積分函數(shù)的操作方式一樣。為獲得更準(zhǔn)確的結(jié)果,兩個(gè)函數(shù)在所需的區(qū)間都要計(jì)算被積函數(shù)。此外,與簡(jiǎn)單的梯形比較,這兩個(gè)函數(shù)進(jìn)行更高階的近似,而且quadl比quad更精確。這兩個(gè)函數(shù)的調(diào)用格式:q=quad(fun,a,b,tol)q=quadl(fun,a,b,tol)其中,fun為被積函數(shù);a,b分別為積分的上限和下限;tol控制絕對(duì)誤差,省缺取值絕對(duì)精度為10-6。s=dblquad(fun,xmin,xmax,ymin,ymax,tol)(二重積分)ss=triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol)(三重積分)(exp02_04_16.m)求(exp02_04_17.m)計(jì)算和2.3繪圖簡(jiǎn)介MATLAB提供了豐富的繪圖功能helpgraph2d可得到所有畫二維圖形的命令helpgraph3d可得到所有畫三維圖形的命令1、基本的二維圖形繪圖命令plot(x1,y1,option1,x2,y2,option2,…)x1,y1給出的數(shù)據(jù)分別為x,y軸坐標(biāo)值,option1為選項(xiàng)參數(shù),以逐點(diǎn)連折線的方式繪制1個(gè)二維圖形;同時(shí)類似地繪制第二個(gè)二維圖形等等。這是plot命令的完全格式,在實(shí)際應(yīng)用中可以根據(jù)需要進(jìn)行簡(jiǎn)化。如:plot(x,y);plot(x,y,option)選項(xiàng)參數(shù)option定義了圖形曲線的顏色、線型及標(biāo)示符號(hào),它由一對(duì)單引號(hào)括起來(lái)。例exp02_05.m
exp02_06.m2、選擇圖像figure(1);figure(2);…;figure(n)打開(kāi)不同的圖形窗口,以便繪制不同的圖形。3、gridon:在所畫出的圖形坐標(biāo)中加入柵格
gridoff:除去圖形坐標(biāo)中的柵格4、holdon:把當(dāng)前圖形保持在屏幕上不變,同時(shí)允許在這個(gè)坐標(biāo)內(nèi)繪制另外一個(gè)圖形。
holdoff:使新圖覆蓋舊的圖形例exp02_07.mexp02_08.m6、文字標(biāo)示text(x,y,’字符串’)在圖形的指定坐標(biāo)位置(x,y)處,標(biāo)示單引號(hào)括起來(lái)的字符串。gtext(‘字符串’)利用鼠標(biāo)在圖形的某一位置標(biāo)示字符串。5、設(shè)定軸的范圍axis([xminxmaxyminymax])例exp02_09.maxis(‘equal’):將x坐標(biāo)軸和y坐標(biāo)軸的單位刻度大小調(diào)整為一樣。title(‘字符串’)在所畫圖形的最上端顯示說(shuō)明該圖形標(biāo)題的字符串。xlabel(‘字符串’),ylabel(‘字符串’)設(shè)置x,y坐標(biāo)軸的名稱。輸入特殊的文字需要用反斜杠(\)開(kāi)頭。7、legend(‘字符串1’,‘字符串2’,…,‘字符串n’)在屏幕上開(kāi)啟一個(gè)小視窗,然后依據(jù)繪圖命令的先后次序,用對(duì)應(yīng)的字符串區(qū)分圖形上的線。例exp02_10.m9、semilogx:繪制以x軸為對(duì)數(shù)坐標(biāo)(以10為底),y軸為線性坐標(biāo)的半對(duì)數(shù)坐標(biāo)圖形。
semilogy:繪制以y軸為對(duì)數(shù)坐標(biāo)(以10為底),x軸為線性坐標(biāo)的半對(duì)數(shù)坐標(biāo)圖形。例exp02_12.m8、subplot(mnk):分割圖形顯示窗口,m:上下分割數(shù),n:左右分割數(shù),k:子圖編號(hào)例exp02_11.m10、應(yīng)用型繪圖指令:用于數(shù)值統(tǒng)計(jì)分析或離散數(shù)據(jù)處理
bax(x,y);繪制y對(duì)應(yīng)于x的高度條形圖
hist(y,x);繪制y對(duì)應(yīng)于x的個(gè)數(shù)條形圖
stairs(x,y);繪制y對(duì)應(yīng)于x的梯形圖
stem(x,y);繪制y對(duì)應(yīng)于x的散點(diǎn)圖exp02_13.m對(duì)于圖形的屬性編輯同樣可以通過(guò)在圖形窗口上直接進(jìn)行。但圖形窗口關(guān)閉之后編輯結(jié)果不會(huì)保存11、一點(diǎn)補(bǔ)充說(shuō)明一、MATLBA程序的基本設(shè)計(jì)原則1、%后面的內(nèi)容是程序的注解,要善于運(yùn)用注解使程序更具可讀性。2、養(yǎng)成在主程序開(kāi)頭用clear指令清除變量的習(xí)慣,以消除工作空間中其他變量對(duì)程序運(yùn)行的影響。但注意在子程序中不要用clear。
3、參數(shù)值要集中放在程序的開(kāi)始部分,以便維護(hù)。要充分利用MATLAB工具箱提供的指令來(lái)執(zhí)行所要進(jìn)行的運(yùn)算,在語(yǔ)句行之后輸入分號(hào)使其及中間結(jié)果不在屏幕上顯示,以提高執(zhí)行速度。2.4 MATLAB程序設(shè)計(jì)入門4、input指令可以用來(lái)輸入一些臨時(shí)的數(shù)據(jù);而對(duì)于大量參數(shù),則通過(guò)建立一個(gè)存儲(chǔ)參數(shù)的子程序,在主程序中用子程序的名稱來(lái)調(diào)用。5、程序盡量模塊化,也就是采用主程序調(diào)用子程序的方法,將所有子程序合并在一起來(lái)執(zhí)行全部的操作。6、充分利用Debugger來(lái)進(jìn)行程序的調(diào)試(設(shè)置斷點(diǎn)、單步執(zhí)行、連續(xù)執(zhí)行),并利用其他工具箱或圖形用戶界面(GUI)的設(shè)計(jì)技巧,將設(shè)計(jì)結(jié)果集成到一起。7、設(shè)置好MATLAB的工作路徑,以便程序運(yùn)行。8、MATLAB程序的基本組成結(jié)構(gòu)%說(shuō)明清除命令:清除workspace中的變量和圖形(clear,close)定義變量:包括全局變量的聲明及參數(shù)值的設(shè)定逐行執(zhí)行命令:指MATLAB提供的運(yùn)算指令或工具箱………
提供的專用命令控制循環(huán):包含for,ifthen,switch,while等語(yǔ)句逐行執(zhí)行命令………end繪圖命令:將運(yùn)算結(jié)果繪制出來(lái)當(dāng)然更復(fù)雜程序還需要調(diào)用子程序,或與simulink以及其他應(yīng)用程序結(jié)合起來(lái)。進(jìn)入MATLAB的Editor窗口來(lái)編輯程序在編輯環(huán)境中,文字的不同顏色顯示表明文字的不同屬性。 綠色:注解;黑色:程序主體;紅色:屬性值的設(shè)定;藍(lán)色:控制流程。在運(yùn)行程序之前,必須設(shè)置好MATLAB的工作路徑,使得所要運(yùn)行的程序及運(yùn)行程序所需要的其他文件處在當(dāng)前目錄之下,只有這樣,才可以使程序得以正常運(yùn)行。否則可能導(dǎo)致無(wú)法讀取某些系統(tǒng)文件或數(shù)據(jù),從而程序無(wú)法執(zhí)行。通過(guò)cd指令在命令窗口中可以更改、顯示當(dāng)前工作路徑。通過(guò)路徑瀏覽器(pathbrowser)也可以進(jìn)行設(shè)置二、M文件的編輯及MATLAB工作路徑的設(shè)置2、程序文件以.m格式進(jìn)行存取,包含一連串的MATLAB指令和必要的注解。需要在工作空間中創(chuàng)建并獲取變量,也就是說(shuō)處理的數(shù)據(jù)為命令窗口中的數(shù)據(jù),沒(méi)有輸入?yún)?shù),也不會(huì)返回參數(shù)。程
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川外國(guó)語(yǔ)大學(xué)成都學(xué)院《園林PSSU》2023-2024學(xué)年第二學(xué)期期末試卷
- 5層知識(shí)樹(shù)課件
- 幼兒園手指游戲課程研究
- 陽(yáng)光學(xué)院《航天醫(yī)學(xué)工程概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年福建省福州市第十中學(xué)高三3.20聯(lián)考考試英語(yǔ)試題含解析
- 開(kāi)封市龍亭區(qū)2025年小學(xué)六年級(jí)數(shù)學(xué)畢業(yè)檢測(cè)指導(dǎo)卷含解析
- 重慶第二師范學(xué)院《室內(nèi)深化設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東華宇工學(xué)院《機(jī)械設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江省杭州地區(qū)七校聯(lián)考2024-2025學(xué)年高三下學(xué)期第一次統(tǒng)一考試(1月)化學(xué)試題含解析
- 貴州交通職業(yè)技術(shù)學(xué)院《包裝系統(tǒng)設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- JT-T-524-2019公路工程水泥混凝土用纖維
- DL-T5501-2015凍土地區(qū)架空輸電線路基礎(chǔ)設(shè)計(jì)技術(shù)規(guī)程
- DZ∕T 0173-2022 大地電磁測(cè)深法技術(shù)規(guī)程(正式版)
- 代理記賬業(yè)務(wù)規(guī)范-代理記賬業(yè)務(wù)內(nèi)部規(guī)范制度
- 中級(jí)考試外科基礎(chǔ)題
- 初三化學(xué)原子的結(jié)構(gòu)課件1
- 2025年4月自考00262法律文書寫作押題及答案
- 《電力機(jī)車制動(dòng)機(jī)》 課件 項(xiàng)目三 CCB-II制動(dòng)系統(tǒng)
- 醫(yī)療放射事故應(yīng)急處理與輻射泄漏處置培訓(xùn)課件
- 山東省地震安全性評(píng)價(jià)收費(fèi)項(xiàng)目及標(biāo)準(zhǔn)
- TY/T 1103-2023群眾體育賽事活動(dòng)辦賽指南編制內(nèi)容與評(píng)估指引
評(píng)論
0/150
提交評(píng)論