




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第一節 MATLAB 中的矩陣的輸入§1 直接輸入一、直接在工作窗中輸入:A=2, 4, 6, 8;1 3 5 7; 0 0 0 0;1,0,1,0 其意義是定義了矩陣 二、如果矩陣中的元素是等步長的,可以用下面的方法 A=1:0.2:2;1:6;2:2:12A=1:5' “'”號在這里表示為轉置,而 1:5 中間少了一個循環步長,此時將步長自動取為 1 。§2 增刪改設已經定義 A=1 2 3 4 5;10 8 6 4 2; B=0 1;1 0; C=1 2;2 4,即已定義A= B= C= 1 2 3 4 5 0 1 1 210 8 6 4 2 1 0
2、2 4則命令:A=A(:,1:4);C,B,0 2 0 4' 將 A 定義成:A= 而 A(:,3)=; 將刪除 A 的第三列 ,得 1 2 3 4 0 A= 1 2 4 010 8 6 4 2 10 8 4 21 2 0 1 0 1 2 1 02 4 1 0 4 2 4 0 4§3 命令生成使用 MATLAB 命令生成矩陣一般使用下面的命令 命令 linspace,它有兩個格式:a1=linspace(1,100) %生成一個從1到100的有100 個元素的向量a2=linspace(0,1)%仍然是有 100 個元素但是是從 0 到 1 的向量 a3=linspace(0
3、,-1) %請與上一個向量進行比較上面是第一種格式 linspace(a,b),它是將 a 到 b 等分成 100份形成的向量。第二種格式 linspace(a,b,n) 中的 n 為一個正整數,表示是從 a 到 b 等分成 n 份后形成的向量。例如a4=linspace(1,100,11) %從 1 到 100 但只形成11 個元素的向量 a5=linspace(1,100,10) %自己體會這個命令作用 a6=linspace(0,1,11)' %加上了“'”表示轉置a7=linspace(0,-1,10) %自己體會這個命令作用2 命令 ones,zeros 分別形成元素
4、全為 1或全為零的矩陣它也有兩種格式。請觀察它們的作用: ones(6,3) %生成 6×3 階元素全為 1 的矩陣 ones(5) %生成 5 階元素全為 1 的方陣 zeros(3,6) %生成 3×6 階元素全為零的矩陣 zeros(4) %生成四階元素全為零的方陣 3 命令 diag 生成對角陣及從矩陣的主對角線生成向量,例如:diag(1 3 5 7) %生成了以 1 3 5 7 為主對角線的方陣: ans= 1 0 0 0 0 3 0 0 0 0 5 00 0 0 7相反如果先定義了一個三階方陣:A=1 2 3;4 5 6;7 8 9顯示: A= 1 2 3 4
5、 5 6 7 8 9則命令 a8=diag(A) 將用 A 的主對角線生成新的列向量:a8= 1 5 9命令 eye(n) 生成 n 階單位方陣,即主對角線上元素為 1,其余元素為零的方陣。例如鍵入:A=eye(5) 將得到:A= 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 00 0 0 0 1 第二節 MATLAB 文件處理 §1 文件編輯如果要在 MATLAB 的工作窗定義矩陣,則用鼠標點擊屏幕左上方的 File 選擇項,再從中選擇 New 中的M-file 項并且用鼠標點擊它,就打開了 MATLAB 文件編輯窗并且可以在此窗中定義 MATLAB
6、矩陣了(注意對于已有的文件,可以選擇 open 來打開它,然后對其進行修改)。在 MATLAB 文件編輯窗中定義的矩陣與工作窗中定義的方法是完全一樣。并且可以在MATLAB 文件編輯窗的菜單中使用菜單命令直接運行。 可以在MATLAB中使用菜單中的“File”中的“Set path”將當前工作文件夾定義在你正在工作的文件夾。§2 MATLAB工作窗中變量值的保存與調用MATLAB 工作窗中的變量在退出 MATLAB 工作狀態后值不能保存,如果需要保存,可以使用命令 save 將其存儲到磁盤上,命令格式有兩種:第一種是用二進制格式來存儲。例如先定義三個矩陣:A1=0:3;2*ones(
7、4);4:1:1 ; A2=1 3 2 4;A3=zeros(3,1);生成下列矩陣與向量:鍵入:save file1 A1 A2 A3 %用二進制格式以文件名 file1.mat 存儲 A1,A2,A3save file2.m A1 A3 ascii%用 ascii 碼以文件名 file2.m 存儲 A1,A3我們還要注意:用二進制格式存儲的文件連變量名一起存儲并可再重新調入時恢復變量的值,而用 ASCII碼存儲的文件只存儲了變量的值,而變量名是沒有的。用二進制格式存儲的變量,可用命令 load 調用,調用格式為: load <磁盤文件名>例如,前面用 save file1 存儲
8、了所有變量 A1,A2,A3,調用時只要鍵入 load file1 即可。 第三節 MATLAB 中的矩陣運算 §1 矩陣運算命令與通常線性代數命令運算的異同一、MATLAB 在運行時是以矩陣為單位進行運算的。它通常有兩種運算,第一種是矩陣運算,運算時滿足線性代數中矩陣運算所規定一切運算法則,如加、減、乘,乘方即冪運算(當然運算要符合規定的條件,例如矩陣 A 與矩陣 B 相乘,必須 A 的列數等于 B的行數),運算符號:A+B, A-B, A B (注意“*”不能少) An二、不同之處:1、與通常矩陣運算不同之處在:在線性代數中矩陣不能與數相加減,而在MATLAB的矩陣運算中允許矩陣
9、與數相加減。2、函數命令可以直接作用到矩陣的每一個元素。3、線性代數中矩陣沒有除法,而MATLAB中有矩陣除法,例如:輸入 A=1:3;4:6;7:9;b=14,32,50'c=Ab顯示: c=204 4、函數作用到矩陣的每一個元素,例如如果令 A=1 1/2 1/3; 1/2 1/4 1/8*pi,即定義 則 三、MATLAB中除法運算的規定與意義:1、運算定義:設已經定義好矩陣 A 與矩陣 B,如果矩陣 A 與矩陣B 的行的維數相同,則 MATLAB 中可以用矩陣 A 左除矩陣 B,即可以令: X=AB如果矩陣 A 與矩陣B 的列的維數相同,則 MATLAB 中可以用矩陣 A 右除
10、矩陣 B,即可以令: X=B/A 2、矩陣除法的意義 給出線性方程組 AX=B,則 X=A 給出線性方程組的一個解。而 X=B/A 給出了線性方程組 XA=B 的一個解。 目前我們用 MATLAB 求線性方程組的解只有三個方法:當 A 是可逆方陣時,X=inv(A)*B 給出線性方程組AX=B 的唯一解。但是 A 不可逆時方法失效。可用命令 rref 化線性方程組 AX=B 的增廣矩陣為行最簡階梯矩陣方法來求解,但線性方程組可能出現無解(稱為“超定”)、唯一解(稱為“恰定”)及無窮多解(稱為“欠定”)的情形。無論 A 是否可逆都可用MATLAB 除法求解,并且無論何種情形都是唯一解。當方程存在
11、唯一解時,三種方法求出的解是一樣的。但是用除法作的解一般精度更高。方程為“超定”或者“欠定”時解意義則不同。線性方程組 AX=b 為欠定時有無窮個解,X=Ab得到其中解分量中零元素為最多的一個特解。線性方程組 AX=b 為超定時是無解的, 用 X=Ab得到的是使范數 |AX-b| 為最小的解。我們不詳細說明這個范數的意義,可理解為使 AX-b 最接近于零的解。例如方程組 通解為:輸入 A=1:3;4:6;7:9;b=14,32,50'c=Ab顯示: c=204是其中有一個零分量的特解。輸入 d=0 32 50'g=Ad顯示 g= 1.0e+017 * 0.6305 -1.261
12、00.6305再輸入 h=A*g-d顯示 h=329614因此 g 不滿足 A*g=d,只是使 A*g-d 盡可能接近于零。§2 常用的數學運算命令 以下是一些在MATLAB中最常用的數學運算命令(均用小寫字母,命令的作用可在MATLAB中用 help <命令> 查詢其作用與格式):一、基本函數運算命令 1、三角函數: sin cos tan cot sec csc 2、反三角函數:asin acos atan acot asec acsc atan2(四象限反正切)3、雙曲函數: sinh cosh tanh coth sech csch4、反雙曲函數:asinh ac
13、osh atanh acoth asech acsch5、復數:real imag conj angle6、小數取整:fix(朝零方向),ceil(朝正無窮方向),floor(朝負無窮方向),round(四舍五入)7、對數與指數:log10 log exp8、其它:sqrt abs sign sum prod solve二、線性代數運算命令: 1、det inv rank rref eig cond行列式求值命令 det, 矩陣求秩命令 rank,求方陣的逆方陣命令,inv 求矩陣行最簡階梯陣命令 rref,求特征值與特征向量命令 eig,求矩陣條件數命令 cond三、多項式運算命令 MATL
14、AB中用向量表示多項式,如 a= 1 2 3 0 4 表示多項式:常用的多項式運算命令有:1、多項式加減法:在次低的向量前面加零后使其元素個數相同,再按向量加減法運算命令進行。 2、多項式 a 與多項式 b 相乘:c=conv(a, b); 3、多項式 a除以多項式 b: q, r=deconv(a, b) q 是商, r 余項) 4、多項式求值: p1=polyval(a, x) (多項式 a 在點 x 處的值) 5、方陣多項式求值: p2=polyvalm(a, A) (矩陣多項式 a 在方陣 A 處的值)6、多項式求根: p3=roots(a) (求多項式 a 的根)7、多項式微分: p
15、4=polyder(a)8、多項式擬合: p5=polyfit(x,y,n)例:x=1 1.2 3 4.2 5; y=x.3-2*x.2+3*x-1; p5=polyfit(x,y,3) 將得出: p5=1.0000 -2.0000 3.0000 -1.0000四、高等數學中的數值運算命令在MATLAB數值計算中很少有高等數學中的運算命令,下面只介紹兩個:1、求數值積分: trapz2、差分: diffMATLAB中也有很多符號運算命令。但不在本課程中。在那些符號運算命令中能實現許多高等數學中的運算。五、顯示格式 有 format rat, format long, format short,
16、 format long g, format short g, format long e , format short e , format hex等等。 第四節 MATLAB 的數組操作前面我們談到了 MATLAB 中有數與矩陣的加減法,這是線性代數中所沒有的。MATLAB 中還有許多與高等數學中內容不同的運算。這些運算對于求解實際問題很有作用,它使編程比其它語言要簡單方便得多。MATLAB 中的數組運算就是其它計算機語言中所沒有的使編程變得十分簡單的運算。MATLAB 中的數組運算只在同階矩陣中進行。設 A,B 是兩個已經定義好的同階矩陣: 則數組運算 A.*B,A./B,A.B 的值分
17、別是:除了前面講過的數與矩陣的加減法(不算數組運算) 外,數與矩陣之間還有下面的數組運算: 從上面敘述可見矩陣與同階矩陣之間(及數與矩陣之間)的數組運算的定義特點是: 1 定義在兩個同階矩陣或數與矩陣之間進行;2 定義方法是前面一項與后面一項用小數點加運算符連結;3 定義的實質是:當定義的運算在矩陣之間時,是相同位置上的元素進行由運算符規定的運算。當定義的運算是矩陣與數之間,則是矩陣中的每一個元素與數進行運算符規定的運算。對于其他計算機語言,這些運算常常要通過雙重循環才能完成,而在 MATLAB 中只要簡單地用“.”加運算符即可表示,這是 MATLAB 特別方便之處。數組運算及函數運算定義容易
18、記憶與使用,它在編程中十分方便,我們看后面的例。如果要畫函數 e-xsinx2 +1 在區間 0,3 上的圖形,操作過程是:x=0:0.01:3; %定義自變量 x 在區間 0,3 上的值y=exp(x).*sin(x.2)+1 %用數組運算計算函數值 yplot(x,y) %作平面上的曲線圖。只用簡單三行命令完成了在其他計算機語言中要用很長程序才能完成的程序,這是 MATLAB 語言非常簡便好用的原因。 第五節 MATLAB 作圖下面介紹 MATLAB 中的作圖命令。§1 二維作圖命令 plot一、MATLAB 二維作圖命令最常用的是 plot,除作圖外,還有如下可控制的操作:1、
19、一張圖上畫多條曲線(可以使用hold命令)。2、一個屏幕上開多個窗口作圖(使用subplot命令)。3、曲線選擇線型、顏色(在每條曲線后加,.b 或者 ,color,1,0,0.5 等)。4、標注文字,使用命令:title(字符) 圖形標題xlabel(字符) x 軸標注,ylabel(字符) y 軸標注,zlabel(字符) z 軸標注,legend(字符, 字符,) 可移動標注text(x,y,(z),字符) 在指定坐標標注gtext(字符) 用鼠標在圖形中選擇地方標注5、坐標網格線顯示與關閉命令 grid二、坐標軸控制(也適用于三維作圖) axis 1、坐標軸刻度范圍控制axis(xmi
20、n, xmax, ymin, ymax (, zmin, zmax)。 2、關閉坐標軸顯示開關 axis(off) 或者 axis off,axis(on) 或者 axis on 3、坐標軸等刻度命令 axis(equal) 或者 axis equal 4、坐標軸等長命令 axis(square) 或者 axis squal 5、使坐標等刻度與等長命令失效命令 axis(normal) 或者 axis normal三、下面介紹一個在實際應用中非常有用的命令:ginput該命令在三維空間中仍然可用,但效果不如二維空間中那么好。四、背景色控制命令figure(color, r, g, b) 三維空
21、間中此命令仍然適用。五、程序標注在程序中“%”后的部分用作標注。六、還有許多二維作圖命令,請大家參看有關參考書。我們僅就使用二維等值線 contour命令用于求解線性方程組的例子。 MATLAB 二維作圖命令 contour可以用于求二維超越方程組的數值解。請看 exmaple1.m:x=0:0.01:2.4995;y=0:0.01:2.4995'A=(0*y+1)*sin(x)+y.2*(0*x+1)+log(5-(0*y+1)*x-y*(0*x+1)-7;contour(x,y,A,0,0)hold onB=3*(0*y+1)*x+2.y*(0*x+1)-(5-(0*y+1)*x-
22、y*(0*x+1).3+1;contour(x,y,B,0,0)hold off此程序用于求方程組:的數值解。此方法的優點是:可以看到圖形全貌,可以求出多解情形,可以獲極高精度。練習 1:求曲線與曲線在區間0, p上的所有交點。練習 2:求方程組 的數值解。要求將解代入方程后每個方程左方減去右方后的絕對值小于 0.00001。§2 三維作圖命令 一、MATLAB 三維作圖曲線作圖命令最常用的是 plot3,contour3。除作圖外,還有如下可控制的操作:三維曲線作圖是對參數式為作圖。例如螺旋線: 作圖命令是 t=0:0.01:10*pi;x=cos(t);y=sin(t);z=t/
23、2; plot3(x,y,z)contour3是三維等值線作圖。二、三維曲面作圖 常用的三維曲面作圖命令有:mesh , surf, meshc, meshz , waterfall, 我們重點介紹 mesh 與 surf。這兩個命令都是作曲面圖形,但是 mesh 是用網格作圖,而 surf 是用曲面片作圖。效果有少許不同,但作圖編程是相同的(這個作圖過程比較復雜)。事實上它們都是用曲面參數式 作的圖,因此要畫曲面圖形,首先得會寫上面的參數式。然后會用上面的參數式編程。注意在編程時 z 都是二維矩陣,行數與向量 u 的維數相同,列數與 v 的維數相同,x, y 可以是與 z 維數相同的二維矩陣
24、也可以是向量。請看下面馬鞍面 的作圖過程:y= -1 :0.1: 1; x=y; z=(0*y+1)*x.2- y.2* (0*x+1); mesh(x,y,z);這個命令等價于y= -1 :0.1: 1; x=y; z= ones(size(y)*x.2 - y.2*ones(size(x); surf(x,y,z);上面作的圖是以 z 的高度作為圖形色彩數據的(這是缺省時的數據)。如果加上顏色、光照、紋理、視角等設置,可以得出十分漂亮的圖形。請看 example2.m。有時作圖的參數式要使用比較復雜的數學運算,例如 2001 年全國數學建模競賽時要求從血管的 100 張切片中讀出血管的中心
25、與半徑。競賽中要求將血管中心線向三個坐標平面投影。但是我們根據血管中心線可畫出血管的三維圖象。顯然這更好看更直觀。曲面參數式的推導見廣西大學學報2003年第3期,而程序請看 example3.m。練習3:畫一個求生圈的圖。提示:求生圈的曲面參數方程為: 練習4:畫出在二維區域 x2 + y21 上的馬鞍面 z= x2- y2。練習5:作曲面 z=x2+y2 與平面 4x+2y+5z=20 相交的圖(要求平面只畫出被曲面截出的部分,參考右圖)。練習6:作圓柱面 x2+z2=1 與圓柱面 y2+z2=1 相交的圖(要求平面只畫出在每卦限的部分)。§3 MATLAB 動畫 MATLAB 中
26、的動畫功能不是太強,并且需要使用 MATLAB 的底層作圖命令,即圖形的句柄操作。MATLAB 中的作圖命令如果使用了賦值語句,即將作圖賦給了某個變量,則該變量即為此張圖形的句柄。可以對此句柄設置一些圖形屬性,對于句柄圖形我們在前面已經用到了,例如馬鞍面的圖形中的賦值語句aa=surf(X,Y,Z);就是將曲面的句柄賦給 aa 了,然后用set(aa, 'Facecolor', 0,0.7,0, bb,' Facecolor', 0.7,0,0.7)設置曲面顏色。MATLAB 動畫實際上就是在句柄中設置了圖形將是被復蓋還是改寫等屬性,然后在作圖時按不同的位置畫圖
27、(同時擦除前面的圖形或者復蓋前面的圖形以實現動畫)。由于作動畫一般要涉及編程,我們將此部分內容放到第四節中。在圖形的屬性控制中要注意區分各種圖形對象:figure, axes, line, patch, surface, image, text 等等。§4 MATLAB 圖象處理 MATLAB 可對圖象作處理,常用的簡單命令有:imread, image, colormapimread 可以讀出圖象數據,而image可以將圖象數據顯示為圖象,而colormap可以設置圖象色彩。練習7:本文件夾中有一張圖“figure0”,是2002年全國數學建模大賽中的一張圖,要求從圖中讀出圖形的內
28、切圓圓心與半徑。 在MATLAB圖象處理中還有光照、色彩、視角等許多處理。由于水平與時間關系,只能簡單介紹。第六節 MATLAB 編程一、MATLAB 編程 MATLAB 可以單步運行,也可以編程運行。 與所有軟件編程一樣,MATLAB中也有條件、分支、循環等語句。條件語句: if end 或者 if else end循環語句: for end 或者 while end需要指出,在其他許多語言中需要循環的地方在MATLAB中是不需要循環的。下面我們看一個動畫程序:畫單擺的運動程序:pend.m。figure('color',1 1 1)plot(-0.2;0.2,0;0,
29、9;color','y','linestyle','-','linewidth',10);%畫懸線的橫梁g=9.8; %重力加速度l=1; %線長theta0=pi/6; %初始角度x0=l*sin(theta0); %初始 x 值y0=-l*cos(theta0); %初始 y 值axis(-0.75,0.75,-1.25,0); %畫坐標范圍axis('off'); %關閉坐標顯示head=line(x0,y0,'color','r','linestyle'
30、;,'.','erasemode','xor','markersize',40); %定義小球格式body=line(0;x0,0;y0,'color','b','linestyle','-','erasemode','xor'); %定義懸線格式t=0; %時間初值dt=0.0005; %時間增量while 1 %死循環(關閉窗口后中止循環) t=t+dt; theta=theta0*cos(sqrt(g/l)*t); %計算時刻 t
31、 時的幅角 x=l*sin(theta); %計算時刻 t 時的 x 坐標 y=-l*cos(theta); %計算時刻 t 時的 y 坐標 set(head,'xdata',x,'ydata',y); %計算時刻 t 時小球的位置 set(body,'xdata',0;x,'ydata',0;y); %計算時刻 t 時懸線的位置 drawnow; %重畫小球與懸線end二、程序與函數將MATLAB運行中的每一句寫在擴展名為“m”的文本文件中,就得到MATLAB程序文件。程序中的變量值都在工作窗中。如果是寫成function u
32、, v, =fun(x , y, )則是MATLAB函數,函數參數 x , y 可以是變量、向量或者矩陣,返回值 u, v 也可以是變量、向量或者矩陣,存儲時函數名必須與存儲文件名相同。 例如,運行 redotree(n, B) (設的初值為 B=0 0;0 1,取 n=5 或者 n=6),可以畫出一棵樹的圖形。而運行leafage1(n)可以畫出一張樹葉。練習8:作曲面 z=x2+y2 與平面 4x+2y+5z=c,c 從 40 變化到 20 的動畫圖 第七節 數據擬合MATLAB有數據插值與數據擬合功能,使用的命令是:interpn(注意這里的“n”必須是一個具體正整數,一般為 n=1,
33、2, 3, ,表示)。例如:運行exmaple51.m,對南半球氣旋作可視化顯示圖。%exmaple51.m-南半球氣旋數據,程序實現氣旋數據可視化y=5:10:85;x=1:12;z= 2.4, 1.6, 2.4, 3.2, 1.0, 0.5, 0.4, 0.2, 0.5, 0.8, 2.4, 3.6; 18.7, 21.4, 16.2, 9.2, 2.8, 1.7, 1.4, 2.4, 5.8, 9.2, 10.3, 16; 20.8, 18.5, 18.2, 16.6, 12.9, 10.1, 8.3, 11.2, 12.5, 21.1, 23.9 ,25.5;22.1, 20.1, 2
34、0.5, 25.1, 29.2, 32.6, 33.0, 31.0, 28.6, 32.0, 28.1, 25.6; 37.3, 28.8, 27.8, 37.2, 40.3, 41.7, 46.2, 39.9, 35.9, 40.3, 38.2, 43.4; 48.2, 36.6, 35.5, 40, 37.6, 35.4, 35, 34.7, 35.7, 39.5, 40, 41.9; 25.6, 24.2, 25.5, 24.6, 21.1, 22.2, 20.2, 21.2, 22.6, 28.5, 25.3, 24.3; 5.3, 5.3, 5.4, 4.9, 4.9, 7.1, 5
35、.3, 7.3, 7, 8.6, 6.3, 6.6; 0.3, 0, 0, 0.3, 0, 0, 0.1, 0.2, 0.3, 0, 0.1, 0.3; xi,yi=meshgrid(1:12,5:85); zi=interp2(x,y,z,xi,yi,'cubic'); surf(xi,yi,zi)練習9:一天24小時每兩小時的溫度記錄如下:11 9 9 10 18 24 28 27 25 20 18 15 13請用插值方法用出一天24小時的溫度變化圖。用命令 curvefit(fun,x0 , x , y) 可以作曲線擬合,其擬合功能比 MATHMATICA 更強。如某數據
36、近似符合規律y(t)=a+be-kt,已知從100到1000時分別對應于cdata=0.00001*454 499 535 565 590 610 626 639 650 659;求 a, b, k 使 盡可能地小。此問題的解可由運行exmaple52.m得到。附錄: 內插及曲線擬合我們常常會有從實驗或是對物理現象觀察所收集到的數據,分析這些數據需要有輔助的工具。通常這些原始 數據如果會制成圖,是成點狀分布。我們需要將這些點連成曲線,再進一步將曲線轉換成有意義的數學函數 ,才能對數據做比較和分析。上述的過程涉及到內插(interpolation)及曲線擬合(curve-fitting),我們會
37、在以下介紹。1 內插假設一組已知的數據其型態為 f(xk), =1, 2, , n, x1=a, x xn=c, 假設某些點 xi并不屬于上述的 xk但是 a£xi£c,如果我們要估計這些點的函數值 f(xi) 就須要做內插 (interpolation)。我們可視原數據所描述的函數復雜程度來選擇不同的數值內插方法。 · 1 內插 o 1.1 一維內插 o 1.2 二維內插 o 1.3 Spline 內插 1.1 一維內插線性內插是假設在二個已知數據中的變化為線性關系,因此可由已知二點的座標(a, b)去計算通過這二點的 斜線,公式如下: 其中 a<b<
38、;c 在上式的 b 點即是代表要內插的點,f(b) 則是要計算的內插函數值。下圖即是一個以二種內插法的比較 pcxfile12cm,5cmfig9_1.pcx caption線性式與 spline 函數的曲線擬合線性內插是最簡單的內插方法,但其適用范圍很小;如果原來數據的函數f有極大的變化,假設其數據點之 間為線性變化并不合理。所以我們可以用二次、三次方程組或是另一種稱為spline函數來近似原來數據的函 數。MATLAB的一維內插函數是interp1,其語法為interp1(x,y,xi),interp1(x,y,xi,'method');其中的x,y是原已知的 數據的x,y
39、值,而xi則是要內插的數據點,另外method可以設定內插方法有 linear,cubic,spline,分別是一次、三 次方程組和spline函數,其中預設方法是linear。如果數據的變化較大,以 spline函數內插所形成的曲線最平滑 ,所以效果最好。而三次方程組所得到的內插曲線平滑度,則介于線性與spline函數之間。我們以下面的例子說明。假設有一個汽車發動機在定轉速下,溫度與時間(單位為sec)的三次量測值如下timetemp1 temp2temp3 00 00 120 110176 260 180220 368 240349 477 310450 5110 405503 其中溫度的
40、數據從 20oC變化到 503oC,如果要估計在t=2.6, 4.9 sec 的溫度,可以下列指令計算 x=0 1 2 3 4 5' % 鍵入時間 y=0 20 60 68 77 110' % 鍵入第一組時間 y1=interp1(x,y,2.6) % 要內插的數據點為 2.6 y1 = % 對應 2.6 的函數值為 64.8 64.8 y1=interp1(x,y,2.6 4.9) %內插數據點為 2.6, 4.9,注意用 將多個內插點放在其中 y1 = 64.8 106.7 y1=interp1(x,y,2.6,'cubic') % 以三次方程組對數據點 2
41、.6 作內插 y1 = % 對應 2.6 的函數值為 66.264 66.264 y1=interp1(x,y,2.6,'spline') % 以spline函數對數據點 2.6 作內插 y1 = % 對應 2.6 的函數值為 66.368 66.368以下的例子還配合繪圖功能,用以比較不同內插方法的差異。 h=1:12; temp=5 8 9 15 25 29 31 30 22 25 27 24; % 這組溫度數據變化較大 plot(h,temp,'-',h,temp,'+') % 將線性內插結果繪圖 h_3=1:0.1:12 % 要每0.1小
42、時估計一次溫度值 t_3=interp1(h,temp,h_3,'cubic') % 以三次方程組做內插 t_s=interp1(h,temp,h_3,'spline') % 以spline函數做內插 hold on subplot(1,2,1) plot(h,temp,'-',h,temp,'+',h_3,t_3) % 將線性及三次方程組內插繪圖 subplot(1,2,2) plot(h,temp,'-',h,temp,'+',h_3,t_s) % 將線性方程組及spline內插繪圖 hold
43、off7.1.2 二維內插二維內插與一維內插的區別是二維內插數據為二維,語法結構為interp2(X,Y,Z,XI,YI),其中X,Y,Z為已知數據,Z=Z(X,Y),而XI,YI 為要插值的數據點;如果語法結構為interp2(X,Y,Z,XI,YI,'method'),其中method可以為linear,cubic表示線形或三次方插值,我們以下例說明:假設一汽車的轉速(單位為:rpm)、溫度(單位為:oC)、時間(單位為:sec)如下表:time speed 0 2000 rpm 3000 rpm 4000 rpm
44、 1 20 110 176 2 60 180 220 3 68 240 349 4 77 310 450 5 110 405 503 其中溫度的數據為20oC到503oC,如果要估計t=2.6, sec, rpm=2500的溫度,可以利用下面的語句:d2(:,1)=0 1 2 3 4 5' % 將時間輸入 d2(:,2)=20
45、00 20 60 68 77 110' % 將 rpm=2000的溫度輸入 d2(:,3)=3000 110 180 240 310 405' % 將 rpm=3000 的溫度輸入 d2(:,4)=4000 176 220 349 450 503' % 將 rpm=4000 的溫度輸入 t=d2(2:6,1); %選擇做內插的時間rpm=d2(1,2:4); % 選擇做內插的 rpm temp=d2(2:6,2:4); % 選擇做內插的溫度temp_i=interp2(rpm,t,temp,2500,2.6) % 以線形內
46、插決定 rpm=2500,t=2.6 的溫度 temp_i = 140.4000 1.3 Spline 內插關于spline內插我們在1.1節已介紹過,它可以用interp1指定內插方式為spline來做。另一種方式也可以用 spline(x,y,xi)來做,其中的x,y,xi的用法與interp1中的語法相同。事實上這二種方法采用相同的spline 函數做 運算,也就是當我們執行interp1(x,y,xi,'spline')時,MATLAB即呼叫spline(x,y,xi)做運算,再將計算結果傳回 interp1。 我們還是以在 1.1
47、節相同的數據做 spline 內插示范, x=0 1 2 3 4 5' y=0 20 60 68 77 110' y1=spline(x,y,2.6) y1 = 67.3 y1=spline(x,y,2.6,4.9) y1 = 67.3 105.23 曲線擬合曲線擬合 (curve-fitting) 故名思義就是要將一組離散的數據以一個近似的曲線方程組來代表。有了這個解析形 態的方程組,我們就可以很方便去運用它。曲線擬合與前述的內插有許多相似之處,但是這二者最大的區 別在于曲線擬合要找出一個曲線方程組而內插僅是要求出內插數值即可。 要找出近似一組數據(也就是最能代表這些數據)的
48、曲線方程組,有許多選擇,從簡單的一階線性方程組 到高階的多項式都有。我們以下就介紹二種方法:線性回歸(linear regression),多項式回歸(polynomial regression)。· 3 曲線擬合 o 3.1 線性回歸 o 3.2 多項式回歸 o 3.3 多項式擬合及函數計算 3.1 線性回歸我們以一簡單數據組來說明什么是線性回歸。假設有一組數據型態為 y=y(x),其中 x=0, 1, 2, 3, 4, 5, y=0, 20, 60, 68, 77, 110 如果我們要以一個最簡單的方程組來近似這組數據,則非一階的線性方程組莫屬。先將這組數據繪圖如下 plot(x
49、, y)圖中的斜線是我們隨意假設一階線性方程組 y=20x,用以代表這些數據的一個方程組。以下將上述繪圖的 MATLAB 指令列出,并計算這個線性方程組的 y 值與原數據 y 值間誤差平方的總合。 x=0 1 2 3 4 5; y=0 20 60 68 77 110; y1=20*x; % 一階線性方程組的 y1 值 sum_sq = sum(y-y1).2); % 誤差平方總合為 573 axis(-1,6,-20,120) plot(x,y1,x,y,'o'), title('Linear estimate'), grid如此任意的假設一個線性方程組并無根據
50、,如果換成其它人來設定就可能采用不同的線性方程組;所以我們 須要有比較精確方式決定理想的線性方程組。我們可以要求誤差平方的總合為最小,做為決定理想的線性方 程序的準則,這樣的方法就稱為最小平方誤差(least squares error)或是線性回歸。MATLAB的polyfit函數提供了 從一階到高階多項式的回歸法,其語法為polyfit(x,y,n),其中x,y為輸入數據組n為多項式的階數,n=1就是一階 的線性回歸法。polyfit函數所建立的多項式可以寫成 從polyfit函數得到的輸出值就是上述的各項系數,以一階線性回歸為例n=1,所以只有 二個輸出值。如果指令為coef=polyfit(x,y,n),則coef(1)= , coef(2)= ,.,coef(n+1)= 。注意上式對n 階的多 項式會有 n+1 項的系數。我們來看以下的線性回歸的示范: x=0 1 2 3 4 5; y=0 20 60 68 77
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 分公司財務垂直管理制度
- 科技圖書館設備管理制度
- 幼兒園晨檢物資管理制度
- 智能家居生產管理制度
- 公司小汽車用車管理制度
- 日本公司運營管理制度
- 變壓器公司運維管理制度
- 日間化療中心管理制度
- 公司危險廢棄物管理制度
- 智慧園區運維管理制度
- 2025至2030中國成人用品行業產業運行態勢及投資規劃深度研究報告
- 2025年重慶市九年級中考語文試題卷及答案解析
- 公安院校公安學科專業招生政治考察表
- 2024年內蒙古錫林郭勒職業學院招聘真題
- 民航招飛駕駛測試題及答案
- 北京稅務籌劃課件
- 生物-七年級下冊期末復習知識點匯Z(冀少版2024)速記版 2024-2025學年七年級生物下學期
- 內燃機技術協議書
- 數字智慧方案數字鄉村信息化建設及精細化治理平臺建設方案
- 2024年隴南市事業單位專業技術人才引進筆試真題
- 2025屆浙江省精誠聯盟高三下學期適應性聯考生物試題
評論
0/150
提交評論