1、MATLAB 常用函数使用说明matlab 常用到的永久变量ans:计算结果的默认变量名。i j:基本虚数单位。eps:系统的浮点(F10a9Bg 个 oht):inf: 无限大,例 1/0nan NaN:非数值(N 航 a nmnb 谢)pi:圆周率 n(n31415926 )。realmax:系统所能表示的最大数值。realmin: 系统所能表示的最小数值,nargin: 函数的输入参数个数:nargout:函数的输出多数个数matlab 的所有运算都定义在复数城上。对于方根问题运算只返回处于第一象限的解。matlab 分别用左斜和右来表示“ 左除和“右除”运算。对于标量运算而言,这两者的
2、作用没有区别:但对于矩阵运算来说,二者将产生不同的结果。多项式的表示方法和运算p(x)=x3-3x-5 可以表示为 p=1 0 3 5,求 x5 时的值用 plotval(p,5)也可以求向量:a=3 4 5,plotval(p,a)函数 roots 求多项式的根 roots(p)p=1 0 -3 5;r=roots(p)由根重组多项式 poly(根)q=poly(r)real(q) 有时会产生虚根,这时用 real 抽取实根即可conv(a,b)函数多项式乘法(执行两个数组的卷积)a=1 2 3 4;b=1 4 9 16;c=conv(a,b)多项式的加减法,低阶的多项式必须用首零填补,使其
3、与高阶多项式有同样的阶次多项式除法 q , r=deconv(c , b) 表示 b/c q 为商多项式,r 为余数多项式的导数 polyder(f)f= 2 4 5 6 2 1;s=polyder(f)多项式的曲线拟合x=1 2 3 4 5;y=5.6 40 150 250 498.9;p=polyfit(x,y,n) 数据的 n 次多项式拟合 poly:矩阵的特征多项式、根集对应的多项式x2=1:0.1:5; n 取 1 时,即为最小二乘法y2=polyval(p,x2); 计算多项式的值(polyvalm 计算矩阵多项式)plot(x,y,*,x2,y2);grid on最小二乘法x=1
4、 2 3 4 5;y=5.6 40 150 250 498.9;plot(x,y,*),lsline多项式插值YI=interp1(x,y,XI,method) 一维插值(XI 为插值点的自变量坐标向量,可以为数组或单个数。method 为选择插值算法的方法,包括:linear(线性插值)cubic(立方插值)spline(三次样条插值)nearst(最近临插值)一维博里叶变换插值使用函数 interpft 实现,计算含有周期函数值的矢量的傅里叶变换然后使用更多的点进行傅里叶变换的逆变换,函数的使用格式如下:y=interpft(x,n) 其中 x是含有周期函数值的矢量,并为等距的点,n 为返
5、同等间距点的个数。求解一元函数的最小值y=fminbnd(humps,0.3,1) humps 为一内置函数求解多元函数的最小值函数 fminserch 用于求多元函数的最小值。它可以指定一个开始的矢量,并非指定一个区间。此函数返回一个矢量为此多元函数局部最小函数值对应的自变量纹理成图功能由 warp 函数的纹理成图功能实现平面图像在空间三维曲面上的显示。将文件名为 flowers.tif 的图像分别投影到圆柱形和球星表面上 1. i=imread(flowers.tif); 2. x,y,z=cylinder; 3. subplot(1,2,1),warp(x,y,z,i); 4. x,y,
6、z=sphere(50); 5. subplot(1,2,2),warp(x,y,z,i); 6. warp(x,y,z,i);复制代码求函数的零点求函数 humps 在1,2区间上的零点 fzero(humps,1,2);也可以给一个初始值 fzero(humps,0.9);对于多项式可直接由 roots 求其根 roots(4*x3+);也可以用 solvec=sym(c,real);x=sym(x,real);s=solve(x3-x+c)函数定积分q=quadl(humps,0,1) 求 humps 函数在 0 1 区间上的定积分,也可以用 quad 语句二重积分 首先计算内积分,然后
7、借助内积分的中间结果再求出二重积分的值,类似于积分中的分步积分法。Result=dblquad(integrnd,xin,xmax.,ymin,ymax) integrnd 为被积函数的名称字符串符号积分运算 int(f),最精确的是符号积分法计算 s=1201xydxdysyms x y 中间为空格,不能为逗号s=int(int(xy,x,0,1),y,1,2) 引号可省略vpa(s) 显示 s 的值内积分限为函数的二重积分I=14y2(x2+y2)dxdy符号法 I=vpa(int(int(x2+y2,x,sqrt(y),2),y,1,4)微分运算(diff)微分是描述一个函数在一点处的斜
8、率,是函数的微观性质、因此积分对函数的形状在小范围内的改变不敏感,而微分很敏感。 个函数的小的变化,容易产生相邻点的斜率的大的改变。由干微分这个固有的困难所以尽可能避免数值微分特别是对实验获得的数据进行微分。在这种情况,最好用最小二乘曲线拟合这种数据,然后对所得到的多项式进行微分;或用另一种方法对点数据进行三次样条拟合,然后寻找样条微分,但是,有时微分运算是不能避免的,在 MATLAB 中用函数 diff 汁算一个矢量或者矩阵的微分 (也可以理解为差分)。a=1 2 3 3 3 7 8 9;b=diff(a) 一次微分bb=diff(a,2) 二次微分实际上 diff(a)=a(2)-a(1)
9、,a(3)-a(2),a(n)-a(n-1)对于求矩阵的微分,即为求各列矢量的微分,从矢量的微分值可以判断矢量的单调性、是否等间距以及是否有重复的元素。符号微分运算(diff)syms x t af =cos(a*x)df =diff(f) 由 findsym 的规则,隐式的指定对 x 进行微分dfa=diff(f,a) 指定对变量 a 进行微分dfa=diff(f,a,3) 三次微分diff 函数不仅作用在标量上,还可以在矩阵上,运算规则就是按矩阵的元素分别进行微分syms a xA=cos(a*x),sin(a*x),-sin(a*x),cos(a*x);dA=diff(A)微分方程 ds
10、olve在 matlab 中,符号表达式中包含字母 D 用来表示微分运算,D2,D3 分别对应第二,第三阶导数,D2y 表示 d2y/dt2 把 t 缺省了y=dsolve(Dy=f(y) 单个方程,单个输出u,v=dsolve(Du=f(u,v),Dv=g(u,v) 2 个方程,2 个输出s=dsolve(Dx=f(x,y,z),Dy=g(x,y,z),Dz=k(x,y,z)s.x s.y s.z 3 个方程,架构数组dsolve(Dx=-a*x) 结果:C1*exp(-a*t) 没给定初值,所以结果中含参变量x=dsolve(Dx=-a*x,x(0)=1,s) 结果 exp(-a*s) 给
11、定了初值,独立变量设为 s计算多元函数的梯度fx=gradient(f) f 是一个矢量返回 f 的一维数值梯度,fx 对应于 x 方向的微分。x,y=meshgrid(-2:.2:2,-2:.2:2);z=x.*exp(-x.2-y.2);px,py=gradient(z,.2,.2);contour(z),hold on 画等值线quiver(px,py)matlab 字符串运算利用 sym 命令创建表达式f=sym(cos(x)+sin(x)或 syms x , f=cos(x)+sin(x)diff(f) 求其导数(也可直接用命令 f=diff(cos(x)+cos(y)当字符表达式中
12、含有多于一个的变量时,只有个变量是独立变量。如果不告诉 matlab 哪一个变量是独立变量,则可以通过 findsym 命令询问利用 findsym 命令查询独立变量f=sym(sin(a*x)+b)findsym(f,1) 给出独立变量(一个变量,如果为 2 则给出 2 个变量)findsym(f) 给出所有变量符号表达式的化简和替换collect 函数 collect(f,v)表示将 f 表示为关于符号变量 v 的多项式形式,即关于 v 合并同类项,v 缺省,则用 findsym 确定的缺省变量syms x yf=x2*y+y*x-x2-2*x+1collect(f) 得到(-1+y)*x
13、2+(y-2)*x+1collect(f,y) 得到(x+x2)*y+1-x2-2*xexpand 函数 expand(f)将 f 展开,写成和的形式syms xexpand(x-1)3) 得到 x3-3*x2+3*x-1horner 函数 horner(f)将 f 写成镶嵌套形式syms xhorner(x3-6*x2) 得到(-6+x)*x2factor 函数 factor(f)将 f 转换成低阶有理多项式的乘积syms xf=x3-6*x2+11*x-6factor(f) 得到 (x-1)*(x-2)*(x-3)simplify(f)函数综合化简simple(f) 函数的最简形式syms
14、 xf=2*sin(x2)+cos(3*x)simple(f) 如果不想看到中间过程,可 z=simple(f) 有时使用两次 simple 命令可以得到最简式如果想知道哪个简化命令得到最后结果,可以加一个参数 howz,how=simple(f)符号表达式的替换subs(f,new,old)f=a*x2+b*x+csubs(f,t,x) 得到 a*(t)2+b*(t)+c subs 是一个符号函数,返回一个符号变量subexpr 函数有时 matlab 返回的符号表达式难以理解,用 subexpr 函数,可以将表达式中重复出现的子式用一个符号表示,从而简化表达形式c=sym(c,real);
15、x=sym(x,real);s=solve(x3-x+c)a=subexpr(s) 得到 sigma = -108*c+12*(-12+81*c2)(1/2)a = 1/6*sigma(1/3)+2/sigma(1/3) -1/12*sigma(1/3)-1/sigma(1/3)+1/2*i*3(1/2)*(1/6*sigma(1/3)-2/sigma(1/3) -1/12*sigma(1/3)-1/sigma(1/3)-1/2*i*3(1/2)*(1/6*sigma(1/3)-2/sigma(1/3)pretty 函数有时也能起到同样的作用。Pretty(f) 显示函数的习惯书写形式线性方程
16、组的求解求解线性方程组,用反斜杠a=hilb(3)b=1 2 3ab矩阵的特征值和特征向量用 eig(v,d)函数,v,d=eig(A); 其中 d 将返回特征值,v 返回相应的特征向量,缺省第二个参数将只返回特征值syms a b c realA=a b c; b c a; c a b;v,d=eig(A);为了观察更清楚,使用以前学过的替换函数,这里不用默认的 sigma,而改用 M,显式的代替繁琐的表达子式vv=subexpr(v);vs=subs(vv,m,sigma) 运行结果为vs = 1, 1, 1 -(c+(m)-a)/(c-b), -(c-(m)-a)/(c-b), 1 -(
17、a-(m)-b)/(c-b), -(a+(m)-b)/(c-b), 1再用 m 替换 d 中的表达子式dd=subexpr(d);ds=subs(dd,m,sigma)运行结果为 ds = (m), 0, 0 0, -(m), 0 0, 0, c+a+bnote 求特征值也可用以下命令f=poly(A) poly 函数用来求 A 的特征多项式d=solve(f) solve(f)函数用来求多项式的解svd( )函数求矩阵的奇异值分解,将矩阵分解为两个正交矩阵和对角矩阵的乘积a=sym(hilb(2)u,s,v=svd(a)代数方程和方程组代数方程的求解可用 solve(f)命令,如果 f 不含
18、,matlab 将给表达式置零。方程的未知量在默认的情况下由 findsym 决定或显式指出syms a b c xsolve(a*x2+b*x+c) 以 x 为默认变量solve(a*x2+b*x+c,a) 指定对 a 为变量求含有等号的方程的解(一定要加单引号)f=solve(cos(x)=sin(x)x=solve(exp(x)=tan(x) 如果不能求得符号解,就计算可变精度解。求解方程组与单方程类似解一个三元一次方程v=solve(a*u2+v2,u-v=1,a2-5*a+6)结果为 v =a: 4x1 sym u: 4x1 sym v: 4x1 sym极限运算 limitlimit
19、(f) 求 x 到 0 的极限limit(f,x,a)或 limit(f,a) 求 x 到 a 的极限limit(f,a,left) limit(f,a,right) 求 x 到 a 的左极限和右极限limit(f,inf) 求 x 趋于无穷的极限符号求和 symsum(s)symsum(s) 以默认的 findsym 决定的变量求和symsum(s,v) 以 s 中指定的变量 v 求和symsum(s,a,b) symsum(s,v,a,b) 从 a 到 b 的有限项求和syms k nsymsum(k) 从 0 到 k 求和symsum(k,0,n-1) 从 0 到 n1 求和symsum
20、(1/k2,1,inf) 无限项求和泰勒级数 taylor(f)taylor(f)表示求 f 的 5 阶 talor 展开,可以增加参数指定展开的阶数(默认式 5) ,也可以对于多元函数指定展开的变量,还可以指定在哪个点展开syms x ttaylor(exp(-x)taylor(log(x),6,1) 在 1 点的 6 阶 taylor 展开taylor(xt,3,t) 对 t 的 3 阶 taylor 展开fourier 变换fourier 分析可以将信号转换为不同频率的正弦曲线。可对离散数据进行分析,也可对连续时间系统进行分析,特别在信号和图形处理领域。离散变换(DFT)作用于有限数据的
21、采集,最有效的是快速 fourier 变换(FFT)F=fourier(f) 独立变量 x,返回关于参数 w 的函数F=fourier(f,v) 返回函数 F 关于符号对象 v 的函数F=fourier(f,u,v) 对关于 u 的函数 f 进行变换,而不是缺省的 w,返回函数 F 是关于 v 的函数syms t v w xfourier(1/t)fourier(exp(-t)*sym(Heaviside(t),v)fourier(diff(sym(F(x),x,w)Fourier 逆变换f=ifourier(F) 缺省独立变量 w,返回关于 x 的函数对 w 进行积分f=ifourier(F,v) 返回函数 f 是关于符号对象 v 的函数,而不是缺省的 xf=ifourier(F,u,v) 是关于 u 的函数 f 进行变换,而不是缺省的 x,返回函数 f 是关于 v 的函数