Matlab 知识小结

matlab常用到的永久变量。
ans:计算结果的默认变量名。
i j:基本虚数单位。
eps:系统的浮点(F10a9Bg个oht):
inf: 无限大,例1/0
nan NaN:非数值(N航a nmnb谢)
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

多项式插值(p158)
YI=interp1(x,y,XI,’method’) 一维插值
(XI为插值点的自变量坐标向量,可以为数组或单个数。
method为选择插值算法的方法,包括:
linear(线性插值)
cubic(立方插值)
spline(三次样条插值)
nearst(最近临插值)

例如:人口预测
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

一维博里叶变换插值使用函数interpft实现,计算含有周期函数值的矢量的傅里叶变换
然后使用更多的点进行傅里叶变换的逆变换,函数的使用格式如下: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)

符号表达式的替换
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函数有时也能起到同样的作用。
Pretty(f) 显示函数的习惯书写形式

线性方程组的求解
求解线性方程组,用反斜杠/
a=hilb(3)
b=[1 2 3]’
a/b

矩阵的特征值和特征向量
用eig(v,d)函数,[v,d]=eig(A); 其中d将返回特征值,v返回相应的特征向量,缺省第二个参数将只返回特征值
syms a b c real
A=[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]
[ -(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+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: [4×1 sym] u: [4×1 sym] v: [4×1 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。 <br=””>Ezplot(f,xmin,xmax)或ezplot(f,[xmin,xmax])绘制在xmin<x<xmax区间上图像 <br=””>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
图形的四维表现

Advertisements

Journey to Hidden Markov Model (HMM)

Day1: a quick peek of the topic and find some useful information links:

My recommendation:

http://readpaul.com/blog/370.html

HMM学习笔记:初识隐马尔科夫模型

http://www.52nlp.cn/hmm-learn-best-practices-one-introduction

HMM学习最佳范例一:介绍

 

HMM : Viterbi algorithm

http://homepages.ulb.ac.be/~dgonze/TEACHING/viterbi.pdf

 

HMM intro

http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/hmms/s2_pg4.html

 

Once we estanblished the HMM with all the known initial values, transition matrix and the emission matrix (observation matrix), we will be able to guess the most possible route using Viterbi algorithm.

Bingo. Solved. 🙂