MATLAB知识小结
  PjuqN0S4qpGM 2023年11月02日 53 0


MatLab 知识小结

matlab常用到的永久变量:

ans:计算结果的默认变量名。

i j:基本虚数单位。

eps:系统的浮点(F10a9Bg个oht):

inf: 无限大,例1/0

nan NaN:非数值(Not a number)

pi:圆周率n(n=3.1415926..)。

realmax:系统所能表示的最大数值。

realmin: 系统所能表示的最小数值,

nargin: 函数的输入参数个数:

nargout:函数的输出多数个数


matlab的所有运算都定义在复数城上。对于方根问题运算只返回处于第一象限的解。

matlab分别用左斜/和右/来表示“左除和“右除”运算。对于标量运算而言,这两者的作用没有区别:但对于矩阵运算来说,二者将产生不同的结果。



多项式的表示方法和运算:


p(x)=x^3-3x-5 可以表示为p=[1 0 –3 5],求x=5时的值用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)

多项式的加减法,低阶的多项式必须用首零填补,使其与高阶多项式有同样的阶次

多项式除法 [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 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实现,计算含有周期函数值的矢量的傅里叶变换

year=1900:10:1900;
 number=[78 91 105 ….每十年的人口数];
 x=1900:1:2000;
 y=interp1(year,number,x,’spline’);
 plot(year,numeber,’*’,x,y);grid on

然后使用更多的点进行傅里叶变换的逆变换,函数的使用格式如下:y=interpft(x,n) 其中x是含有周期函数值的矢量,并为等距的点,n为返同等间距点的个数。


求解一元函数的最小值

y=fminbnd('humps',0.3,1) humps为一内置函数

求解多元函数的最小值

函数fminserch用于求多元函数的最小值。它可以指定一个开始的矢量,并非指定一个区间。此函数返回一个矢量为此多元函数局部最小函数值对应的自变量



纹理成图功能:


由warp函数的纹理成图功能实现平面图像在空间三维曲面上的显示。

将文件名为flowers.tif的图像分别投影到圆柱形和球星表面上


i=imread('flowers.tif');
 [x,y,z]=cylinder;
 subplot(1,2,1),warp(x,y,z,i);
 [x,y,z]=sphere(50);
 subplot(1,2,2),warp(x,y,z,i);
 warp(x,y,z,i);

求函数的零点:


求函数humps在[1,2]区间上的零点 fzero(‘humps’,[1,2]);

也可以给一个初始值 fzero(‘humps’,0.9);

对于多项式可直接由roots求其根 roots(‘4*x^3+……’);

也可以用solve


c=sym('c','real');
 x=sym('x','real');
 s=solve(x^3-x+c)

函数定积分:


q=quadl(‘humps’,0,1) 求humps函数在0 1区间上的定积分,也可以用quad语句


二重积分首先计算内积分,然后借助内积分的中间结果再求出二重积分的值,类似于积分中的分步积分法。

Result=dblquad(‘integrnd’,xin,xmax.,ymin,ymax) integrnd为被积函数的名称字符串


符号积分运算int(f)

最精确的是符号积分法

计算s=∫12[∫01xydx]dy

syms x y 中间为空格,不能为逗号

s=int(int(‘x^y’,’x’,0,1),’y’,1,2) 引号可省略

vpa(s) 显示s的值

内积分限为函数的二重积分

I=∫14[∫√y2(x2+y2)dx]dy

符号法I=vpa(int(int(‘x^2+y^2’,’x’,sqrt(y),2),’y’,1,4)



微分运算(diff):


微分是描述一个函数在一点处的斜率,是函数的微观性质、因此积分对函数的形状在小范围内的改变不敏感,而微分很敏感。—个函数的小的变化,容易产生相邻点的斜率的大的改变。由干微分这个固有的困难.所以尽可能避免数值微分.特别是对实验获得的数据进行微分。在这种情况,最好用最小二乘曲线拟合这种数据,然后对所得到的多项式进行微分;或用另一种方法对点数据进行三次样条拟合,然后寻找样条微分,但是,有时微分运算是不能避免的,在MATLAB中.用函数diff汁算一个矢量或者矩阵的微分(也可以理解为差分)。

a=[1 2 3 3 3 7 8 9];

b=diff(a) 一次微分

bb=diff(a,2) 二次微分

实际上diff(a)=[a(2)-a(1),a(3)-a(2),……,a(n)-a(n-1)]

对于求矩阵的微分,即为求各列矢量的微分,从矢量的微分值可以判断矢量的单调性、是否等间距以及是否有重复的元素。

符号微分运算(diff):

syms x t a
 f =cos(a*x)
 df =diff(f) 由findsym的规则,隐式的指定对x进行微分
 dfa=diff(f,'a') 指定对变量a进行微分
 dfa=diff(f,'a',3) 三次微分
 diff函数不仅作用在标量上,还可以在矩阵上,运算规则就是按矩阵的元素分别进行微分
 syms a x
 A=[cos(a*x),sin(a*x),-sin(a*x),cos(a*x)];
 dA=diff(A)

微分方程dsolve:

在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) 给定了初值,独立变量设为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)’)


当字符表达式中含有多于一个的变量时,只有—个变量是独立变量。如果不告诉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 y
 f=x^2*y+y*x-x^2-2*x+1
 collect(f) 得到(-1+y)*x^2+(y-2)*x+1
 collect(f,y) 得到(x+x^2)*y+1-x^2-2*x
 expand函数 expand(f)将f展开,写成和的形式:
 syms x
 expand((x-1)^3) 得到x^3-3*x^2+3*x-1
 horner函数 horner(f)将f写成镶嵌套形式
 syms x
 horner(x^3-6*x^2) 得到(-6+x)*x^2
 factor函数 factor(f)将f转换成低阶有理多项式的乘积:
 syms x
 f=x^3-6*x^2+11*x-6
 factor(f) 得到 (x-1)*(x-2)*(x-3)
 simplify(f)函数综合化简:
 simple(f) 函数的最简形式
 syms x
 f=2*sin(x^2)+cos(3*x)
 simple(f) 如果不想看到中间过程,可z=simple(f) 有时使用两次simple命令可以得到最简式:
 如果想知道哪个简化命令得到最后结果,可以加一个参数how
 [z,how]=simple(f)


符号表达式的替换:

pretty函数有时也能起到同样的作用。

subs(f,new,old)
 f='a*x^2+b*x+c'
 subs(f,'t','x') 得到a*(t)^2+b*(t)+c subs是一个符号函数,返回一个符号变量
 subexpr函数有时matlab返回的符号表达式难以理解,用subexpr函数,可以将表达式中重复出现的子式用一个符号表示,从而简化表达形式
 c=sym('c','real');
 x=sym('x','real');
 s=solve(x^3-x+c) 
 a=subexpr(s) 得到sigma = -108*c+12*(-12+81*c^2)^(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(f) 显示函数的习惯书写形式



线性方程组的求解:


求解线性方程组,用反斜杠/


a=hilb(3)
 b=[1 2 3]'
 a/b

矩阵的特征值和特征向量:


用eig(v,d)函数,[v,d]=eig(A); 其中d将返回特征值,v返回相应的特征向量,缺省第二个参数将只返回特征值

为了观察更清楚,使用以前学过的替换函数,这里不用默认的sigma,而改用M,显式的代替繁琐的表达子式

syms a b c real
 A=[a b c; b c a; c a b];
 [v,d]=eig(A);

再用m替换d中的表达子式

vv=subexpr(v);
 vs=subs(vv,'m','sigma') 运行结果为
 vs =

 [ 1, 1, 1]
 [ -(c+(m)-a)/(c-b), -(c-(m)-a)/(c-b), 1]
 [ -(a-(m)-b)/(c-b), -(a+(m)-b)/(c-b), 1]


dd=subexpr(d);
 ds=subs(dd,’m’,’sigma’)
 运行结果为ds =

 [ (m), 0, 0]
 [ 0, -(m), 0]
 [ 0, 0, c+a+b]
 note 求特征值也可用以下命令
 f=poly(A) poly函数用来求A的特征多项式
 d=solve(f) solve(f)函数用来求多项式的解

 svd( )函数求矩阵的奇异值分解,将矩阵分解为两个正交矩阵和对角矩阵的乘积
 a=sym(hilb(2))
 [u,s,v]=svd(a)

代数方程和方程组:


代数方程的求解可用solve(f)命令,如果f不含=,matlab将给表达式置零。方程的未知量在默认的情况下由findsym决定或显式指出

syms a b c x
 solve(a*x^2+b*x+c) 以x为默认变量
 solve(a*x^2+b*x+c,a) 指定对a为变量
 求含有等号的方程的解(一定要加单引号)
 f=solve(‘cos(x)=sin(x)’)
 x=solve('exp(x)=tan(x)') 如果不能求得符号解,就计算可变精度解。
 求解方程组与单方程类似
 解一个三元一次方程
 v=solve('a*u^2+v^2','u-v=1','a^2-5*a+6')
 结果为v = 

 a: [4x1 sym] u: [4x1 sym] v: [4x1 sym]
 一些常用的符号运算

极限运算limit:

limit(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 n
 symsum(k) 从0到k求和
 symsum(k,0,n-1) 从0到n-1求和
 symsum(1/k^2,1,inf) 无限项求和
 泰勒级数taylor(f)
 taylor(f)表示求f的5阶talor展开,可以增加参数指定展开的阶数(默认式5),也可以对于多元函数指定展开的变量,还可以指定在哪个点展开
 syms x t
 taylor(exp(-x))
 taylor(log(x),6,1) 在1点的6阶taylor展开
 taylor(x^t,3,t) 对t的3阶taylor展开
 积分变换
 fourier变换和逆变换fourier(f)
 fourier分析可以将信号转换为不同频率的正弦曲线。可对离散数据进行分析,也可对连续时间系统进行分析,特别在信号和图形处理领域。离散变换(DFT)作用于有限数据的采集,最有效的是快速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 x
 fourier(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的函数,而不是缺省的x
 f=ifourier(F,u,v) 是关于u的函数f进行变换,而不是缺省的x,返回函数f是关于v的函数
 Laplace变换和逆变换laplace(f)
 应用于连续系统(微分方程)中,可以用来求解微分方程的初值问题
 laplace(F) 缺省独立变量t,缺省返回关于s的函数L
 laplace(F,t) 返回关于t的函数L,而不是缺省的s
 laplace(F,w,z) 对函数F的自变量w积分,返回关于z的函数L
 逆变换
 F=ilaplace(L) 缺省独立变量s,返回关于t的函数F
 F=ilaplace(L,y) 返回关于y的函数F,而不是缺省的t
 F=ilaplace(L,y,x) 对函数L的自变量y积分,返回关于x的函数F
 Z-变换和逆变换ztrans(f) 标量符号f的Z-变换
 F=ztrans(f) 缺省独立变量n,返回关于z的函数
 F=ztrans(f,w) 返回关于符号变量w的函数F,而不是缺省的z
 F=ztrans(f,k,w) 关于k的符号变量作Z-变换返回关于符号变量w的函数
 逆变换iztrans(F)
 f=iztrans(F) 或(F,k)或 (F,w,k)



符号绘图函数:


符号函数简易绘图函数ezplot(f)
 f可以包含单个符号变量x的字符串或表达式,默认画图区间(-2pi,2pi),如果f包含x和y,画出的图像是f(x,y)=0的图像,缺省区间是-2pi<x<2pi,-2pi<y<2pi。
 Ezplot(f,xmin,xmax)或ezplot(f,[xmin,xmax])绘制在xmin<x<xmax区间上图像
 syms x t
 ezplot('t*cos(t)','t*sin(t)',[0,4*pi])
 绘制符号图像函数fplot(fun,lims,tol,’linespec’,n)
 其中lims=[xmin,xmax]或[xmin,xmax,ymin,ymax] tol为指定相对误差,默认0.001 ‘linespec’指定绘图的线型 n指定最少以n+1个点绘图
 [x,y]=fplot(fun,lims,…) 只返回用来绘图的点,并不绘图,可以自己调用plot(x,y)来绘制图形。
 syms x
 subplot(2,2,1),fplot('humps',[0,1])
 f='abs(exp(x*(0:9))*ones(10,1))'
 subplot(2,2,2),fplot(f,[0,2*pi])
 subplot(2,2,3),fplot('sin(1./x)',[0.01,0.1],1e-3)
 matlab绘图
 二维图形的绘制
 plot 在(x,y)坐标下绘制二维图像支持多个x-y二元结构
 plot3 在(x,y,z)坐标下绘制三维图形
 loglog 在(x,y)对数坐标下绘制二维图形
 semilogx 在x为对数坐标,y为线性坐标的二维坐标中绘图
 semilogy 在x为线性坐标,y为对数坐标的二维坐标中绘图
 plotyy 在有两个y轴的坐标下绘图




plot用法:


plot(x,y,'--rs','linewidth',2,'markeredgecolor','k',...
 'markerfacecolor','g','markersize',10)
 plotyy用法
 plotyy(x1,y1,x2,y2) 以x1为标准,左轴为y轴绘制y1向量,x2为基准,右轴为y轴,绘制y2向量
 plotyy(x1,y1,x2,y2,fun) 用字符串fun指定的绘图函数(plot ,semilogx,semilogy,loglog,stem)
 plotyy((x1,y1,x2,y2,fun1,fun2)
 t=0:pi/20:2*pi;
 y=exp(sin(t));
 plotyy(t,y,t,y,'plot','stem') stem为二维杆图

 [ax,h1,h2]=plotyy(…) 返回左右两y轴的句柄(分别为ax(1) ax(2),以及在两坐标轴中生成的图形对象的句柄,分别为h1 h2
 t=0:900;
 A=1000;
 a=0.005;
 b=0.005;
 z2=cos(b*t);
 z1=A*exp(-a*t);
 [haxes,hline1,hline2]=plotyy(t,z1,t,z2,'semilogy','plot');
 axes(haxes(1))
 ylabel('semilog plot') 对数坐标
 axes(haxes(2))
 ylabel('linear plot')
 set(hline2,'linestyle','--')
 其他二维图形绘图指令
 bar(x,y) 二维条形图
 hist(y,n) 直方图
 histfit(y,n) 带拟和线的直方图,n为直方的个数
 stem(x,y) 火柴杆图
 comet(x,y) 彗星状轨迹图
 compass(x,y) 罗盘图
 errorbar(x,y,l,u) 误差限图
 feather(x,y) 羽毛状图
 fill(x,y,’r’) 二维填充函数以红色填充
 pie(x) 饼图
 polar(t,r) 极坐标图 r为幅值向量,t为角度向量
 t=0:0.1:8*pi;
 r=cos(3*t/2)+1/2;
 polar(t,r),xlabel('polar 指令')
 quiver(x,y) 磁力线图
 stairs(x,y) 阶梯图
 loglog(x,y) 对数图
 semilogx semilogy 半对数图


matlab三维作图:


plot3(x,y,z) 三维线条图
 t=0:pi/50:15*pi;
 plot3(sin(t),cos(t),t,'r*') 与plot相似
 v=axis 返回各个轴的范围
 text(0,0,0,'origin') 在某个坐标点加入文字
 plot3 增加维数可以一次画多个图,使所个二维图形眼一个轴排列


三维网线图的绘制:


mesh(x,y,z) 网格图
 mesh(x,y,z,c) 四维作图,(x,y,z)代表空间三维,c代表颜色维
 mesh(…,’property name’,property value,…) 设置曲面各属性的值
 [x,y,z]=sphere(12);
 mesh(x,y,z),hidden off 曲面设置为透明
 meshc(x,y,z) 画网格图和基本的等值线图
 meshz(x,y,z) 画包含零平面的网格图
 waterfall(x,y,z) 与mesh一样,只是在效果上它的网格线只在x轴一个方向出现,呈瀑布状水线
 两个变量的标量指令meshgrid(x)或meshgrid(x,y) (p179)
 将两个一维向量生成两个二维向量,以便进行z=f(x,y)运算,算出z的所有值,z为x y的标量指令
 [X,Y]=meshgrid(x) meshgrid(x,x)的简略式
 [X,Y]=meshgrid(x,y)
 [X,Y,Z]=meshgrid(x,y,z) 用于三维图形的绘制
 [x,y]=meshgrid([-2:0.1:2]);
 z=x.*exp(-x.^2-y.^2);
 plot3(x,y,z)
 surf(x,y,z,c) 着色表面图
 surf(x,y,z) 隐含着c=z
 surf(z)隐含着x,y的值为surf指令根据z的尺寸自动生成
 surfc 画出具有基本等值线的曲面图
 surfl 画出一个具有亮度的曲面图
 shading flat 网线图的某整条线段或曲面图的某个贴片都着一种颜色
 shading interp 某一线段或贴片上各点的颜色由线或片的顶端颜色经线性插值而得
 曲面图不能设成网格图那样透明,但需要时,可以在孔洞处将数据设成nun




等高线的绘制:


在二维空间绘制等高线contour
 contour(x,y,z,n) 绘制n条等值线(n可省略)
 contour(x,y,z,v) 在向量v所指定的高度上绘制等高线(可省)
 c=contour(x,y,z) 计算等值线的高度值
 c=contourc(x,y,z,n) 计算n条等高线的x-y坐标数据
 c=contourc(x,y,z,v) 计算向量v所指定的等高线的x-y坐标数据
 clabel(c) 给c阵所表示的等高线加注高度标识
 clabel(c,v) 给向量v所指定的等高线加注高度标识
 clabel(c,’manual’) 借助鼠标给点中的等高线加注高度标识
 三维空间绘制等高线contour3(x,y,z)
 [x,y,z]=peaks(30);
 contour3(x,y,z,16,'g')
 二元函数的伪彩图pcolor(x,y,z)
 是指令surf的二维等效指令,代表伪彩色,可与contour单色等值线结合画彩色等值线图
 [x,y,z]=peaks(30);
 pcolor(x,y,z); 伪彩色
 shading interp 颜色插值,使颜色平均渐变
 hold on,contour(x,y,z,20,'k')... 画等值线
 colorbar('horiz') 水平颜色标尺
 c=contour(x,y,z,8);
 clabel(c) 标注等高线
 矢量场图(速度图)quiver
 用于描述函数z=f(x,y)在点(x,y)的梯度大小和方向
 [X,Y]=meshgrid(x,y) X,Y为Z阵元素的坐标矩阵
 [U,V]=gradient(Z,dx,dy) U,V分别为Z对x对y的导数,dx dy是x y方向上的计算步长
 quiver(X,Y,U,V,s,’linespec’,’filled’) U,V为必选项,决定矢量场图中各矢量的大小和方向,s为指定所画箭头的大小,缺省时取1,linespec为字符串,指定合法的线形和彩色,filled用于填充定义的绘图标识符
 [x,y]=meshgrid(-2:.2:2,-1:.15:1);
 z=x.*exp(-y.^2);
 [px,py]=gradient(z,.2,.15);
 contour(x,y,z);
 hold on,quiver(x,y,px,py),axis image
 多边形的填色fill(x,y,c)
 c定义颜色字符串,可以是’r’,’b’等,也可以用RGB三色表示[r,g,b]值为0-1
 图形的四维表现




【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
PjuqN0S4qpGM