第一篇:MATLAB一些重要函數與符號用法總結(冒號,取整函數,Cell用法)
冒 號
1)a:b 表示[a,a+1,……,b]
1.>> A=1:5 2.A = 3.1 2 3 4 5 2)如果b-a不是整數的話,則向量的最后一位數是n+a,且n=fix(b-a)1.>> A=1.2:4.9 2.A = 3.1.2000 2.2000 3.2000 4.2000 3)上面的前提是ab則會出現空值 1.>> A=5:1 2.A = 3.Empty matrix: 1-by-0 此時 A是空矩陣,看workspace也可以看到A 4)a:c:b表示[a,a+c,……,a+n*c],其中n=fix((b-a)/c)1.>> A=1:3:11 2.A = 3.1 4 7 10 5)a:c:b在以下情況為空值 c>0,且ab 1.>> A=11:3:1 2.A = 3.Empty matrix: 1-by-0 6)A(:)表示以一列的方式顯示A中所有元素 1.>> A=[1 2 3;4 5 6] 2.A = 3.1 2 3 4.4 5 6 5.>> A(:)6.ans = 7.1 8.4 9.2 10.5 11.3 12.6 7)b=A(i, :)表示把矩陣A的第i行存入b 1.>> b=A(1,:)2.b = 3.1 2 3 8)b=A(:,j)表示把矩陣A的第j列存入b 1.>> b=A(:,1)2.b = 3.1 4.4 9)b=A(J :K)表示把矩陣A中[A(J),A(J+1),...,A(K)]這些元素存入b中 1.>> b=A(3:5)2.b = 3.2 5 3 10)b=A(:,c:d)表示把矩陣A的第c到第d列存入b中,當然c,d大于A的列數則出錯(b=A(c:d,:)表示取行)1.>> A=[1 2 3;4 5 6;7 8 9] 2.A = 3.1 2 3 4.4 5 6 5.7 8 9 6.>> b=A(:,2:3)7.b = 8.2 3 9.5 6 10.8 9 11)當需要 10 9 8 7 6 5 4 3 2 1這樣的數時,用A=[10:1]會產生空矩陣,可用下面的方法: >> A=[10:-1:1] A = 10 9 8 7 6 5 4 3 2 1 當矩陣很大時,不知道矩陣的維數,可以用end >> A=[1 2 3;4 5 6;7 8 9] A =
4 5 6 7 8 9
>> b=A(:,2:end)b = 2 3 5 6 8 9 當我們需要 A矩陣第右上角的數時,即 2 3 5 6 這時用‘ :’很難實現
可以用end和冒號一起來實現 >> b=A(1:2,2:end)b =
5 6
取整函數
MATLAB 的取整函數有: fix(x),floor(x),ceil(x),round(x)
(1)fix(x): 截尾取整 >> fix([3.12-3.12])ans = 3-3
(2)floor(x):不超過 x 的最大整數.(高斯取整)>> floor([3.12-3.12])ans = 3-4
(3)ceil(x): 大于 x 的最小整數 >> ceil([3.12-3.12])ans = 4-3
(4)四舍五入取整 >> round([3.12-3.12])ans = 3-3
Cell用法
Matlab里面元包(Cell)的概念,其元包就是一個類似矩陣的東西,但是它的特點就是矩陣的每一項可以放任何的元素,比如: >> MyCell MyCell = Columns 1 through 2 [16x16 double] 'i am a string' Column 3 [1x1 struct] MyCell的第一項是一個16x16的矩陣,第二項是一個字符串,第三項是個結構體。
Cell的使用其實也很簡單,和矩陣的用法備嘗的類似,不同的矩陣采用()作為訪問的表示,如a(1)=10;但是元包是采用花括號的,如MyCell{1}=zeros(16,16),當然元包也可以有矩陣的形式MyCell{i,j}(其實元包也可以可用MyCell(i,j),但是從字面上看不出和一般的矩陣有任何的區別,我個人還是建議使用花括號)。
再回到開頭的問題,那么就用一個1 x N的元包組來記錄這些數據,每個元包就放置一個矩陣即可。
首先要要創建一個元包用來存放數據,這里有兩種方法(1)DataCell = Cell(1,N);(2)DataCell{N} = [];這兩種方法的效果是一樣產生了一個1*N的元包,沒有元素都是空的。使用的時候也很簡單 DataCell{1} = DataArray。其中DataArray就是要存儲的某一行數據。
要訪問某行數據也很簡單 DataCell{2}(7)就是表示第2個元包的數組的第7個元素。
此外元包還有自己的可視化工具,celldisp()和cellplot()分別用作顯示元包的內容和畫出元包。
a=cell(n,m)那么就把a初始化為一個n行m列的空cell類型數據。如何賦值呢? a{1,1}=rand(5)那么a的1行1列的單元中存儲的就是一個隨機的5×5的方陣了。那么要用第一個單元中的方陣中的某個值呢? 可以如下引用:a{1,1}(2,3)就可以了,引用cell單元時要用{},再引用矩陣的某個數據就要用()了。cell單元中的每個單元都是獨立的,可以分別存儲不同大小的矩陣或不同類型的數據。
關于cell的創建:
1.跟一般創建舉證一樣,直接使用C = {A B D E}這種形式,不過這里把“[]”改成了}“{}” 2.使用cell創建cell,C= {C1 C2},這里C1和C2都是cell類型,直接把C1 C2作為一個cell得到的C3是一個1x2的cell數組;使用C3 = [C1 C2],是使用C1和C2的內容來創建cell數組
3.使用cell函數,A=cell(2,2),創建一個空的2x2的cell矩陣.關于cell的訪問: 1.X = C(s)使用這種“()”形式的返回的是cell類型
2.X = C{s}使用這種“{}”形式的返回的是cell中的內容 3.其他的基本上與通常的數組.矩陣訪問一樣了
4.A{1,1}(2,3:end)訪問的是A中的第一個cell里面內容的第2行的第三個元素以后的所有元素
5.A{1,3}.name訪問的是A中的A{1,3}cell里面結構的name值 6.cell的圖形化顯示使用命令cellplot(A)即可。
關于cell的刪除介紹: 1.cell(1)=[]刪除第一個cell,不能使用cell{1}=[],這是把第一個cell內容置空沒有刪除
>>C4={C1,C2,C3} C4 = {3x2 cell} {3x3 cell} {3x1 cell} >> C4(1)=[] C4 = {3x3 cell} {3x1 cell} 2.cell(:)=[]刪除所有的cell,其他的刪除一次類推 >> C4(:)=[] C4 = {} B={[1;2]} 這就定義了一個cell型的變量B,里面保存的是一個矩陣[1;2],要引用里面的數據只要在大括號里寫上對應的下標即可,如B{1}。
下面我們給B再加個元素,我們可以這樣定義 B(2)={'hello'} 也可以利用引用的方法定義 B{2}='hello' 第二種方法比第一種方法更方便所以更常用。
這樣B就有兩個元素了,B(1)是{[1;2]},B(2)是{'hello'},每個元素都是cell型的(注意和B{1}、B{2}的區別,B{1}是[1;2],B{2}是'hello').最后向大家介紹個網站:MATLAB中文論壇,上邊有個I love matlab,有不懂的函數或符號,一般都可以在上面查到!
第二篇:MATLAB總結 - 隱函數、符號函數作圖
I.隱函數f(x,y)=0, f(x(t),y(t),z(t))=0;z=f(x,y)ezplot, ezplot3, ezcontour, conctourf, ezpolar, ezmesh, ezmeshc, ezsurf, ezsurfc 1.ezplot:畫符號函數圖形
ezplot(f):對于顯式函數f=f(x),在默認的范圍[-pi ezplot(f,[xmin xmax],fing):在指定標號為fign的窗口中、指定范圍[xmin xmax]內畫函數f=f(x)的圖形。ezplot(f,[xmin,xmax,ymin,ymax]):在平面矩形區域[xmin ezplot(x,y,[tmin,tmax)]:在指定范圍[tmin 2.ezplot3:三維曲線圖 ezplot3(x,y,z):在默認的范圍0 ezplot3(x,y,z,[tmin,tmax]):在默認的范圍tmin 此外,三維曲線的視角可以通過程序命令來控制,也可以手動設置。 3.ezcontour:畫符號函數的等高線圖 ezcounter(f):畫出二元符號函數f=f(x,y)的等高線圖。函數f將被顯示在默認的平面區域[-2pi ezcontour(f,domain):在指定的定義域domain內畫出二元函數f(x,y),參量domain可以是四維向量[xmin,xmax,ymin,ymax]或二維向量[min,max](其中顯示區域為min ezcontour(…,n):用指定n*n個柵格點(對定義域的一種劃分),在默認(若沒有指定)的區域內畫出函數f的圖形。n的默認值為60.例如: >> syms x y >> f=(1-x)^2*exp(-(x^2)-(y+1)^2)-5*(x/5-x^3-y^5)*sin(-x^2-y^2)-1/3*exp(-(x+1)^2-y^2);>> ezcontour(f,[-3,3],49) 4.contourf:用不同顏色填充的等高線圖 ezcontourf(f):畫二元函數f=f(x)的等高線圖,且在不同的等高線之間自動用不同的顏色進行填充。函數f兼備現實與默認的平面區域[-2pi ezcontourf(f,domain):在指定的定義域domain內畫出二元函數f(x,y)的等高線圖,且在不同的等高線之間自動用不同的顏色進行填充。定義域domain可以是四維向量[xmin,xmax,ymin,ymax]或者二維向量[min,max])(其中顯示區域為:min ezcontourf(……,n)用指定的n*n個柵格點,在默認(若沒有指定)的區域內畫出函數f的等高線,且在不同的等高線之間自動用不同的顏色進行填充。n的默認值是60.例如: >> syms x y >> f=(1-x)^2*exp(-(x^2)-(y+1)^2)-5*(x/5-x^3-y^5)*sin(-x^2-y^2)-1/3*exp(-(x+1)^2-y^2);>> ezcontourf(f,[-3,3],60) 5.ezpolar:畫極坐標函數圖象 ezpolar(f):在默認的范圍0 6.ezmesh:符號函數的三維網格圖 ezmesh(f):畫出二元符號函數f=f(x,y)的網格圖。函數f將顯示于默認的平面區域[-2pi ezmesh(x,y,z):在默認的矩形定義域范圍[-2pi ezmesh(x,y,z,[smin,smax,tmin,tmax]):在指定的矩形定義域范圍[smin ezmesh(x,y,z,[min,max]):用指定的矩形定義域[min >> colormap([0 0 1])%獲取當前圖色 7.ezmeshc:同時畫曲面網格圖和等高線圖 ezmeshc(f):畫出二元數學符號函數z=f(x,y)的網格圖形,同時在xy平面上顯示等高線圖。函數f將被顯示于默認的平面區域[-2pi ezmeshc(f,domian):在指定的定義域domain內畫出二元數學符號函數z=f(x,y)的網格圖及其等高線圖,domain可以是四維向量[xmin,xmax,ymin,ymax]或者二維向量[min,max])(其中顯示區域為:min ezmeshc(x,y,z,[smin,smax,tmin,tmax]):在指定的矩形定義域范圍[smin ezmeshc(f,……,n):用指定n*n個柵格點,在默認(若沒有指定)的區域內畫出函數f的網格圖形及其等高線圖。n的默認值是60.ezmeshc(…,’circ’):在一圓形區域(圓心位于定義域中心)的范圍內畫出函數f的網格圖形以及其等高線圖。例如: >> syms x y >> ezmeshc(x*y/(1+x^2+y^2),[-5,5,-2*pi,2*pi],35) (顏色使用了colormap函數控制,上面對應的代碼是colormap(cool(64)。)8.ezsurf:三維帶顏色的曲面圖 ezsurf(f): 畫出二元數學符號函數z=f(x,y)的曲面圖形。函數f將顯示于默認的平面區域[-2pi ezsurf(f,domian):在指定的定義域domain內畫出二元數學符號函數z=f(x,y)的曲面圖形,domain可以是四維向量[xmin,xmax,ymin,ymax]或者二維向量[min,max])(其中顯示區域為:min ezsurf(x,y,z):在默認的矩形定義域范圍[-2pi ezsurf(x,y,z,[smin,smax,tmin,tmax]):在指定的矩形定義域范圍[smin ezsurf(f,…,n):用指定n*n個柵格點,在默認(若沒有指定)的區域內畫出函數f的圖形。n的默認值是60.ezsurf(…,’circ’):在一圓形區域(圓心位于定義域中心)的范圍內畫出函數f的圖形。例如: >> syms x y >> ezsurf(real(atan(x+i*y))) 9.ezsurfc:同時畫曲面圖與等高線圖 >> syms x y >> ezsurfc(x*y/(1+x^2+y^2),[-5,5,-2*pi,2*pi],35,'circ') II.Matlab畫三維隱函數曲面 implicitmesh, implicitmesh 利用ezplot甚至可以直接繪制隱函數曲線F(x,y)=0而無需將其寫成y=f(x)的形式。然而十分可惜的是與之對應的ezsurf和ezmesh卻對隱函數曲面F(x,y,z)=0的繪制無能為力。那么matlab究竟有沒有用來繪制諸如F(x,y,z)=0的命令呢?答案毫無疑問是肯定的。事實上利用matlab的等值面函數isosurface就可以輕松搞定。關于isosurface的具體用法大家可以自己參看help。下面兩個函數就是我利用isosurface編寫的通用隱函數曲面繪制命令。 1.隱函數曲面網格圖函數implicitmesh function h=implicitmesh(f,xlimit,ylimit,zlimit,gd)%implicitmesh(f,span,gd):畫隱函數曲面f(x,y,z)=0的網格圖, % 各坐標范圍均限定在span=[lb,ub], % 網格數為gd,默認為25 %implicitmesh(f,xspan,yspan,zspan,gd):畫隱函數曲面f(x,y,z)=0, % 各坐標范圍分別限定在xspan,yspan,zspan %h=implicitmesh(...):畫隱函數曲面并輸出句柄 %例一: %implicitmesh(inline('x.*y+z.^2'),[-5 5])%注意*^一定要設成點運算 %例二: %f=@(x,y,z)x.^2+y.^2+0*z-1;%注意如果f中不含某個變量一定要加上諸如0*y的項。%implicitmesh(f,[-1 1],10)%例三: %f=@(x,y,z)(x.^2 +(9/4)*y.^2 + z.^2x.^2.*z.^3-(9/80)*y.^2.*z.^3;%g=@(x,y,z)(sqrt(x.^2+y.^2)-2).^2+z.^2-.09;%implicitmesh(f,[-1.5 1.5],[-.8.8],[-1.5 1.5],50);%hold on%可以添加圖形 %h=implicitmesh(g,[-2.3,2.3]);%colormap hsv;set(h,'facecolor','none');%可以設置各種效果 %axis off;axis equal;if nargin==2 ylimit=xlimit;zlimit=xlimit;gd=25;elseif nargin==3 gd=ylimit;ylimit=xlimit;zlimit=xlimit;elseif nargin==4 gd=25;elseif nargin==5 else error('Errorin input arguments')end x=linspace(xlimit(1),xlimit(2),gd);y=linspace(ylimit(1),ylimit(2),gd);z=linspace(zlimit(1),zlimit(2),gd);[x,y,z]=meshgrid(x,y,z);val=f(x,y,z);[f,v]=isosurface(x,y,z,val,0);if isempty(f)warning('There is no graph in the range.');p=[];else newplot;p=patch('Faces',f,'Vertices',v,'CData',v(:,3),'facecolor','w','EdgeColor','flat');isonormals(x,y,z,val,p);view(3);grid on end if nargout==0 else h=p;end 效果圖: 2.隱函數曲面表面圖函數implicitsurf function h=implicitsurf(f,xlimit,ylimit,zlimit,gd)%implicitsurf(f,span,gd):畫隱函數曲面f(x,y,z)=0的網格圖, % 各坐標范圍均限定在span=[lb,ub], % 網格數為gd,默認為25 %implicitsurf(f,xspan,yspan,zspan,gd):畫隱函數曲面f(x,y,z)=0, % 各坐標范圍分別限定在xspan,yspan,zspan %h=implicitsurf(...):畫隱函數曲面并輸出句柄 %例一: %implicitsurf(inline('x.*y+z.^2'),[-5 5])%注意*^一定要設成點運算 %例二: %f=@(x,y,z)x.^2+y.^2+0*z-1;%注意如果f中不含某個變量一定要加上諸如0*y的項。%implicitsurf(f,[-1 1],10)%例三: %f=@(x,y,z)(x.^2 +(9/4)*y.^2 + z.^2x.^2.*z.^3-(9/80)*y.^2.*z.^3;%g=@(x,y,z)(sqrt(x.^2+y.^2)-2).^2+z.^2-.09;%h=implicitsurf(f,[-1.5 1.5],[-.8.8],[-1.5 1.5],50);%set(h,'AmbientStrength',.5);%可以設置各種效果 %hold on%可以添加圖形 %h=implicitsurf(g,[-2.3,2.3],[-2.3,2.3],[-.3,.3]);%colormaphsv;set(h,'AmbientStrength',.8,'FaceAlpha',.5);%可以設置各種效果 %axis off;axis equal;shading interp;camlight;lightinggouraud;if nargin==2 ylimit=xlimit;zlimit=xlimit;gd=25;elseif nargin==3 gd=ylimit;ylimit=xlimit;zlimit=xlimit;elseif nargin==4 gd=25;elseif nargin==5 else error('Errorin input arguments')end x=linspace(xlimit(1),xlimit(2),gd);y=linspace(ylimit(1),ylimit(2),gd);z=linspace(zlimit(1),zlimit(2),gd);[x,y,z]=meshgrid(x,y,z);val=f(x,y,z);[f,v]=isosurface(x,y,z,val,0);if isempty(f)warning('There is no graph in the range.');p=[];else newplot;p=patch('Faces',f,'Vertices',v,'CData',v(:,3),'facecolor','flat','EdgeColor','k');isonormals(x,y,z,val,p);view(3);grid on end if nargout==0 else h=p;end 效果圖: III.關于ezplot作圖之后數據提取的問題 clear;clc figure h=ezplot('x*y',[-2,2]);x1=get(h(1),'XData');y1=get(h(1),'YData');x2=get(h(2),'XData');y2=get(h(2),'YData');figure plot(x1,y1);hold on plot(x2,y2); EXCEL查找與引用函數VLOOKUP的應用法及實例詳解 在表格或數值數組的首列查找指定的數值,并由此返回表格或數組當前行中指定列處的數值。當比較值位于數據表首列時,可以使用函數 VLOOKUP 代替函數 HLOOKUP。 在 VLOOKUP 中的 V 代表垂直。語法 VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) VLOOKUP(查找XX,在YY區域中,與查找值相對的第ZZ列的值,方式)lookup_value 為需要在數組第一列中查找的數值。Lookup_value 可以為數值、引用或文本字符串。 如下圖所示,C3單元格即為lookup_value 名稱的引用,例如數據庫或列表。 如下圖所示:C6:F10即為 table_array 為需要在其中查找數據的數據表。可以使用對區域或區域 table_array col_index_num 為table_array中待返回的匹配值的列序號。col_index_num為1時,返回table_array第一列中的數值; col_index_num為2,返回table_array第二列中的數值,以此類推。如果col_index_num小于1,函數VLOOKUP返回錯誤值值#VALUE!; 如果col_index_num大于table_array的列數,函數VLOOKUP返回錯誤值#REF!。 如下圖所示,4表示數據表的第4列,col_index_num range_lookup 如果 range_lookup 為 TRUE,則 table_array 的第一列中的數值必須按升序排列:?、- 2、-1、0、1、2、?、-Z、FALSE、TRUE;否則,函數 VLOOKUP 不能返回正確的數值。如果 range_lookup 為 FALSE,table_array 不必進行排序。 (通過在“數據”菜單中的“排序”中選擇“升序”,可將數值按升序排列。)為了方便起見,一般選用 FALSE,即表格不必要再按升序又排列一次。 table_array 的第一列中的數值可以為文本、數字或邏輯值。文本不區分大小寫。 如下圖所示,FALSE 即為range_lookup表示第一列的數值不必進行排序 range_lookup 為一邏輯值,指明函數 VLOOKUP 返回時是精確匹配還是近似匹配。如果為 TRUE 或省略,則返回近似匹配值,也就是說,如果找不到精確匹配值,則返回小于 lookup_value 的最大數值;如果 range_value 為 FALSE,函數 VLOOKUP 將返回精確匹配值。如果找不到,則返回錯誤值 #N/A。 說明 如果函數 VLOOKUP 找不到 lookup_value,且 range_lookup 為 TRUE,則使用小于等于 lookup_value 的最大值。 VLOOKUP 返回錯誤值 #N/A。 如果 lookup_value 小于 table_array 第一列中的最小數值,函數 如果函數 VLOOKUP 找不到 lookup_value 且 range_lookup 為 FALSE,函數 VLOOKUP 返回錯誤值 #N/A。 ----------------------------對于可能產生錯誤值的防范 將公式進行以下修改 =IF(C3=“",”查詢值為空,請填寫查詢值“,IF(ISERROR(VLOOKUP(C3,C6:F10,4,FALSE))=TRUE,”請檢查參數是否正確",VLOOKUP(C3,C6:F10,4,FALSE)))如下圖所示,如果查找時未指定名稱,則公式的計算結果為“查詢值為空,請填寫查詢值” 如下圖所示,因使用的是FALSE,精確查找,當查找值為“西瓜”時,因該值不在列表中,會產生#N/A 錯誤,但使用公式用,可提示有參數錯誤 上述公式,使用了函數ISERROR檢查是否有錯誤值,如果有興趣你也可以使用函數ERROR.TYPE返回錯誤值對應的數字,從而明確顯示是哪一類型的錯誤,錯誤值對應的數字如下表所示 呵呵,關于VLOOKUP就介紹到這里,祝大家工作愉快! 小波去噪舉例 MATLAB中用wnoise函數測試去噪算法 sqrt_snr=3;init=231434; [x,xn]=wnoise(3,11,sqrt_snr,init);% 加噪,信噪比為3 subplot(3,2,1),plot(x) title('original test function')subplot(3,2,2),plot(xn)title('noised function')lev=5; xd=wden(x,'heursure','s','one',lev,'sym8');%利用小波對一維信號進行降噪, XD為降噪后的%信號,CXD,LXD為XD的小波分解結構 % 's' or 'h'決定閾值的使用方式,SCAL決定閾值是%否隨噪聲變化:'one' 不調整,'sln'對第一層系%數的層噪聲分別進行估計和調整; 'mln'對各層%系數的層噪聲分別進行估計和調整; subplot(3,2,3),plot(xd) title('One de-noised function')xd=wden(x,'heursure','s','sln',lev,'sym8');subplot(3,2,4),plot(xd) title('Sln de-noised function')xd=wden(x,'sqtwolog','s','sln',lev,'sym8');% 固定閾值選擇算法去噪 subplot(3,2,5),plot(xd) title('Sqtwolog de-noised function') [c,l]=wavedec(x,lev,'sym8');subplot(3,2,6),plot(xd) title('CL de-noised function') MATLAB中圖像噪聲處理舉例 load sinsin; colormap('default');subplot(1,3,1),image(X);title('original image');axis('square');init=231434; randn('seed',init); X=X+18*randn(size(X));%產生噪聲信號 subplot(1,3,2),image(x);title('noised image');axis('square');[thr,sorh,keepapp]=ddencmp('den','wv',x);%自動生成小波去躁或壓縮的閾值選擇方案,也 %就是尋找默認值 [xc,cxc,lxc,perf0,perfl2]=wdencmp('gbl',x,'sym4',2,thr,sorh,keepapp);%使用全局閾值進行 %圖象降噪 subplot(1,3,3),image(xc);title('denoised image');axis('square') 可見,含躁圖像的噪聲含量很強,利用小波去躁,可以有效去除躁聲,同時保留了邊界。Wdencmp函數 [xc,cxc,lxc,perf0,perfl2]=wdencmp('gbl',x,'sym4',2,thr,sorh,keepapp)是使用小波進行一維或二維小波壓縮或降噪的函數。前面的語句是對于輸入的一維或二維信號X,使用全局正閾值THR,由小波系數閾值得到降噪或壓縮后的信號XC。附加的輸出變量[cxc,lxc]是XC的小波分解結構; [perf0,perfl2]是恢復和壓縮的L2范數百分比。使用小波'sym4'執行小波分解到第N=2層。Sorh是軟閾值或硬閾值。若keepapp=1,低頻系數不能進行閾值處理。第三篇:EXCEL查找與引用函數VLOOKUP的應用法及實例 詳解
第四篇:matlab小波變換函數的總結與程序