




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
MATLAB語言基礎2.1MATLAB的窗口環境一、MATLAB語言的顯著特點1、具有強大的矩陣運算能力:MatrixLaboratory,使得矩陣運算非常簡單。2、是一種演算式語言MATLAB的基本數據單元是既不需要指定維數,也不需要說明數據類型的矩陣(向量和標量為矩陣的特例),而且數學表達式和運算規則與通常的習慣相同。因此MATLAB語言編程簡單,使用方便。二、MATLAB命令窗口啟動MATLAB命令窗口計算機安裝好MATLAB之后,雙擊MATLAB圖標啟動后,產生默認的MATLAB桌面-MATLABDesktop進入MATLAB之后,會看道到一個視窗MATLABCommandWindow稱為指令視窗,它是用戶鍵入指令的地方,也是MATLAB計算結果顯示之處。而在它的功能選單一共有File,Edit,Options,Windows,Help五個主要功能,每一個之下各又有下一層的功能,我們會在后面相關的地方說明。三.基本功能
1.MATLAB語句形式通過例題計算歸納一些MATLAB最基本的規則和語法結構》變量=表達式; 通過等于符號將表達式的值賦予變量。當鍵入回車鍵時,該語句被執行。語句執行之后,窗口自動顯示出語句執行的結果。如果希望結果不被顯示,則只要在語句之后加上一個分號(;)即可。此時盡管結果沒有顯示,但它依然被賦值并在MATLAB工作空間中分配了內存。2.MATLAB提供基本的算術運算:
加(+)、減(-)、乘(*)、除(/)、冪次方(^),范例為:5+3,5-3,5*3,5/3,5^3
其它在計算常用的功能我們用一個算式來說明。例:要計算面積Area=,半徑r=2,則可鍵入
>>r=2;>>area=pi*r^2;>>area=12.5664求(12+2*(7-4))/32的算術運算結果。(1)用鍵盤在MATLAB指令窗中輸入以下內容>>(12+2*(7-4))/3^2
(2)在上述表達式輸入完成后,按【Enter】鍵,該指令被執行。(3)在指令執行后,MATLAB指令窗中將顯示以下結果。ans=2
我們也可以將上述指令打在同一行,以,或是;分開,例如>>r=2,area=pi*r^2
>>r=2;area=pi*r^2;請注意上述二式的差異,前者有計算值顯示,而后者則無。
另外一個符號注解是由%起頭,也就是說在%之后的任何文字都被視為程式的注解。注解的功能是簡要的說明程式的內容,過多的注解在程式中或許沒有必要,但是我們寫程式時往往用了太少的注解。任何可能產生混淆的地方都應該加注解,適量的注解可在以后想了解程式時能節省一些不必要的時間。例如:>>r=2;%鍵入半徑
>>area=pi*r^2;%計算面積四、變量和數值顯示格式
1、變量(1)變量名稱MATLAB對使用變量名稱的規定:變量名稱的英文大小寫是有區別的(apple,Apple,AppLe,三個變量不同)。變量的長度上限為31個字元。變量名的第一個字必須是一英文字,隨后可以摻雜英文字、數字或是底線。變量中不能包含有標點符號。(2)一些特殊的變量
以下列出MATLAB所定義的特別變量及其意義ans:用于結果的缺省變量名i或j:虛數單位pi:內建的π值
nargin:函數的輸入變量個數eps:MATLAB定義的正的極小值=2.2204e-16nargout:函數的輸出變量個數inf:∞值,無窮大realmin:最小正實數realmax:最大正實數nan:無法定義一個數目,不定量flops:浮點運算數(3)變量操作在命令窗口中,同時存儲著輸入的命令和創建的所有變量值,它們可以在任何需要的時候被調用。如要察看變量a的值,只需要在命令窗口中輸入變量的名稱即可:》a2、數值顯示格式任何MATLAB的語句的執行結果都可以在屏幕上顯示,同時賦值給指定的變量,沒有指定變量時,賦值給一個特殊的變量ans,數據的顯示格式由format命令控制。format只是影響結果的顯示,不影響其計算與存儲;MATLAB總是以雙字長浮點數(雙精度)來執行所有的運算。MATLAB可以將計算結果以不同的精確度的數字格式顯示,我們可以直接在指令視窗鍵入以下的各個數字顯示格式的指令,以π值為例:
>>pians=3.1416>>formatlong>>pians=3.14159265358979>>formatshorte>>pians=3.1416e+000如果結果為整數,則顯示沒有小數;如果結果不是整數,則輸出形式有:五、簡單的數學運算(例exp02_01.m)1、常用的數學運算符+,-,*(乘),/(左除),\(右除),^(冪)在運算式中,MATLAB通常不需要考慮空格;多條命令可以放在一行中,它們之間需要用分號隔開;逗號告訴MATLAB顯示結果,而分號則禁止結果顯示。2、常用數學函數abs,sin,cos,tan,sqrt,exp,imag,real,sign,log,log10,conj,inv等
abs——取x的絕對值,例如:
x=-4;y=abs(x)y=4sin——取x的正弦值cos——取x的余弦值tan——取x的正切值sqrt——對x開平方exp——取x的自然指數log——自然對數ln(x)log10——log10(x)
x+yi或x+yj——復數imag——復數的虛部real——復數的實部angle——復數的相角conj——共扼復數min(x)——向量的最小值max(x)——向量的最大值mean(x)——向量的平均值sum(x)——向量的總和sort(x)——向量的排序median(x)——每個列向量的中位數inv——矩陣的逆六、MATLAB的工作空間1、MATLAB的工作空間包含了一組可以在命令窗口中調整(調用)的參數who:顯示當前工作空間中所有變量的一個簡單列表,包括預設的計算結果的變數名whos:則列出變量的大小、數據格式等詳細信息clear:清除工作空間中所有的變量clear變量名:清除指定的變量clc:清除MATLAB命令窗口中所有的信息
2、保存和載入workspace(1)savefilenamevariables將變量列表variables所列出的變量保存到磁盤文件filename中Variables所表示的變量列表中,不能用逗號,各個不同的變量之間只能用空格來分隔。未列出variables時,表示將當前工作空間中所有變量都保持到磁盤文件中。缺省的磁盤文件擴展名為“.mat”。(2)loadfilenamevariables將以前用save命令保存的變量variables從磁盤文件中調入MATLAB工作空間。用load命令調入的變量,其名稱為用save命令保存時的名稱,取值也一樣。Variables所表示的變量列表中,不能用逗號,各個不同的變量之間只能用空格來分隔。未列出variables時,表示將磁盤文件中的所有變量都調入工作空間。3、退出工作空間quit或exit七、文件管理文件管理的命令,包括列文件名、顯示或刪除文件、顯示或改變當前目錄等。(what、dir、type、delete、cd、which)what:顯示當前目錄下所有與MATLAB相關的文件及它們的路徑。dir:顯示當前目錄下所有的文件which:顯示某個文件的路徑cdpath:由當前目錄進入path目錄cd..:返回上一級目錄cd:顯示當前目錄typefilename:在命令窗口中顯示文件filenamedeletefilename:刪除文件filename八、使用幫助1、help命令,在命令窗口中顯示help線上說明
MATLAB的所有函數都是以邏輯群組方式進行組織的,而MATLAB的目錄結構就是以這些群組方式來編排的。helpmatfun
:矩陣函數-數值線性代數helpgeneral:通用命令helpgraphics:通用圖形函數helpelfun:基本的數學函數helpelmat:基本矩陣和矩陣操作helpdatafun:數據分析和傅立葉變換函數helpops:操作符和特殊字符helppolyfun:多項式和內插函數helplang:語言結構和調試helpstrfun:字符串函數helpcontrol:控制系統工具箱函數2、helpwin:幫助窗口3、helpdesk:幫助桌面,瀏覽器模式4、lookfor命令:返回包含指定關鍵詞的那些項5、demo:打開示例窗口九.其它功能1.用↑↓二個游標鍵可以將所下過的指令叫回來重覆使用。按下↑則前一次指令重新出現,之后再按Enter鍵,即再執行前一次的指令。而↓鍵的功用則是往后執行指令。2.在鍵盤上的幾個鍵如→,←,Delete等,其功能則顯而易見,試用即知無須多加說明。3.鍵入who可以查看所有定義過的變數名稱。而鍵入clear則是去除所有定義過的變數名稱;如果只是要去除x及y
二個變數則可以鍵入clearxy。4.Ctrl-C(即同時按Ctrl及C二個鍵)可以用來中止執行中的MATLAB的工作。5.命令窗口的分頁輸出
moreoff:不允許分頁
moreon:允許分頁
more(n):指定每頁輸出的行數回車鍵前進一行空格鍵顯示下一頁q鍵結束當前顯示MATLAB的運算事實上是以陣列(array)及矩陣(matrix)方式在做運算,而這二者在MATLAB的基本運算性質不同,陣列強調元素對元素的運算,而矩陣則采用線性代數的運算方式。宣告一變數為陣列或是矩陣時,如果是要個別鍵入元素,須用中括號[]將元素置于其中。陣列為一維元素所構成,而矩陣為多維元素所組成,例如:一、簡易陣列2.2MATLAB陣列與矩陣>>x=[123]%一維1x3陣列>>x=[123;456]%二維2x3矩陣,以;區隔各行的元素>>x=[123%二維2x3矩陣,各行的元素分二行鍵入456]假設要計算y=sin(x),x=0,0.2π,0.4π,...,π,即可用陣列方式運算,例如>>x=[00.2*pi0.4*pi0.6*pi0.8*pipi]%注意陣列內也可作運算x=00.62831.25661.88502.51333.1416>>y=sin(x)y=00.58780.95110.95110.58780.0000要找出陣列的某個元素或數個元素,可參考以下的例子>>x(3)%第三個x的元素ans=1.2566>>y(5)%第五個y的元素ans=0.5878>>x(1:5)%列出第一到第五個x的元素ans=00.62831.25661.88502.5133
>>y(3:-1:1)%列出第三到第一個y的元素,3為起始值,1為終止值,-1為增量ans=0.95110.58780>>x(2:2:6)%列出第二到第六個x的元素,2為起始值,6為終止值,2為增量ans=0.62831.88503.1416>>y([4251])%列出y元素,排列元素依序為原來y陣列的4,2,5,1個ans=0.95110.58780.587802.建立陣列
前一節提到陣列產生的方式須個別鍵入其元素,這方法只適用于陣列元素很少時。如果要建立的陣列的元素多達數百個,則須采用以下幾種方式>>x=(0:0.02:1)%以:區隔起始值=0、增量值=0.02、終止值=1>>x=linspace(0,1,51)%利用linspace,以區隔起始值=0終止值=1之間的元素數目=51>>x=(0:0.01:1)*pi%注意陣列外也可作運算
>>a=1:5,b=1:2:9%這二種方式更直接
a=
12345
b=
13579
>>c=[ba]%可利用先前建立的陣列a及陣列b,組成新陣列
c=
1357912345
>>d=[b(1:2:5)101]%由陣列b的三個元素再加上三個元素組成
d=
159101
3.陣列運算以下將陣列的運算符號及其意義列出,除了加減符號外其余的陣列運算符號均須多加.
符號。陣列運算功能+
加-
減.*
乘./
左除.^
次方.‘
轉置
>>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%陣列中的各個元素作二次方ans=
1491625
>>2.^a%以2為底,以陣列中的各個元素為次方ans=
2481632
>>b.^a%以陣列b中的各個元素為底,以陣列a中的各個元素為次方ans=
19125240159049
>>b=a'%陣列b是陣列a的轉置結果b=
1
2
3
4
54.陣列運算的特色
MATLAB在許多運算皆是以陣列為對象,即是以陣列的元素為對象。因此除了“+”,“-”這二個運算外,其余的運算符號(乘、除、次方)皆須加上“.”來強調陣列之間的運算。以下幾個例子可以說明陣列運算的特色。如果a,b各代表二個不同的陣列,a與b之間的運算是元素對元素的方式,例如:a=[a1,a2,…,an]b=[b1,b2,…,bn]a.*b=[a1*b1,a2*b2,…,an*bn]a/b.=[a1/b1,a2/b2,…,an/bn]幾個例子如下:
>>x=1.5;%x是純量>>y=exp(x^2);%exp(x^2)是純量運算>>y1=x/y%x/y是純量運算
>>x=1:0.1:2;%x是陣列>>y=exp(x.^2);%exp(x.^2)是陣列運算>>y1=x./y%x./y是陣列運算須注意純量與陣列運算的差別,例如>>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、轉置:對于實矩陣用(’)符號或(.’)求轉置結果是一樣的;然而對于含復數的矩陣,則(’)將同時對復數進行共軛處理,而(.’)則只是將其排列形式進行轉置。》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二、矩陣的運算+;-;*;\和/;^;.*;.\;./;.^如: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、四則運算與冪運算只有維數相同的矩陣才能進行加減運算。注意只有當兩個矩陣中前一個矩陣的列數和后一個矩陣的行數相同時,才可以進行乘法運算。a\b運算等效于求a*x=b的解;而a/b等效于求x*b=a的解。只有方陣才可以求冪。點運算是兩個維數相同矩陣對應元素之間的運算,在有的教材中也定義為數組運算。3、逆矩陣與行列式計算求逆:inv(A);求行列式:det(A)要求矩陣必須為方陣4、矩陣超越函數在MATLAB中exp、sqrt等命令也可以作用到矩陣上,但這種運算是定義在矩陣的單個元素上的,即分別對矩陣的每一個元素進行計算。超越數學函數可以在函數后加上m而成為矩陣的超越函數,例如:expm,sqrtm。矩陣的超越函數要求運算矩陣為方陣。》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(:):得到一個長列矢量,該矢量的元素按矩陣的列進行排列。矩陣擴展:如果在原矩陣中一個不存在的地址位置上設定一個數(賦值),則該矩陣會自動擴展行列數,并在該位置上添加這個數,而且在其他沒有指定的位置補零。消除子塊:如果將矩陣的子塊賦值為空矩陣[],則相當于消除了相應的矩陣子塊。三、矩陣的操作1、矩陣下標:MATLAB通過確認矩陣下標,可以對矩陣進行插入子塊,提取子塊和重排子塊的操作。例如:2、矩陣的大小[m,n]=size(A,x):返回矩陣的行列數m與n,當x=1,則只返回行數m,當x=2,則只返回列數n。length(A)=max(size(A)):返回行數或列數的最大值。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)
對角矩陣:對角元素向量
V=[a1,a2,…,an]A=diag(V)
隨機矩陣:rand(m,n)產生一個m×n的均勻分布的隨機矩陣》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的對角元素構成向量V。在MATLAB里,多項式由一個行向量表示,它的系數是按降序排列。例如,多項式x4-12x3+0x2+25x+116表示為:p=[1-12025116]注意:必須包括具有零系數的項。除非特別地辨認,MATLAB無法知道哪一項為零。四、多項式處理1.多項式的建立與表示方法2.多項式的運算(1)根找出多項式的根,即多項式為零的值,可能是許多學科共同的問題。MATLAB用函數roots找出一個多項式的根,并提供其它的多項式操作工具。?r=roots(p)r=11.74732.7028-1.2251+1.4672i-1.2251-1.4672i因為在MATLAB中,無論是一個多項式,還是它的根,都是向量,MATLAB按慣例規定,多項式是行向量,根是列向量。給出一個多項式的根,也可以構造相應的多項式。在MATLAB中,命令poly執行這個任務。?pp=poly(r)pp=1.0e+002* 0.0100-0.12000.00000.25001.1600+0.0000i
因為MATLAB無隙地處理復數,當用根重組多項式時,如果一些根有虛部,由于截斷誤差,則poly的結果有一些小的虛部,這是很普通的。消除虛假的虛部,如上所示,只要使用函數real抽取實部。
?pp=real(pp)pp=1.0000-12.00000.000025.0000116.0000(2)乘法函數conv支持多項式乘法(執行兩個數組的卷積)。兩個多項式a(x)=x3+2x2+3x+4和b(x)=x3+4x2+9x+16的乘積:
?a=[1234];b=[14916]; ?c=conv(a,b) c=162050758464結果是c(x)=x6+6x5+20x4+50x3+75x2+84x+64。兩個以上的多項式的乘法需要重復使用conv。
(3)加法對多項式加法,MATLAB不提供一個直接的函數。如果兩個多項式向量大小相同,標準的數組加法有效。把多項式a(x)與上面給出的b(x)相加。
?d=a+b d=261220結果是d(x)=2x3+6x2+12x+20。當兩個多項式階次不同,低階的多項式必須用首零填補,使其與高階多項式有同樣的階次。考慮上面多項式c和d相加:
?e=c+[000d] e=162052819684結果是e(x)=x6+6x5+20x4+52x3+81x2+96x+84。(4)除法在一些特殊情況,一個多項式需要除以另一個多項式。在MATLAB中,這由函數deconv完成。用上面的多項式b和c
?[q,r]=deconv(c,b) q=1234 r=0000000這個結果是b被c除,給出商多項式q和余數r,在現在情況下r是零,因為b和q的乘積恰好是c。5)導數由于一個多項式的導數表示簡單,MATLAB為多項式求導提供了函數polyder。
?g g=162048697244 ?h=polyder(g) h=6308014413872(6)估值(exp02_02.m)根據多項式系數的行向量,可對多項式進行加,減,乘,除和求導,也應該能對它們進行估值。在MATLAB中,由函數polyval來完成。?x=linspace(-1,3);%choose100datapointsbetween-1and3.?p=[14-7-10];%usespolynomialp(x)=x3+4x2-7x-10?v=polyval(p,x);計算x值上的p(x),把結果存在v里。然后用函數plot繪出結果。?plot(x,v),title('x^3+4x^2-7x-10'),xlabel('x')(7)有理多項式在許多應用中,例如傅里葉(Fourier),拉普拉斯(Laplace)和Z變換,出現有理多項式或兩個多項式之比。在MATLAB中,有理多項式由它們的分子多項式和分母多項式表示。對有理多項式進行運算的兩個函數是residue和polyder。函數residue執行部分分式展開。?num=10*[12];%分子多項式?den=poly([-1;-3;-4]);%分母多項式?[res,poles,k]=residue(num,den)結果是余數、極點和部分分式展開的常數項。下面的結果說明了該問題:
五.曲線擬合
在大量的應用領域中,人們經常面臨用一個解析函數描述數據(通常是測量值)的任務。對這個問題有兩種方法。一種為插值法,數據假定是正確的,要求以某種方法描述數據點之間所發生的情況。另一種方法是曲線擬合或回歸,其目的就是在眾多的樣本點中進行擬合,找出滿足樣本點分布的多項式。這在分析實驗數據,將實驗數據做解析描述時非常有用。人們設法找出某條光滑曲線,它最佳地擬合數據,但不必要經過任何數據點。exp02_03_1.m曲線擬合涉及回答兩個基本問題:最佳擬合意味著什么?應該用什么樣的曲線?可用許多不同的方法定義最佳擬合,并存在無窮數目的曲線。當最佳擬合被解釋為在數據點的最小誤差平方和,且所用的曲線限定為多項式時,那么曲線擬合是相當簡捷的。數學上,稱為多項式的最小二乘曲線擬合。對各數據點距離求平方,并把平方距離全加起來,就是誤差平方和。使誤差平方和盡可能小的曲線,即是最佳擬合。最小二乘這個術語僅僅是使誤差平方和最小的省略說法。在MATLAB中,用函數polyfit求解最小二乘曲線擬合問題。
p=polyfit(x,y,n),其中x和y為樣本點向量,n為所求多項式的階數,p為求出的多項式。例如: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,須給函數賦予上面的數據和希望最佳擬合數據的多項式的階次或度。如果選擇n=1作為階次,得到最簡單的線性近似。通常稱為線性回歸。,如果選擇n=2作為階次,得到一個2階多項式。現在,選擇一個2階多項式。
?n=2;%polynomialorder?p=polyfit(x,y,n)p= -9.810820.1293-0.0317
polyfit
的輸出是一個多項式系數的行向量。其解是y=-9.8108x2
+20.1293x-0.0317。為了將曲線擬合解與數據點比較,我們把二者都繪成圖。?xi=linspace(0,1,100);%x-axisdataforplotting?z=polyval(p,xi);為了計算在xi數據點的多項式值,調用MATLAB的函數polyval。
?plot(x,y,'o',x,y,xi,z,':')
畫出原始數據x和y,用'o'標出該數據點,在數據點之間,再用直線重畫原始數據,并用點':'線,畫出多項式數據xi和z。?xlabel('x'),ylabel('y=f(x)'),title('SecondOrderCurveFitting')
將圖作標志。
多項式階次的選擇是有點任意的。兩點決定一直線或一階多項式。三點決定一個平方或2階多項式。按此進行,n+1數據點唯一地確定n階多項式。于是,在上面的情況下,有11個數據點,我們可選一個高達10階的多項式。然而,高階多項式給出很差的數值特性,人們不應選擇比所需的階次高的多項式。此外,隨著多項式階次的提高,近似變得不夠光滑,因為較高階次多項式在變零前,可多次求導。例如,選一個10階多項式exp02_03_3.m將這個解作圖,并把此圖與原始數據及2階曲線擬合相比較。可以看到,在10階擬合中,在左邊和右邊的極值處,數據點之間出現大的紋波。當企圖進行高階曲線擬合時,這種紋波現象經常發生。顯然,“越多就越好”的觀念在這里不適用。六.多項式插值多項式插值是指根據給定的有限個樣本點,產生另外的估計點以達到數據更為平滑的效果。該技巧在信號處理與圖像處理上應用廣泛。插值定義為對數據點之間函數的估值方法,這些數據點是由某些集合給定。當人們不能很快地求出所需中間點的函數值時,插值是一個有價值的工具。例如,當數據點是某些實驗測量的結果或是過長的計算過程時,就有這種情況。最簡單插值的例子是MATLAB的作圖。按缺省,MATLAB用直線連接所用的數據點以作圖。這個線性插值猜測中間值落在數據點之間的直線上。當然,當數據點個數的增加和它們之間距離的減小時,線性插值就更精確。例如exp02_04_01.m作sine函數的兩個圖,一個在數據點之間用60個點,它比另一個只用6個點更光滑和更精確。如曲線擬合一樣,插值要作決策。根據所作的假設,有多種插值。而且,可以在一維以上空間中進行插值。即如果有反映兩個變量函數的插值,z=f(x,y),那么就可在x之間和在y之間,找出z的中間值進行插值。MATLAB在一維函數interp1和在二維函數interp2中,提供了許多的插值選擇。
所用指令有一維的interp1、二維的interp2、三維的interp3。這些指令分別有不同的方法(method),設計者可以根據需要選擇適當的方法,以滿足系統屬性的要求。Helppolyfun可以得到更詳細的內容。(1)一維插值y=interp1(xs,ys,x,’method’)在有限樣本點向量xs與ys中,插值產生向量x和y,所用方法定義在method中,有4種選擇:nearest:執行速度最快,輸出結果為直角轉折linear:默認值,在樣本點上斜率變化很大spline:最花時間,但輸出結果也最平滑cubic:最占內存,輸出結果與spline差不多(2)二維插值y=interp2(xs,ys,zs,xi,yi,’method’)xs,ys,zs是進行插值的基準數據;xi,yi是待求插補函數值y的自變量對組;Method是插值方法名。xs,ys必須滿足:A、同維矩陣;B、矩陣中的元素,無論行向還是列向,都必須單調排列;C、xs,ys
是“經緯”格式矩陣(即xs陣每一行的元素依次單調排列,而任何兩行都相同;ys陣每一列的元素依次單調排列,而任何兩列都相同)xi,yi允許有兩種不同格式:A、xi,yi是“經緯”格式矩陣B、xi,yi也可以是向量,但xi,yi均必須取單調行或列向量。可以借助meshgrid指令,只要給定兩個自變量的分度向量w,d,通過[xi,yi]=meshgrid(w,d)即可得到符合要求的經緯”格式矩陣xi,yi(3)插值舉例A、一維插值exp02_04_02.m
exp02_04_03.m假設12小時內,一小時測量一次室外溫度,數據存儲在兩個MATLAB變量中。B、二維插值二維插值是基于與一維插值同樣的基本思想。二維插值是對兩變量的函數z=f(x,y)
進行插值。exp02_04_04.m假設有一組海底深度測量數據,要求采用插值方式繪制海底形狀圖。七、關系和邏輯運算
MATLAB的運算符有三種類型:算術運算符、關系運算符、邏輯運算符。它們的處理順序依次為算術運算符、關系運算符、邏輯運算符。在前面我們已經介紹例算術運算符,這里我們著重介紹后兩種運算符。除了傳統的數學運算,MATLAB支持關系和邏輯運算。這些操作符和函數的目的是提供求解真/假命題的答案。一個重要的應用是控制基于真/假命題的一系列MATLAB命令(通常在M文件中)的流程,或執行次序。作為所有關系和邏輯表達式的輸入,MATLAB把任何非零數值當作真,把零當作假。所有關系和邏輯表達式的輸出,對于真,輸出為1;對于假,輸出為零。1關系操作符MATLAB關系操作符包括所有常用的比較。<小于<=小于或等于>大于>=大于或等于==等于關系操作符說明~=不等于MATLAB關系操作符能用來比較兩個同樣大小的數組,或用來比較一個數組和一個標量。在后一種情況,標量和數組中的每一個元素相比較,結果與數組大小一樣。下面給出幾個示例:
?A=1:9,B=9-A A=123456789 B=876543210 ?tf=A>4 tf=000011111找出A中大于4的元素。0出現在A<=4的地方,1出現在A>4的地方。?tf=(A==B)tf=000000000找出A中的元素等于B中的元素。注意,=和==意味著兩種不同的事:==比較兩個變量,當它們相等時返回1,當它們不相等時返回0;在另一方面,=被用來將運算的結果賦給一個變量。?tf=B-(A>2)tf=87543210-1找出A>2,并從B中減去所求得的結果向量。這個例子說明,由于邏輯運算的輸出是1和0的數組,它們也能用在數學運算中。?B=B+(B==0)*epsB=8.00007.00006.00005.00004.00003.00002.00001.00000.0000這是一個演示,表明如何用特殊的MATLAB數eps來代替在一個數組中的零元素,eps近似為2.2e-16。這種特殊的表達式在避免被0除時是很有用的。例如:?x=(-3:3)/3x=-1.0000-0.6667-0.333300.33330.66671.0000?sin(x)./xWarning:Dividebyzeroans=0.84150.92760.9816NaN0.98160.92760.8415由于第四個數據是0,計算函數sin(x)/x時給出了一個警告。由于sin(0)/0是沒定義的,在該處MATLAB結果返回NaN。用eps替代0以后,再試一次,?x=x+(x==0)*eps;?sin(x)./xans=0.84150.92760.98161.00000.98160.92760.8415
2邏輯操作符邏輯操作符提供了一種組合或否定關系表達式。MATLAB邏輯操作符包括:表2&
與|
或邏輯操作符說明~
非邏輯操作符用法的一些例子有:?A=1:9;B=9-A;?tf=A>4%找出A大于4tf=000011111?tf=~(A>4)%對上面的結果取非,也就是1替換0,0替換1tf=111100000?tf=(A>2)&(A<6)%在A大于2‘與’A小于6處返回1tf=001110000上面的功能易于產生數組來表示不連續信號,或由多段其他信號所組成的信號。基本想法是,把數組中要保持的那些值與1相乘,所有其他值與0相乘。例如(exp02_04_05.m)3關系與邏輯函數除了上面的關系與邏輯操作符,MATLAB提供了大量的其他關系與邏輯函數,包括:xor(x,y)異或運算。x或y非零(真)返回1,x和y都是零(假)或都是非零(真)返回0。any(x)如果在一個向量x中,任何元素是非零,返回1;矩陣x中的每一列有非零元素,返回1。其他關系與邏輯函數all(x)如果在一個向量x中,所有元素非零,返回1;矩陣x中的每一列所有元素非零,返回1。
4NaNs和空矩陣NaNs和空矩陣([])要求在MATLAB中作特殊處理,特別是用在邏輯或關系表達式里。例如,?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上面的第一和第二計算式對NaN輸入給出NaN結果。然而,最后兩個計算式當NaN與NaN相比較時,(a==nan)產生全部為0或假的結果,同時(a~=nan)產生全部1或真值。于是,單個NaNs相互不相等。由于NaNs的這種特性,MATLAB有一個內置邏輯函數尋找NaNs。?g=isnan(a)g=00101這個函數用find命令能找出NaNs的下標值。例如,?i=find(isnan(a))i=35?a(i)=zeros(size(i))%changesNaNsinatozerosa=120Inf0空矩陣由MATLAB的生成器確定,并有它自己的特性。空矩陣是MATLAB大小為零的變量。?size([]) ans=00當沒有合適的結果時,MATLAB中許多函數返回空矩陣。如?x=(1:5)-3%newdatax=-2-1012?y=find(x>2)y=[]在這個例子里,x沒有包含大于2的值,所以沒有返回下標。為了測試空結果,MATLAB提供了邏輯函數isempty。?isempty(y)ans=1八、MATLAB數據處理1、矩陣分解(1)奇異值分解[U,S,V]=svd(A)例:a=9868可以驗證:u*u’=Iv*v’=Iu*s*v’=a求矩陣A的奇異值及分解矩陣,滿足U*S*V’=A,其中U、V矩陣為正交矩陣(U*U’=I),S矩陣為對角矩陣,它的對角元素即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的對角線元素為特征值,V的列為對應的特征向量。如果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為正交矩陣(其范數為1,指令norm(Q)=1),R為對角化的上三角矩陣。norm(q)ans=1q*rans=9.00008.00006.00008.0000(4)三角分解[L,U]=lu(A)將A做對角線分解,使得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、常微分方程數值解只包含一個自變量的微分方程是常微分方程(OrdinaryDifferentialEquations,ODE)。當常微分方程式能解析求解時,可用MATLAB的符號工具箱中的功能找到精確解。在微分方程難以獲得解析解的情況下,可在數值上求解。根據微分方程組,可用MATLAB的函數ode23和ode45求出系統隨時間變化的運動情況。[t,x]=ode23(‘f_name’,to,tf,xo,tol)[t,x]=ode45(‘f_name’,to,tf,xo,tol)兩個函數都運用了基本的龍格-庫塔(Runge-Kutta)數值積分法的變形。ode23運用一個組合得2/3階龍格-庫塔-芬爾格(Runge-Kutta-Fehlerg)算法,而ode45運用組合的4/5階龍格-庫塔-芬爾格算法。(Exp02_04_06.m)采用簡潔格式的ODE文件和解算指令,研究圍繞地球旋轉的衛星軌道。構成的一階微分方程組為Y=[y1y2y3y4]T=[xyvxvy]T=[xyx'y']T,則
初始條件為Y(0)=[x(0)00vy(0)]T(exp02_04_07.m)計算衛星經過近地點和遠地點的時間,并在圖上標志。3、常微分方程的符號解符號數學是以符號(如a,b,c,d,x,y,z)為對象的數學。區別于以數字為對象的MATLAB基本部分。符號表達式是代表數字、函數、算子和變量的MATLAB字符串,或字符串數組。不要求變量有預先確定的值,符號方程式是含有等號的符號表達式。符號算術是使用已知的規則和給定符號恒等式求解這些符號方程的實踐,它與代數和微積分所學到的求解方法完全一樣。符號矩陣是數組,其元素是符號表達式。符號計算的特點是:運算以推理解析的方式進行,因此不受計算誤差累積問題困擾;計算或給出完全正確的封閉解,或給出任意精度的數值解;指令調用簡單;計算所需時間較長。符號數學式的基本表示方法MATLAB中,如果鍵入f=3*x^2+5*x+2或y=sin(x)系統會指出???Undefinedfunctionorvariable'x'.變量x無定義,因為它要求x必須是一個數;MATLAB也可以接受形為f=‘3*x^2+5*x+2’,或y=‘sin(x)’的語句,這時f和y都是一個字符串,但它沒有任何含義。因為它對字符串個的內容不作任何分析。符號數學工具箱必須要能分析字符串的含義,為此,符號數學式的基本表示方法是:首先要對符號變量作出定義。用語句x=sym(‘x’);就定義了x是一個字符(串)變量,此后鍵入的算式f=3*x^2+5*x+2,或y=sin(x)就具有了符號函數的意義,連表明字符串的引號都可省略,f和y也成為字符(串)變量。如果一個數學符號表示式中有多個符號,如z=a*t^2+b*t+c可以用簡化的多個符號變量定義語句放在此表示式的前面。symsa,b,c,t求解常微分方程的符號法和數值法有很好的互補作用。MATLAB中,函數dsovle計算常微分方程的符號解,一般格式為S=dsovle(‘D_1',‘D_2',…,‘D_n')dsovle句法與大多數其它函數有一些不同,用字母D來表示求微分,D2,D3等等表示重復求微分,并以此來設定方程。任何D后所跟的字母為因變量。方程=0用符號表達式D2y=0來表示。獨立變量可以指定或缺省。
例如,一階方程dy/dx=1+y^2的通解為:>>dsolve('Dy=1+y^2')ans= -tan(-x+C1)其中,C1是積分常數。求解初值y(0)=1的同一個方程就可產生:>>dsolve('Dy=1+y^2','y(0)=1')y= tan(x+1/4*pi)獨立變量可用如下形式指定:>>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的通解和特解的關系。(exp02_04_10.m)求解兩點邊值問題:xy''-3y'=x2,y(1)=0,y(5)=0。(exp02_04_11.m)求解邊值問題:df/dx=3f+4g,dg/dx=-4f+3g,f(0)=0,g(0)=1的解。4、數據分析(1)求零點fzero():在許多應用中,需尋找函數過零或等于其它常數的點。MATLAB提供了該問題的數值解法——函數fzero。fzero不僅能尋找零點,還可以尋找函數等于任何常數值的點。例如,為了尋找f(x)=c的點,定義函數g(x)=f(x)-c,然后,在fzero中使用g(x),就會找出g(x)為零的x值,它發生在f(x)=c時。MATLAB中基本格式為:z=fzero(fun,x0)其中fun是函數名,x0表示零點初始猜測。當x0取標量時,指令在它兩側尋找一個與之最靠近的零點;當x0取二元向量[a,b]時指令將在區間內尋找零點。一般步驟:①利用MATLAB作圖指令獲取初步近似解;②求任意一元函數零點的精確解;(exp02_04_12.m)求y=2e-xsin(x)的零點。(2)求極值:fminbnd,fminbnds在許多應用中,需確定函數的極值,即最大值(峰值)和最小值(谷值)。數學上,可通過確定函數導數(斜率)為零的點,解析上求出這些極值點。然而,即使很多容易求導的函數,也常常很難找到導數為零的點。在這種情況下,必須數值上尋找函數的極值點。MATLAB提供了兩個完成此功能的函數fminbnd和fminbnds。這兩個函數分別尋找一維或n維函數的最小值。因為f(x)的最大值等于-f(x)的最小值,所以,上述fminbnd和fminbnds可用來求最大值和最小值。把上述圖形倒過來看,在這個狀態下,峰值變成了谷值,而谷值則變成了峰值。(exp02_04_13.m)求y=2e-xsin(x)的最小值和最大值。(3)頻譜分析(fft):y=FFT(x)在MATLAB中,函數fft計算一個信號的離散富里葉(Fourier)變換。分析連續信號的富里葉變換的問題(exp02_04_14.m)解析上,該富里葉變換為:下面的MATLAB語句用FFT估計Fp(w),并且用圖形把所得到結果與上面的解析表達式的結果Fa(w)進行比較。(4)數據分析函數由于MATLAB面向矩陣,所以它很容易對數據集合進行統計分析。按規定,數據集存儲在面向列的矩陣里。也就是,一個矩陣的每一列代表不同的被測變量,每一行代表各個樣本或觀察值。例如(exp02_04_15.m)記錄一個月31天的三城市每日高溫(單位為0C),變量temps中每一行包含了給定一天的高溫;每一列包含不同城市的高溫。在MATLAB里的數據分析是按面向列矩陣而進行的。不同的變量存儲在各列中,而每行表示每個變量的不同觀察。MATLAB統計函數包括:
corrcoef(x)求相關系數cov(x)協方差矩陣histogram(x)直方圖和棒圖max(x),max(x,y)最大分量mean(x)均值或列的平均值min(x),min(x,y)最小分量prod(x)列元素的積數據分析函數sum(x)各列的元素和(5)數值積分運算MATLAT提供了在有限區間內,數值計算某函數下的積分或面積的三種函數:trapz,quad和quadl。trapz通過計算若干梯形面積的和來近似某函數的積分;quad和quadl是基于數學上的正方形概念來計算函數的面積,這些積分函數的操作方式一樣。為獲得更準確的結果,兩個函數在所需的區間都要計算被積函數。此外,與簡單的梯形比較,這兩個函數進行更高階的近似,而且quadl比quad更精確。這兩個函數的調用格式:q=quad(fun,a,b,tol)q=quadl(fun,a,b,tol)其中,fun為被積函數;a,b分別為積分的上限和下限;tol控制絕對誤差,省缺取值絕對精度為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)計算和2.3繪圖簡介MATLAB提供了豐富的繪圖功能helpgraph2d可得到所有畫二維圖形的命令helpgraph3d可得到所有畫三維圖形的命令1、基本的二維圖形繪圖命令plot(x1,y1,option1,x2,y2,option2,…)x1,y1給出的數據分別為x,y軸坐標值,option1為選項參數,以逐點連折線的方式繪制1個二維圖形;同時類似地繪制第二個二維圖形等等。這是plot命令的完全格式,在實際應用中可以根據需要進行簡化。如:plot(x,y);plot(x,y,option)選項參數option定義了圖形曲線的顏色、線型及標示符號,它由一對單引號括起來。例exp02_05.m
exp02_06.m2、選擇圖像figure(1);figure(2);…;figure(n)打開不同的圖形窗口,以便繪制不同的圖形。3、gridon:在所畫出的圖形坐標中加入柵格
gridoff:除去圖形坐標中的柵格4、holdon:把當前圖形保持在屏幕上不變,同時允許在這個坐標內繪制另外一個圖形。
holdoff:使新圖覆蓋舊的圖形例exp02_07.mexp02_08.m6、文字標示text(x,y,’字符串’)在圖形的指定坐標位置(x,y)處,標示單引號括起來的字符串。gtext(‘字符串’)利用鼠標在圖形的某一位置標示字符串。5、設定軸的范圍axis([xminxmaxyminymax])例exp02_09.maxis(‘equal’):將x坐標軸和y坐標軸的單位刻度大小調整為一樣。title(‘字符串’)在所畫圖形的最上端顯示說明該圖形標題的字符串。xlabel(‘字符串’),ylabel(‘字符串’)設置x,y坐標軸的名稱。輸入特殊的文字需要用反斜杠(\)開頭。7、legend(‘字符串1’,‘字符串2’,…,‘字符串n’)在屏幕上開啟一個小視窗,然后依據繪圖命令的先后次序,用對應的字符串區分圖形上的線。例exp02_10.m9、semilogx:繪制以x軸為對數坐標(以10為底),y軸為線性坐標的半對數坐標圖形。
semilogy:繪制以y軸為對數坐標(以10為底),x軸為線性坐標的半對數坐標圖形。例exp02_12.m8、subplot(mnk):分割圖形顯示窗口,m:上下分割數,n:左右分割數,k:子圖編號例exp02_11.m10、應用型繪圖指令:用于數值統計分析或離散數據處理
bax(x,y);繪制y對應于x的高度條形圖
hist(y,x);繪制y對應于x的個數條形圖
stairs(x,y);繪制y對應于x的梯形圖
stem(x,y);繪制y對應于x的散點圖exp02_13.m對于圖形的屬性編輯同樣可以通過在圖形窗口上直接進行。但圖形窗口關閉之后編輯結果不會保存11、一點補充說明一、MATLBA程序的基本設計原則1、%后面的內容是程序的注解,要善于運用注解使程序更具可讀性。2、養成在主程序開頭用clear指令清除變量的習慣,以消除工作空間中其他變量對程序運行的影響。但注意在子程序中不要用clear。
3、參數值要集中放在程序的開始部分,以便維護。要充分利用MATLAB工具箱提供的指令來執行所要進行的運算,在語句行之后輸入分號使其及中間結果不在屏幕上顯示,以提高執行速度。2.4 MATLAB程序設計入門4、input指令可以用來輸入一些臨時的數據;而對于大量參數,則通過建立一個存儲參數的子程序,在主程序中用子程序的名稱來調用。5、程序盡量模塊化,也就是采用主程序調用子程序的方法,將所有子程序合并在一起來執行全部的操作。6、充分利用Debugger來進行程序的調試(設置斷點、單步執行、連續執行),并利用其他工具箱或圖形用戶界面(GUI)的設計技巧,將設計結果集成到一起。7、設置好MATLAB的工作路徑,以便程序運行。8、MATLAB程序的基本組成結構%說明清除命令:清除workspace中的變量和圖形(clear,close)定義變量:包括全局變量的聲明及參數值的設定逐行執行命令:指MATLAB提供的運算指令或工具箱………
提供的專用命令控制循環:包含for,ifthen,switch,while等語句逐行執行命令………end繪圖命令:將運算結果繪制出來當然更復雜程序還需要調用子程序,或與simulink以及其他應用程序結合起來。進入MATLAB的Editor窗口來編輯程序在編輯環境中,文字的不同顏色顯示表明文字的不同屬性。 綠色:注解;黑色:程序主體;紅色:屬性值的設定;藍色:控制流程。在運行程序之前,必須設置好MATLAB的工作路徑,使得所要運行的程序及運行程序所需要的其他文件處在當前目錄之下,只有這樣,才可以使程序得以正常運行。否則可能導致無法讀取某些系統文件或數據,從而程序無法執行。通過cd指令在命令窗口中可以更改、顯示當前工作路徑。通過路徑瀏覽器(pathbrowser)也可以進行設置二、M文件的編輯及MATLAB工作路徑的設置2、程序文件以.m格式進行存取,包含一連串的MATLAB指令和必要的注解。需要在工作空間中創建并獲取變量,也就是說處理的數據為命令窗口中的數據,沒有輸入參數,也不會返回參數。程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025西安健康工程職業學院輔導員考試試題及答案
- 2025煙臺汽車工程職業學院輔導員考試試題及答案
- 2025紅河職業技術學院輔導員考試試題及答案
- 2025福建林業職業技術學院輔導員考試試題及答案
- 趣味科學課課件
- T/ZHCA 002-2018化妝品控油功效測試方法
- 貴州黔東南州劍河縣順誠公司招聘筆試題庫2025
- 西藏自治區煙草專賣局(公司)招聘筆試題庫2025
- 山東濰坊濱海聯合水務有限公司招聘筆試題庫2025
- 2025年職業衛生與環境保護的考試試卷及答案
- 2025年軍隊文職統一考試《專業科目》會計學試卷真題答案解析
- 2025年鐵路集裝箱市場前景分析
- 2024-2025統編版一年級下冊道德與法治期末考試卷及參考答案
- 2024-2025中國商旅管理白皮書
- 小學心理健康家長會課件
- 2025年公共安全管理考試試題及答案
- 淮安城市介紹旅游攻略家鄉介紹
- 2025年安全月主要責任人講安全課件三:安全月主題宣講課件
- 光伏施工安全培訓
- 國企崗位筆試題目及答案
- 餐廳廚房5S管理
評論
0/150
提交評論