版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理综述在跨学科研究中的应用
- 入院护理记录规范
- 护理用品销售销售客户关系管理技巧培训
- 冠心病患者的冷热疗法与护理
- 北大护理专业:护理伦理困境与决策
- 孕期妊娠期高血压的运动护理
- 中层干部困难职工生活补助申请
- 产程中产妇情绪管理
- 护理文书书写效率提升
- 护理操作技术实践指南
- 贵阳18中英语(华麟中学)小升初数学全真模拟试卷(一)
- 计算机组成原理(广西师范大学)智慧树知到期末考试答案2024年
- 胜任力与胜任力模型构建方法研究
- 品质部人员培训管理规定
- 充电桩运维的安全风险分析
- RB/T 089-2022绿色供应链管理体系要求及使用指南
- 2023年托幼机构幼儿园卫生保健人员考试题库及参考答案
- 水喷砂除锈施工方案
- 《餐饮业老年营养餐要求(过审稿)》
- 鸿门宴原文及译文
- ECOTROL调节阀阀体组件简介
评论
0/150
提交评论