12天的努力,我看完了586页书,学了MATLAB,过得很累,但我心里很舒坦。我不用再为别的事情烦心了,因为我在一门心思的学习,我花了我将近所有的课余时间。只有这样,我才能用自己身体上的累来掩盖我自己心里面的累。这么多年了,几乎每天我都在自己的挣扎中度过。还好,一切就快过去,我有我自己的生活。我不要可怜,我不要虚心假意,我只要我自己过得好。别人能那么自私的对我,我为什么还要那样对他,值得吗?其实,没有人懂我的心,也没有人懂我,我做的这一切,不会有人知道,因为它永远的埋在了我的心里。风,带走我的思念吧!
这纯属瞎扯淡,不用理会我的牢骚。下面是我这12天的笔记,如果有爱好MATLAB或者正在学习的再或者想学的,我希望你们能看看我的笔记,这对你们会有帮助的,我相信。因为这是我的汗水和心血!
1 概述安装介绍
略
2 矩阵和数组
2.1 创建特殊矩阵函数
Compan 伴随矩阵
Diag 对角矩阵
Eye 单位矩阵
Gallery 测试矩阵
Hadamard hadamard矩阵
Hilb hilb矩阵
Invhilb invhilb矩阵
Magic 魔方矩阵
Ones 全一矩阵
Rand 均匀分布随机矩阵
Randn 正态分布随机矩阵
Rosser 经典对称特征测试矩阵
Wilkinson wilkinson特征值测试矩阵
Zeros 全零矩阵
注:diag(A,n)以向量A为主对角线为基准偏移n个位置
2.2 矩阵连接
水平 c=[a,b]或者c=[a b]
垂直 c=[a;b]
连接函数
Cat 指定方向
Cat(1,a,b)水平
Cat(2,a,b)垂直
Horzcat 水平方向
Vertcat 垂直方向
Repmat 对现有矩阵复制粘贴
Blkdiag 以对角阵方式重组
2.3 改变矩阵形状
Reshape 制定行列重排
Rot90 逆时针90
Filplr 垂直方向为轴旋转180
Flipud 水平方向为轴旋转180
Flipdim 指定方向为轴翻转矩阵
2.4 向量生成函数
Linspace(a,b)首尾为a,b的100个数
Linspace(a,b,n)
Logspace(a,b)以10为底
Logspace(a,b,n)
Logspace(a,pi)
2.5 矩阵信息的获取
Isempty 判断为空
Isscalar 判断为标量
Isvector 判断向量
Issparse 判断稀疏矩阵
Isa 判断指定数据类型
Iscell 判断元胞数组类型
Iscellstr 元胞字符串数组类型
Isfloat 判断浮点数
Isinteger 判断×××类型
Islogical 判断逻辑类型
Isnumeric 判断数值类型
Isreal 判断实数类型
Isstruct 判断结构体类型
Length 最长维长度
Ndims 维数
Numel 元素个数
Size 指定维长度
2.6 高维矩阵
Squeeze 删除大小为1的维
Flipdim(a,n) 翻转,第n维为基准
Shiftdim(a,n) 移动数组,前n维到右边
Permute(a,order)按order向量重排
3 数据类型
3.1 数值类型
复数:i,j等价
无穷:inf,-inf
非数:NaN
0*inf=nan
Isnan判断非数
3.2 逻辑类型
Ture/false 设置真假
Logical 数值转换成逻辑
&,|,~,xor,any,all 逻辑运算符
&&,|| 短路式运算符
==,~=,<,>,<=,>= 关系运算符
Strcmp,strncmp,strcmpi,strncmpi字符串比较
3.3 字符与字符串
创建可用到strcat
二维字符数组创建时每行字符列相同
Deblank 提取字符串,删除末尾空格
比较函数:Strcmp,strncmp,strcmpi,strncmpi加n的是比较前n个字符,加i的不分大小写,返回0/1
3.4 元胞
创建:直接赋值方式;cell函数
包含的元素不用()而用{}
Celldisp 显示具体内容
Cellstr 用于字符串元胞数组
Length 查询元胞长度
Iscell 判断是否为元胞类型
Char 元胞数组到字符数组转变
3.5 构架
构架是带有域的数组
创建:直接创建;struct函数
4 MATLAB数值运算
4.1 矩阵基本运算
加减简单
乘法(K*M)*(M*N)才可行
除法分为左除和右除,值不同
求幂 要求方阵
按位运算 .* ./ .\ .^
4.2 关系运算和逻辑运算
关系运算符:> < >= <= == ~=
逻辑运算符:& | && || ~
异或:xor
数位逻辑与:bitand(a,b)
数位逻辑或:bitor(a,b)
数位逻辑非:bitcmp(a,n)
数位异或:bitxor(a,b)
关系逻辑函数:
Xor(a,b)异或
Any(a)或
All(a)与
Isaqual(a,b)对应相等为1
Ismember(a,b)a元素属于b相应位置为1
4.3 运算符优先级
略
5 绘图
5.1 相关函数
管理类:figure、subplot、zoom、hold、view、rotate
生成类:plot、line、stem、polar、fill、plotyy、plot3、surf、surfc、mesh、meshz、contour、contour3、contourf、waterfall、cylinder
注释和特性类:xlabel、ylabel、zlabel、text、text3、title、legend、box、set、grid、axes、axes equal、axes off、colorbar、clabel、colormap
5.2 基本绘图指令
Polar 极坐标中画圆
Polar(t’,r1)若在一个图中画几个图形用[]分别括起来,如:
[t’ t’],[r1 r2]
线形设计:
线形:- -. -- :
颜色:r g b c m y k w
点标记:+ o * . x s d h p > < ^ v
多图绘制:subplot
双轴绘图:plotyy
5.3 图形标注
函数:title、xlabel、ylabel、zlabel、legend(图例)、colorbar(色彩条)、annotation(标注元素)
对齐属性值:
HorizontalAlignment(水平):left、center、right
VerticalAlignment(垂直):middle、top、cap、basline、battom
封闭区间填充:fill(a,b,‘c’)在使用之前使用hold命令
5.4 模式化绘图
柱状图:bar或barh其模式有mode、stacked(堆在一个柱中)加引号
面积图:area
饼图:pie
直方图:hist(data,n) n:分割区间数
玫瑰图:rose(data,n)
离散数据绘图:stem
阶梯图:stairs
等高线图:contourf(填充式)
contour(一般式)
标注:colorbar填充,clable普通
罗盘图:compass
羽毛图:feather
向量场:quiver
函数绘图:涉及函数句柄
flplot(fun,limits)
ezplot(fun,[xmin,xmax,ymin,ymax]
ezpolar(fun,[a,b])
ezcontour(fun)
ezcontourf(fun)
5.5 三维绘图
(1) 数据准备
(2) 绘图区创建
(3) 绘图
(4) 设置视角
(5) 设置颜色表
(6) 设置光照效果
(7) 设置坐标轴和比例
(8) 标注图形
(9) 保存打印或导出
Plot3:曲线
Mesh(X,Y,Z):曲面
Meshc在mesh的基础画等高线
Meshz在mesh的基础上垂直连XY面
Surf(X,Y,Z)
Surfc等高线
Surfl(X,Y,Z,S)加光照效果
曲线旋转成面:
[X,Y,Z]=cylinder(R,N) N:线的条数
柱状图:bar3(data,‘mode’)
饼状图:pie3
离散点图:scater3和stem3
向量场图:quiver3(X,Y,Z,U,V,W,S)其中S为缩放比例
等高线图:contour3(X,Y,Z,n)
其中n为等高线划分的条数
函数绘图:
eplot3(funx,funy,funz,[tmin,tmax])指定范围的三维曲线
emesh(fun,domain)网线曲面
ezmeshc(fun,domain)带等高线
ezsurf(fun,domain)填充曲面
ezsurfc(fun,domain)带等高线
其中domain=[xmin,xmax,ymin,ymax]
显示控制:
Hidden:设置显示挡住的实体图形
Axes:坐标轴比例设置
View:设置视角
着色:加一指示颜色的数组
Colormap:颜色索引范围的设定
Shading:过渡设置,其参数有faceted,flat和interp
Light:光照设置,参数有color,style(infinit和local)和position
Lighting:flat,gouraud,phong,off
Material:质感设置,其参数有shiny,dull,(光泽)metal(金属)
6 图形对象和句柄
6.1 Matlab图形对象
最上层:root
图形窗口:figure,包括轴对象(Axes)和用户界面对象(UI)等
UI:如按钮、菜单、工具栏等
Axes:内核对象(core objects)、图形对象(plot objects)、组对象(group objects)、注释对象(annotation objects)
内核对象:line,patch,text,rectangular,surface,p_w_picpath,
light等
绘图对象:内核的预定义组合
组对象:允许用户将axes的数个子对象看成一个整体,hggroup和hgtransform两种
注释对象:箭头、文本、文本框、线、矩形等。Plot edit和insert menu添加,也可用函数annotation
图形对象属性:
Busyaction:控制回调函数中断方式
ButtonDownFcn:单击按钮的回调函数
Children:所有子对象的句柄列表
Parent:父对象句柄
CreateFcn:创建对象时执行的回调
DeleteFcn:删除对象时执行的回调
HitTest:单击时能否成为当前对象
Interruptible:回调函数是否被中断
Selected:对象是否被选中
SelectionHighlight:选中是否高亮
Tag:对象标签
Type:对象类型
UserData:交互数据
Visible:对象是否可见
6.2 MATLAB对象句柄
对象句柄:ID标示的机制,由MATLAB系统分配、唯一的标识对象的double型数值
寻访:对象句柄唯一对应
指定函数句柄:@和str2func
Get:获取当前窗口、轴和对象
Gcf:返回当前窗口句柄
Gca:返回当前轴句柄
Gco:返回当前对象句柄
还可以用set函数来设定
Findobj:以属性值为索引搜索
Copyobj:MATLAB对象的复制
Delete:对象的删除
6.3 设置和查询对象属性
Set(object_handle,’PropertyName’,’NewPropertyValue’)对象属性的设置
Returned_value=Get(object_handle,’propertyName’)属性查询
默认属性的设置加前缀default
6.4 图形窗口对象(Figure)
位置属性:Position
单位属性:unit,默认pixels(像素)
色彩属性:
Color:背景色,RGB
Colormap:色彩映像表,(n*3)RGB
FixedColors:线、字符色,RGB
MinColormap:最少色彩,标量
ShareColors:色彩资源能否共享,[{on}|off]
Dithermap:混合***,(n*3)RGB
DithermapMode:混合模式,[auto{manual}]
绘制窗口的类型:
BackingStore,DoubleBuffer,Renderer和RendererMode
预定义光标形状(15种)
自定义光标属性:
Pointer:custom表示自定义
PointerShapeCData:1黑2白NaN透明
PointerShapeHotSpot:光标热点
6.5 轴对象(Axes)
位置属性Position和单位属性Units
单轴对象常用控制属性:
XLim,YLim,ZLim:确定轴范围
XLimMode…:轴范围模式
XTick…:确定轴刻度位置
XTickMode…:刻度位置模式
XTickLabel…:刻度标记
XTickLabelMode…:刻度标记模
XDir…:轴方向
多轴重叠:subplot或者直接在图形窗口另行创建一个专门用于容纳注释对象的坐标轴
自动模式属性(照相机属性):
CameraPosition:相机位置[x,y,z]
CameraPositionMode:位置取值模式
CameraTarget:目标[x,y,z]
CameraTargetMode:目标模式
CameraUpVector:正位向量
CameraUpVectorMode:正位向量模式
CameraViewAngle:视角【0 180】
CameraViewAngleMode:视角取值模式
Projection:投影方式
6.6 图形输出控制
NextPlot属性值:new、add、replace、 replacechildren
通过hold on和hold off可以设定图形窗口对象和轴对象的属性设置为add和replace。
7 程序设计
7.1 M文件
M文件就是一系列相关代码组成的一个扩展名为.m的文件。分为脚本文件和函数文件两类。
脚本文件不自带参数;
函数文件以function…开始
函数工作区间:Function workspace
M文件结构:函数声明行、H1行、帮助文本、编写和修改注释、函数体
P-码文件:为M文件生成的内部伪代码
P-码文件的预生成函数为Pcode,格式:pcode Func_name当前路径
Pcode Func_name-inplace M文件目录
对P-码文件的操作:
Inmem:列出所有内存中P-码文件名
Clear Func_name:清楚某个p-码文件
Clear function:清楚所有p-码文件
7.2 函数
分为M-函数文件和匿名函数
一个M文件只能有1个主函数,多个子函数
主函数还分为:私用函数和重载函数
嵌套函数:多平行和多层嵌套
7.3 变量
变量名区分大小写;
最多包含63个字符;
必须以字母开始起名,后可为字母、下划线;
不允许出现标点符号。
17个系统关键字:break、case、catch、continue、else、elseif、end、for、function、globle、if、otherwise、persistent、return、switch、try、while
可在命令窗口输入iskeyword显示。
特殊变量:ans,beep,pi,eps,inf,NaN(nan,i(j),nargin(输入个数),nargout(输出个数),realmin,realmax,bitmax,varargin(可变的函数输入参数个数),varargout
分为局部变量、全局变量(globle)、永久变量(persistent)
Inputname(n):第n个输入变量的调用名
7.4 程序结构
分为顺序结构、循环结构(for或while)和分支结构(if或switch)
7.5 程序控制语句
结束循环:continue、break、return
Continue和break:结束本次循环
Warning:错误警告语句
Error和errordlg(显示对话框)
Try…catch:try中有错是执行catch语句
Input和keyboard:输入控制语句
8 程序调试、优化和出错处理
8.1 调试
调试(debug):去除bug
Bug:语法错误、逻辑错误、异常
Debug函数:
Dbstop:设置断点
Dbclear:清除断点
Dbcout:重新执行
Dbdown/dbup:变更当前工作空间
Dbmex:MEX文件调试
Dbstack:列出函数调用关系
Dbstatus:列出所有断点
Dbstep:单步或多步执行
Dbtype:列印M文件
Dbquit:退出调试模式
Debug辅助函数:
Echo:在命令窗口显示当前执行代码
Disp:显示变量
Sprintf/fprintf:指定格式显示文本
Whos:列出工作空间中所有变量
Size:显示变量的大小
Keyboard:中断程序执行,等待输入
Return:结束函数执行
Warning:引发、显示指定的警告
Error:引发、显示指定的错误
Laster:返回最近产生的错误消息
Lasterror:错误消息及相关信息
Lastwarn:返回最近产生的警告
8.2 性能优化
码表:tic——toc时间测试
效率优化技术:
代码向量化
预分配足够大的数组
对不可避免且耗时很大的循环尝试在MEX文件内实现
尽量避免更改变量的数据类型或维数
尽量避免实数和复数之间的相互赋值
尽量采用实数运算
合理使用逻辑运算
尽量采用函数而不是脚本文件
尽量使用load、save而不是IO函数
内存优化技术:whos,clear,save,load
预分配足够大的数组
尽量在函数开始时创建变量
利用repmat增加数组的空间大小
对大部分数据为0的矩阵变为稀疏矩阵
若要保存大量数据采用数组构架而非构架数组
及时地清除占用内存很大的临时变量
尽量地重用内存,而非开辟新内存
8.3 出错处理
Try…catch查询语句
9 MATLAB符号计算
9.1 符号对象的创建
符号变量由sym和syms两条语句生成
Findsym(expression)找出表达式中变量
Findsym(espression,N)离x最近的N个
符号矩阵:S=sym(S)
符号函数:符号表达式、M文件
三类运算操作:
Numberic:数值运算
Rational:Maple符号运算
VPA:Maple精度可变运算
数值转换函数:double,int8/16/32/64,
Uint8/16/32/64
Vpa指令:给出结果
Digits:获得当前精度或变为其他精度
9.2 符号表达式操作
符号表达式指令:
Collect(ex)/collect(ex,x):合并同幂项/含指定x的同幂项
Expand(ex):按多项式展开
Factor(ex)/factor(n):因式/质数分解
Horner(ex):变为嵌套形式
[n,d]=numden(ex):变为有理分式形式,提取最小分母因子d,相应分子公因子n
Simplify(ex):Maple规则化简
Simple(ex)/[exp,how]=simple(ex):化为最简/给出最简exp,主要化简步骤how
表达式替换:subs(手动),subexpr(自动)
Subs:
R=subs(S)替换所有工作区间符号变量
R=subs(S,new)用new替换S中默认变
R=subs(S,old,new)用new替换old
Subexpr:
[exp,sigma]=subexpr(ex,sigma)或者
[exp,sigma]=subexpr(ex,’sigma’)
9.3 符号函数操作
函数复合:compose
求反函数:finverse
Cosine积分函数:cosint
冲激函数:dirac
阶跃函数:heaviside
超几何函数:hypergeom
Lambert函数:lambertw
Sine积分函数:sinint
黎曼函数:zeta
傅里叶变换:fourier
逆傅里叶变换:ifourier
逆拉普拉斯变换:ilaplace
逆Z变换:iztrans
Laplace变换:laplace
Z变换:ztrans
9.4 符号矩阵操作
代数运算:
+,-,*,./,.\,^,\,/,.*,.^,’,.’
逻辑运算:(仅有)==,~=
行列式:det计算
矩阵的逆:inv
矩阵的秩:rank
特征分解:solve(poly(A))或eig
SVD分解:svd
9.5 符号微积分
极限:limit
左右极限在括号写明(right/left),且加引号
微分:diff(S,n,’v’)后两者和x可省略
S为因变量,v为微分变量,n为阶数
多元向量函数矩阵:jacobian(G,x)
积分:int
不定积分:int(S,x),x可省略
定积分:int(S,x,a,b),x可省略
级数展开:taylor自变量v
Taylor(f):f的5阶马克劳林级数逼近
Taylor(f,n,v):f的n-1马克劳林
Taylor(f,m1,m2):f在m2的m1-1阶
Taylor(f,n,v,a):x=a处n-1阶
级数求和:symsum
9.6 符号方程求解
一般代数方程:solve
线性代数方程组:通解null(A),特解由A\B
常微分方程:dsolve
10 数据分析
10.1 数据排序分析
最大(小)值:max/min
中位数:median(A)
分位数:quantile(X,p)
排序:sort、sortrows
升序ascend,降序descend,加引号
Sortrows行为整体排序
10.2 数据求和(积)、差分
求和:sum
对矩阵sum(A)列和,sum(A,2)行和
求积:prod
求累计和、积:cumsum、cumprod
差分:diff(X,N),N为阶数
10.3 均值和方差分析
均值:mean(A,dim)
标准差:std(A,flag,dim)
dim维数可省略
flag为0和1时得到Ⅰ和Ⅱ型标准差
10.4 数据预处理
缺失数据(NaN):用isnan函数判断并去除
异常数据:与平均值的偏差大于3倍标准差
10.5 统计分析
显示概率分布:disttool
随机数生成:所有函数基于rand,randn,且以rnd结尾
数据直方图分析:hist(X,M),M正整数标量,且可有返回值,用bar(x,n)作图
描述数据中心函数:
geomean几何均值
harmmean调和均值
mean:算术均值
median:中位数
trimmea修正均值(除去部分最大最小)
描述数据散步程度:
iqr:四分位差,即25%和75%
mad:绝对值标准偏差
range:跨度,最小最大之差
std:标准差
kurtosis:峭度
11 矩阵分析
11.1 矩阵分析的应用背景
高效、简洁、安全
11.2 矩阵特征量
det(行列式值),inv(逆),rank(秩)
范数:norm(A,opt) ,opt默认2
矩阵opt可取1,2,inf,’fro’
向量opt可取1<=p<∞,2,inf,-inf
条件数:cond(A,opt) opt为范数,省为2
接近1矩阵为良性,远大于1为病态,接近无穷是叫奇异矩阵
超定方程、恰定方程、欠定方程
特征值:eig或eigs
D=eig(A)返回值D的N个特征值组成的向量
[V,D]=eig(A)返回值D的N阶对角矩阵,V为N*N矩阵
11.3 矩阵分解
EVD分解:eig,eigs
Schur分解:schur
Cholesky分解:chol
LU分解:lu
QR分解:qr
SVD分解:svd,svds
11.4 矩阵函数
以矩阵为自变量
常用矩阵函数:
Expm:指数函数e^A
Logm:对数函数log(A)
Sqrtm:矩阵平方根
用户定义:funm,自己声明函数代替下面sin
特例函数sin,cos,exp,log,sinh,cosh
调用时形如funm(A,@sin)
12 函数分析
12.1 函数的表示
匿名函数:fun_handle=@(自变量)(函数体)
M函数文件:编写M文件
12.2 函数的零点
单变量零点:fzero
指定区间内或指定点附近
12.3 数值积分
单重:quad,quadl,quadv
可以认为地规定步长,如:
[q,fcn]=quad(f,x1,x2,tol)其中q为结果,fcn为计算次数,tol为步长
多重:dbquad(二重),triplequad(三重)
12.4 数值微分
差分函数估算一元数值微分:diff
梯度:gradient
12.5 函数最优化
单变量:
[x,fevel,exitflag]=fminbnd(f,x1,x2,p)
f函数句柄,区间[x1,x2],p为选项设置,(x,feval)是最小极点,exitflag结束标志
多变量:fminsearch类似于fminbnd
12.6 函数可视化
一元函数:fplot,ezplot,ezpolar(极坐标)
二元函数:ezplot3,ezsurf,ezsurfc,
ezmesh,ezmeshc,ezcontour,ezconterf
13 高级数值计算
13.1 多项式计算
求值:pv=ployval(p,a或A)p在a处的值
求根:roots
卷积(乘):conv 反卷积(除):deconv
微分:polyder 积分:ployint
有理分式部分和展开:residue
[r,p,k]=residue(f,g)k为余项
13.2 插值
一维:yi=interp1(x,y,xi,method)
其中method有nearest,linear, pchip(cubic) ,spline
二维:interp2类同
插值方法:最邻近,线性,立方,样条
13.3 回归分析和曲线拟合
线性回归分析:先建模,再求系数
多分量回归分析:步骤同上
曲线拟合:ployfit(x,y,n)(求出对应阶数的多项式系数),ployval(求值)
交互式曲线拟合工具:载入数据、作图、tool->basic fitting后编辑
13.4 傅里叶分析
用fft和ifft实现DFT和IDFT,也支持矩阵,默认时矩阵维数为1
幅度:abs;相位:angle
13.5 常微分方程
ODE函数ode45,ode23,ode23s,ode15s,
ode23t,ode23tb,ode113,ode15i等
一阶:solver可用ode函数替代
ODE协作函数:deval,odeset,odeget,odeplot,pdeprint
高阶转换成为一阶计算
非刚性微分方程:ode45,ode23,ode113
刚性微分方程:ode15s,ode23s,ode23td
DAEs:ode15s,ode23t
中等刚性方程:ode23t
全隐式微分方程:ode15i
14 用户图形界面(GUI)
14.1 两种GUI设计方式
分为界面模块和工作模块
图形对象:uimenu,uicontrol,图形,坐标轴和它们的子对象
用户接口(UI)对象表:
Uicontol:通用UI控制对象
Uimenu:UI菜单对象
Uicontextmenu:上下文菜单对象
Uitoolbar:工具条对象
Uitoggletool:双向切换按钮
Uipushtool:瞬时下压按钮
Uitable:制表对象
Uitree:树结构对象
Uitreenode:树节点对象
Uibuttongroup:容器对象(子)
Uicontainer:容器对象(父)
Uipanel:容器对象
Uicontrol类型:
Checkbox:创建复选框
Edit:创建可编辑文本框
Frame:生成组选框
Listbox:列表框生成,文本只能选择
Popupmenu:生成下拉菜单
Pushbutton: 创建按钮,成命令按钮
Radiobutton:创建单选按钮
Slider:创建滑动框
Text:创建静态文本框
Togglebutton:创建切换按钮
两种设计方式:手工代码式、GUIDE式
14.2 GUI界面设计
设计原则:
界面一致性
布局合理性
鼠标键盘对应原则
快捷键
界面易用性
界面规范性
14.3 GUI程序设计
M文件中包含了所有GUI组建的callbacks(回调函数),自己填写相关内容即可。其中的函数有:
主函数
GUI创建函数
初始化函数
输出函数
回调函数
用handles来组织数据,共享数据
回调函数一般格式:
Function tag_Callback(Ob,data,handles)
其Ob是界面对象的句柄,data为消息句柄
15 文件的I/O操作
15.1 低级文件的打开与关闭
打开:fopen
打开方式:只读r,读写r+,打开后写入w,读写打开w+,打开的末尾加数据a,先读后加数据a+。r和r+文件必须存在
关闭:fclose
15.2 读取和写入ASCII文件
读取:fgetl或者
[A,count]=fscanf(fid,format,size)
A存放读取的数据,count返回元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有d,f,s,c。size为可选项,决定A中数据大小,可有N,inf和[M,N]
写入:fprintf
其中有%e(科学记号),%f(固定栏宽),%g(两者自动选取)
15.3 读取和写入二进制文件
读取:[A,count]=fread(fid,count1,prec)
count1可选N,inf,[M,N];prec取值精度,默认为uchar
写入:count=fwrite(fid,A,prec)
prec默认uint8,fid文件句柄
其余低级文件函数:
Feof:测试文件结束
Ferror:查询文件I/O的错误状态
Fgetl:读文件的行,忽略回行符
Fgets:读文件行,包含回行符
Frewind:返回到文件开始
Fseek:设置文件位置指示符
Ftell:获取文件位置指示符
15.4 文件位置指针
Feof,fseek,ftell,frewind
15.5 高级文件的I/O操作
load filename[option]
option可以是-mat或-ascii
save filename[list][option]
option:-mat,-ascii,-append,-v4,-v6
基于GUI:uigetfile/uiputfile,支持.m
基于GUI读取复杂数据文件:uiimport
importdata用类似功能,但不能打开GUI
读取ASCII文件:textread
16 MATLAB编译器
16.1 MATLAB编译器简介
MATLAB Compiler 4的编译流程:
依赖性分析
创建接口C代码
创建CTF压缩包
编译
链接
功能:
独立可执行应用程序
C和C++共享库
Excel附件(需MATLAB 7.0 Builder)
COM附件(需MATLAB 7.0 Builder)
局限性(不能编译):
大部分内建的图形用户界面程序及相应的工具箱
不能直接由命令行调用的功能
某些工具箱,如符号计算工具箱
16.2 安装与设置
16.3 编译器的使用
MCC是调用MATLAB编译器的命令
可以给mcc指定一个或几个编译器选项
可以把不带参数的选项组合到一起
如果在其中包含任何C或C++文件名,这些文件和其他C或c++文件直接传给mbuild
如果使用冲突选项,优先考虑最右边的选项
Mcc命令就是调用MATLAB编译器,格式:
mcc [-options] mfiel [mfile1,…mfileN] [C/C++file1,…fileN]
options有:a,b,c,d,f,g,G,I,m,M,N,O,P,
R,T,v,w,W,Y,z,?参数
独立的M文件:mcc –m main mrank
16.4 编译器的独立使用
独立的C/C++应用创建:
确定mbuild可以创建独立的应用
确定MATLAB编译器可以将目标文件和合适的库链接起来
Mbuild工具:
设置编译器和链接
改变编译器或编译器设置
在C和C++之间转换
生成应用程序
独立windows应用程序的创建:
扩展名为.c和.cpp.cxx.cc
编译准备:
编译器约束
编译器选择(用户输入0,1,2来选择)
编译器改变
集成开发系统:IDE
一个独立应用的发布需要:
应用的可执行文件
Mbuild创建在bin目录下的内容
所有应用程序用到的MEX文件
所有MATLAB运行时的库文件
17 应用程序接口
17.1 mxArray数据结构
mxArray数据结构以及大量以mx开头的函数,广泛用于MATLAB引擎程序和MATLAB C数学库中。代码略
17.2 mx函数
方便创建和访问mxArray数据对象
数组建立:mxCreate***形式
删除数组:mxDestroy***
创建初始化字符串:
mxArray *mxCreateString(const char *str)
每一维数组元素获取:mxGetM和mxGetN
某一特定维元素个数获取:
const int*mxGetDimensions(const mxArray *array_ptr)
17.3 MATLAB中调用C和FORTRAN
MEX文件时按照一定格式,使用C或FORTRAN语言编写的,由MATLAB解释器自动调用并执行的动态链接函数,在windows操作系统中,扩展名是.dll
配置命令mex –setup
C语言MEX源程序包括计算机子例行程序和入口子例行程序,后者名mexFunction,拥有4个参数,分别为prhs(指针数组指向所有的输入参量),nrbs(输入参量个数),plhs(输出的数组),nlhs(输出参量个数)
17.4 MATLAB引擎
是一组MATLAB提供的接口函数,支持C/C++或fortran等语言。主要功能:
打开/关闭一个MATLAB对话
向MATLAB环境发送命令字符串
从MATLAB中读取数据
向MATLAB中写入数据
C语言引擎函数:
关闭引擎:engClose()
执行一个用字符表达的MATLAB表达式:engEvalString()
从MATLAB工作区复制一个变量:engGetVariable()
确定MATLAB引擎会话区的可见性:engGetVisible()
打开数据区:engOpen()
为单独不共享的使用创建一个MATLAB引擎会话:engOpenSingleUse()
为输出确定缓冲区engOutputBuffer()
将变量放置到工作区engPutVariabe()
显示隐藏引擎会话区engSetVisible()
17.5 C和FORTRAN调用MATLAB
库是指可以被任何程序使用的函数集合,分为静态库和共享库(动态链接库,其扩展名为.dll)。
共享库函数:
Loadlibrary:外部库的载入
Unloadlibrary:外部库在内存中卸载
Libisloaded:判断外部库是否被载入
Libfunctions:返回外部库中函数信息
Libfunctionsview:创建窗口显示信息
Calllib:调用一个外部库中的函数
Libpointer:创建一个指向外部库指针
Libstruct:创建一个类似C的结构
18 Notebook和M-book
18.1 M-book
Notebook安装:notebook –setup
启动notebook创建m-book:notebook
M-book定义了word和MATLAB进行通信得宏指令、文档格式和工具栏
18.2 细胞
细胞用于word和MATLAB的信息交换,也被称作细胞群。
由m-book传递给MATLAB的指令有输入细胞和自初始化细胞两种
细胞群定义:
选中多个独立的输入细胞,notebook->group cells
选择输入的多行文本型MATLAB命令,选择notebook->define input cell
选中输入的多行文本型MATLAB命令,notebook->evaluate cell或ctrl+enter
自初始化细胞生成:
定义文本形式的MATLAB命令为细胞;
把已经存在的输入细胞换成此类细胞。
定义计算区:选择需转换的区域,然后选择notebook->define clac zone
循环运行:evaluate loop
输出细胞的格式控制:notebook options
Notebook菜单选项和功能:
Define input cell:定义输入细胞
Define autoinit cell:定义自初始化细胞
Define clac zone:定义计算区
Undefine cells:细胞转换成文本
Purge selected output cells:删除所选区域内所有输出细胞
Group cells:创建细胞群
Ugroup cells:细胞群转成输入或自初始化
Hide cell markers:隐藏或显示细胞生成中括号
Toggle graph output for cell:是否嵌入生成的图形
Evaluate cell:运行细胞
Evaluate calc zone:运行运算区
Evaluate m-book:运行文档中所有输入细胞
Evaluate loop:循环运行输入细胞
Bring MATLAB to front:MATLAB命令窗口调整到前台
Notebook options:设置数值和图形的输出
缺点:
不能包容交互式操作、动画、程序调试等,包含上述命令的程序也不能运行,只能在MATLAB中运行后再复制到notebook中;
GUI控件和菜单的图形嵌入notebook后失效;
不支持SIMULINK。
19 信号处理工具箱
19.1 波形产生
方波:square(2*pi周期)
正弦波:sin
锯齿波:sawtooth
扫描信号:chirp
计算频谱图:specgram
矩形函数在频域上的傅里叶变换:sinc
调制脉冲信号:plustran
19.2 IIR滤波器设计
IIR即无限长响应滤波器,特点:
单位冲激响应h(n)无限长
系统函数H(Z)在z平面存在极点
结构上存在反馈
FIR即有限响应滤波器,特点:
单位冲激响应h(n)在有限n处不为零
系统函数H(Z)在z平面上极点全为0
总体结构上存在反馈
数字滤波器的设计内容:
按照任务的要求,确定滤波器的性能指标;
用一个因果稳定的线性时不变系统的系统函数去逼近这一性能要求;
选择合适的运算结构,字长和数字处理方法,利用有限精度算法来实现这个系统函数;
具体的硬件和软件设计。
IIR数字滤波器的设计步骤:
按一定的规则将给定的数字滤波器的技术指标转换成模拟低通滤波器的指标;
根据转换后的技术指标使用滤波器阶数指定函数,确定最小阶数N和固有频率Wn;
运用最小阶数N产生模拟滤波器原型;
运用固有频率Wn把模拟低通滤波器的原型转换成低通、高通、带通、带阻滤波器;
运用冲激响应不变法或双线性变换法把模拟滤波器转换成数字滤波器。
Butterworth滤波器:‘最平’
[Z,P,K]=buttap(N)
Chebyshev滤波器:等纹波特性,Ⅰ型在通带有,Ⅱ型在阻带有。分别用函数cheb1ap和cheb2ap,参数都为阶数n和通带的最大衰减rp和阻带的最大衰减rs。
滤波器系数:[b,a]=zp2tf(z,p,k)
频域特性:freqz(b,a)
椭圆滤波器:ellipap(n,rp,rs)
频率转换的步骤:
将其他类型滤波器的指标转换成低通滤波器的频率指标;
根据转移后的指标生成转移函数将原型模拟滤波器的系统转换成所需类型和频率指标的模拟滤波器的系数。
频率指标转换函数(都为模拟滤波器):
低通[bt,at]=lp2lp(b,a,Wn);
高通[bt,at]=lp2hp(b,a,Wn);
带通[bt,at]=lp2bp(b,a,Wn,Bw);
带阻[bt,at]=lp2bs(b,a,Wn,Bw)。
其中bt,at,b,a系数,Wn、Bw分别是目标滤波器的中心频率和带宽
模拟滤波器离散化得到数字滤波器两种方法:冲激响应不变法和双线性变换法
冲激响应不变法:找到与目标模拟滤波器具有相同冲激响应的数字滤波器,实质是从拉普拉斯变换到z变换的标准变换。函数为[bz,az]=impinvar(b,a,Fs).Fs为采样频率,默认为1Hz。可能产生频谱混叠。
双线性变换法:求出s=f(z),然后带到模拟滤波器的函数表达式H(s),得到数字滤波器的H(z)。提供的函数为[bz,az]=bilinear(b,a,Fs).
Yule-Walk法:根据给定幅频特性通过最小二乘法拟合逼近得到滤波器系数。函数[b,a]=yulewalk(n,f,m)n为阶数,f和m是描述目标滤波器幅频响应的向量。f为描述频率点的向量,以0开始1结束且不减单调排列,m为描述个频率点滤波器响应幅度的向量。f和m长度相等,元素一一对应。
Prony法:根据给定的时域冲激响应设计,[b,a]=prony(h,nb,na)h是给定的冲激响应,nb和na为数字滤波器的系数个数。
求冲激响应:impz(b,a)
反向频域设计法:根据给定的复频域响应求出滤波器的系数,实质上是完成z域或s域的逆变换[b,a]=imfreqz(h,w,nb,na).
19.3 FIR滤波器设计
冲激响应有限长,在z域是只有零点没有极点,也成为全零点滤波器。有以下四种设计方法:
窗函数法,b=fir1(n,Wn,WIN)b为得到的滤波器系数,n为阶数,Wn是0到1的数,表示归一化截止频率,WIN为窗口系数,默认为海明窗。窗函数设计有rectwin,chebwin等。
多带设计法,针对不同频带有不同的衰减要求设计。又有:
函数b=fir2(n,f,m,npt,lap)f和m是描述频域特性曲线的向量,npt是插值点数,lap是重叠带点数。
函数b=firls(n,f,m,w)w为各频段的权值
函数b=remez(n,f,m)
约束最小二乘法设计,使用户在设计FIR滤波器的时无需定义幅值响应中的过渡带。H=fircls(n,f,a,up,lo)up和lo长度和a相等时分别描述各频带上限和下限的向量。a的长度和f不必相等。
任意响应滤波器设计,频域上响应不对称b=crmez(n,f,{‘fresp’,p1,p2,…})其中,fresp为声明目标频率响应特性的名称函数,p1等为fresp的相关函数。
19.4 频谱分析
PSD:功率谱密度,估计得方法有非参数化法和参数化法.前者包括周期图法、walch方法、MUSIC方法等,后者包括Yule-Walk自回归方法、Burg方法、协方差法等
函数:
Welch方法:pwelch
MUSIC方法:pmusic
Multitaper方法:pmtm
Yule-walk方法:pyulear
Burg方法:pburg
协方差方法:pcov
周期图法:取一段随机序列的样本,计算出样本的傅里叶变换,然后取变换结果的幅值的平方,除以样本序列的长度,比如abs(fft(xn,512).^2/length(xn))分段求出功率谱估计,然后求平均
Welch方法:对分段的数据使用非矩形,降低由于重叠导致段间的统计相关性,也有助于克服矩形窗的旁瓣效应。常用格式如:[pxx,f]=pwelch(xn,window,overlap)其中返回值pxx和f为估计的功率谱值和对应的归一化频率值,window为所加函数床的系数向量,overlap是分段重叠的长度。
Multitaper方法:运用了正交窗口以获得相互独立的谱估计,然后组合生成最终的谱估计,有更大的自由度。只涉及一个参数时间-带宽积NW,MATLAB提供函数格式为[pxx,f]=pmtm(xn,nw,nffs,fs)nffs是FFT变换的长度,默认时输入[],fs是采样频率
MUSIC方法:是一种基于相关矩阵特征分析之上的频率估计技术,将一个相关矩阵的信息进行分类,或者属于信号子空间或者属于噪音子空间。需要设置信号空间特征向量个数。[pxx,f]=pmusic(xn,p,[],fs)p为特征向量的个数。[]可无。
参数方法的功率谱估计步骤:
选择一个正确的模型;
用观测到的数据样本数据或样本数据的自相关函数来确定模型的参数;
根据估计得到的模型参数计算估计值。
描述随机序列的模型有:自回归(AR)模型、移动平均(MA)模型、自回归移动平均(ARMA)三种。
Yule-Walk方法:通过随机序列的信号空间和噪音空间的不相关性建立了关于AR参数,自相关函数和噪音功率的正则方程,并且可以通过Levinson-Durbing递归算法计算出AR的估计值。pyulear(xn,n)
Burg方法:在Levinson-Durbing递归约束下,是前向和后向预测误差能量之和为最小的一种AR功率谱估计方法,避开了自相关函数的计算,转而估计各型滤波器的反射系数。[pxx,f]=pburg(xn,n,fs).n为AR模型阶数。
协方差方法:是一种使前向预测误差最小的技术。[pxx,f]=pcov(xn,od,fs)od是AR模型阶数。
19.5 使用SPTool
这是一个集成化的交互式图形界面用户界面信号处理工具。用于对数据、滤波器和功率谱分析和处理。包含:
信号浏览器-显示、测量和打印信号
滤波器设计工具-创建,可限定性能参数,也可选择设计方法
滤波器查看工具-查看其特性和性能指标,如频谱、相频特性、群时延、零极点等
功率谱查看工具-可用不同方法对随机序列的功率谱进行估计、显示和打印等
输入sptool就能打开
数据导入:imput to SPTool
信号查看功能:
查看或比较数字信号;
提取信号特征量;
打印或播放信号。
滤波器设计器功能:
设计具有标准带宽结构的IIR滤波器;
设计具有标准带宽结构的FIR滤波器;
通过零极点编辑器实现FIR和IIR滤波器;
通过幅频相应的编辑设计FIR和IIR滤波器
滤波器查看:幅值响应图、相位相应图、零极点响应、冲激响应、阶跃响应。
频谱查看:估计频谱密度,其功能:
选择多种方法对样本序列进行功率谱估计;
查看和比较序列的功率谱;
修改功率谱估计参数。
20 图像处理工具箱
20.1 数字图像基础
图像时由“照射源”和“场景”对光能的反射或吸收相结合儿产生的。
空间分辨率是指单位像素表示的实际场景单元的大小,该值越小,测空间分辨率越高,图像越清晰。灰度分辨率是指离散灰度级的个数,该值越高则图像色彩越丰富。这两个值与图形采样、量化有关。
从图形文件读取图像数据函数imread支持大多数格式,如bmp,gif,ico,jpg,png和tif等。调用格式:
A=imread(filename,fmt)
[X,map]=imread(filename,fmt)
[…]=imread(filename)
filename是图像文件名,如果不在搜索路径下应是图像的全路径,fmt是图像文件扩展名字符串。前者可读入二值图、灰度图、彩图(主要是RGB);中者读入索引图,map为索引图对应的Colormap,若不是索引图则map为空。
显示:imshow或imtool。一般情况下只需要imshow(定义图像名,如上面的A);当时索引图是需inshow(X,map)。函数montage可以同时显示多帧图像,用法类似imshow。
20.2 MATLAB图像类型
二值图:黑白图,像素值为逻辑类型,有两个离散灰度级,即0和1.
索引图:其像素值可以使逻辑类型、unit8、unit16、single、double。像素映射到一个***(Colormap),这是一个m*3矩阵,其元素是[0,1]上的浮点数,矩阵每行的三个浮点分别是红、绿、蓝三原色的深度。
灰度图:像素值表示灰度级别,利用默认的Colormap显示灰度图。
RGB图:具有R、G、B三个颜色通道,每个像素由1*3的向量[R,G,B]表示。
图像类型转换:
BW=dither(I)灰度转成二值图;
X=dither(RGB,map)RGB转成灰度图,用户需要提供一个Colormap;
[X,map]=gray2ind(I,n)灰度到索引;
[X,map]=gray2ind(BW,n)二值图到索引,map可由gray(n)产生。灰度图n默认64,二值图默认2;
X=graylice(I,n)灰度图到索引图,门限1/n,2/n,…,(n-1)/n,X=graylice(I,v)给定门限向量v;
BW=im2bw(I,level)灰度图I到二值图;
BW=im2bw(X,map,level)索引图X到二值图;level是阈值门限,超过像素为1,其余置0,level在[0,1]之间。
BW=im2bw(RGB,level)RGB到二值图;
I=ind2gray(X,map)索引图到灰度图;
RGB=ind2rgb(X,map)索引图到RGB;
I=rgb2gray(RGB)RGB到灰度图;
20.3 图像的灰度变换
灰度图(包括二值图)的直方图表示每个灰度级范围内像素点的个数,索引图的直方图表示每个色条(即Colormap矩阵的每一行)对应得像素点个数。对应函数:
Imsist(I)
Imsist(I,n)
Imsist(X,map)
其中n为直方图的柱数,对二值图只能是2
灰度变换主要用于改变图像的对比度,imadjust函数:
J=imadjust(I,[low, high],[bottom,top])
Low,high,bottom,top在[0,1]之间
直方图均衡:histep
20.4 图像的代数运算
加减乘除:
imadd,imsubtract,immultiply,imdivide
加法可以提高信号噪音比,乘法可以用1和0组成的掩膜图遮住图像的指定部分,减法可以用于背景去除和运动目标检测等。
20.5 图像的集合运算
缩放:imresize,可以选择不同的插值方法(nearest,bilinear,bicubic),可以设置放大因子m,大于1是放大,反之缩小,也可以在其中设置高宽[mrows,ncols]
旋转:imrotate(A,angle,method)angle为逆时针旋转的角度,为负时顺时针,method同前所讲,且默认都为nearest
裁剪:I2=imcrop(I,rect)灰度图
X2=imcrop(X,map,rect)索引图
RGB2=imcrop(RGB,rect)RGB图
Rect定义裁剪的矩形区域
20.6 图像滤波
线性滤波可以用卷积实现,输出图像的像素值对应像素及其。邻域像素的线性加权,权重矩阵称为卷积窗。
线性滤波:imfilter(A,H)H为响应的相关窗或卷积窗,可设边界填充对象
得到预定义的滤波器:fspecial
排序滤波:非线性处理方法,函数是B=ordfilt2(A,orfer,h)函数去像素的第order个值作为输出值,h为滤波窗口,其值为0或1,0对应的元素不参与排序。其中常用中值、最大值、最小值滤波。中值特殊函数medfilt2(A,[M,N])默认[3,3]
21 SIMULINK工具箱
21.1 SIMULINK基础知识
安装在MATLAB安装中
启动:命令窗口输入simulink;工具栏按钮;start按钮
演示系统:start->simulink\demos可以打开演示系统帮助。
帮助文档:help->simulink help,可以查看模块信息、查找相关内容、检索相关内容、命令检索
21.2 模块操作
连接模块
参数设置:双击打开设置相关项
信号标签(对信号线):添加、修改、移动、复制、删除等操作
信号标签的传递步骤:
为最初的信号线添加标签;
在经过的信号线上输入符号‘<’,如果该信号线携带的信号需要命名可以在符号‘<’前输入信号名称;
单击信号标签编辑框外任何地方,终止标签编辑模式;
选择菜单栏中edit->update diagram命令刷新模型,即可实现传递。
21.3 仿真设置
参数配置:simulink->sonfigureation parameter
仿真时间:start time->stop time
仿真步长:最大、最小和初始(Initial)
仿真算法:solver
输出选项:output options
21.4 连续系统模型实现
积分方程
传递函数
状态方程
21.5 SIMULINK子系统
子系统的建立带来的优势:
减少了模型窗口中显示模块的数目;
模型层次化;
设计条理清晰,模型更具交流性;
增加重复调用性。
创建:直接创建和构建子系统方法。使用subsystems模块库中的subsystem模块建立子系统。Create subsystem
封装:mask subsystem
21.6 编写S-函数
系统函数的简称,是对一个动态系统的计算机程序语言描述。
SIMULINK模块都包含三个基本单元:输入u,状态x,输出y;
仿真阶段分为初始化阶段和仿真阶段
调用S-函数的各项任务:
初始化;
计算下一个采样时间点;
计算主要时间步的输出;
更新状态;
数值积分。
直接反馈:系统的输出或可变采样时间收到输入的控制。
动态输入:给出输入连续状态数目、离散状态数目、输出数目、输入数目和直接反馈数目。
设置采样时间与偏移:主要采样时间。
在user defined function子库中有一个S-Function模块,可用来创建S-函数。
S-函数模板,即sfuntmpl.m,属于M-文件S-函数模板,含有一个主函数和6个子函数组成。可在命令窗口用Open sfuntmpl.m打开。
转自:http://blog.163.com/bingqingyujie..5/blog/static/75559361200991294423888/