第一篇: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小波变换函数的总结与程序