MATLAB野猫学习笔记文档格式.docx
《MATLAB野猫学习笔记文档格式.docx》由会员分享,可在线阅读,更多相关《MATLAB野猫学习笔记文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
功能说明
clf
清除图形窗口
clc
清除命令窗中显示内容
clear
清除MATLAB工作内存中的变量
who
列出MATLAB工作内存中驻留的变量名清单
whos
列出MATLAB工作内存中驻留的变量名清单以及属性
help
帮助命令
edit
打开M文件编辑器
↑(↓)
向前(后)调出已经输入过的指令
format
定义输出格式(默认值),等效于formatshort
formatshort
输出用带4位小数位的有效数字表示
formatlong
输出用15位数字表示
formatshorte
输出用5位科学计数法表示
formatlonge
输出用15位科学计数法表示
formatrat
输出用近似有理数表示
formatcompact
显示变量之间不加空行(紧凑格式)
formatloose
显示变量之间加空行
demo
浏览MATLAB软件基本功能
funtool
打开函数简单操作的可视化交互界面,显示三个可操作图形窗口(见表下的图)
echo
显示文件中的Matlab中的命令
more
控制命令窗口的输出页面
matlabrc
启动主程序
quit
退出Matlab环境
startup
Matlab自启动程序
tic与toc
tic和toc分别开始与结束计时
(2)运算符和特殊算符(Operatorsandspecialcharacters)
运算符
+
加
-
减
*
数之间乘
.*
数组乘,A.*B为A,B两个数组对应元素相乘
^
数的幂
.^
数组幂,A.^2为数组A每个元素平方,A.^B为A,B两个数组对应元素乘幂
\
数的左除,2\1得0.5000
.\
数组的左除,A.\2为数组A的每个元素去除2;
A.\B的意义类似
/
数的右除,2/1得2
./
数组的右除,A./2为数组A的每个元素去除以2;
A./B的意义类似
(3)关系运算符(Relationaloperators)
关系运算符
==
等号
~=
不等号
<
小于
>
大于
=
小于或等于
大于或等于
(4)
逻辑操作(Logicaloperators)
逻辑操作符
&
(and)
逻辑与
|(or)
逻辑或
~(Not)
逻辑非
xor
异或
any
有非零元则为真
all
所有元素均非零则为真
(5)特殊算符(Specialcharacters)
名称
符号
含义
赋值符号
赋值
空格
输入量与输入量之间的分隔符;
数组元素分隔符
逗号
句点
.
数值运算中的小数点;
结构域的存取;
构架域的关节点
分号
;
不显示计算结果命令的结尾标志;
数组行与行之间的分隔
冒号
:
生成一维数值数组;
单下标索引时,表示全部元素构成的长列;
多下标索引时,表示所在维上的全部元素
注释号
%
在它后面的文字、命令等不被执行,用于注释
单引号对
‘’
字符串标记符
单引号
’
矩阵转置
圆括号
()
用于紧随函数名后;
用于运算中的结合次序
方括号
[]
输入数组标记符
续行号
…或?
用于长表达式的续行
At符
@
创建函数句柄
[,]
水平串接
[;
]
垂直串接
(),{},.
下标赋值
下标标识
惊叹号
!
调用操作系统命令
(6)运算优先级
优先级从低到高:
1.先决或(||);
2.先决与(&
);
3.逻辑或(|);
4.逻辑与(&
5.等于类(<
<
=,>
>
=,==,~=);
6.冒号运算(:
7.加减(+,-);
8.乘除类(点乘.*,矩阵乘*,元素左右除.\,/.,矩阵左右除\,/);
9.正负号(+,-);
10.转置类(矩阵转置.'
,共轭转置'
,幂次^,矩阵幂次^)
11.括号
2.矩阵操作
有专门的函数创建特殊的矩阵,需要学会拼接矩阵(逗号、分号的使用以及拼接函数的使用)、改变矩阵的大小(赋空某行列即删除某行列),改变矩阵的形状。
至于向量(一行或一列)、标量(一个数)和空矩阵,都只是矩阵的特例。
linspace和logspace函数常用于生成向量。
矩阵寻访可以二维也可以一维线性访问,还可以寻访整个行或列(冒号的特殊用法)。
获取矩阵信息(数据类型、数据结构、尺寸信息)。
3.数据类型
matlab只存在一种数据类型,称之为数组(Array),根据数组保存的数据类型的不同,数组也可相应地分为数值型、元胞型、结构体型、字符型、逻辑型、函数句柄型、用户自定义JAVA类型。
矩阵只是个数学概念,它也是以数组的形式存储。
利用class函数可以查询数据的类型。
MATLAB常数:
pi圆周率、exp
(1)自然对数的底数e、i或j虚数单位、Inf或inf无穷大、NaN非数。
(1)数值数组
(2)字符串数组:
字符串数组的建立、比较、查找与替换,都有相应的函数,还可以与数值类型相互转化,其操作与C语言类似。
比如t_text=[‘t=’,num2str(t(i_max))];
//字符串数组的元素是相邻可拼接的
y_text=[‘y=’,num2str(y(i_max))];
max_text=char(‘maximum’,t_text,y_text);
//生成图中标记文本的字符串数组。
//作图语句省略
text(t(i_max)+0.3,y_max+0.05,max_text);
(3)元胞数组与结构体数组
能在一个数组中存放各种数据类型,从一定意义上讲,结构体数组组织数据的能力比元胞数组更强、更富于变化。
元胞数组直接存放数据的场所是元胞本身,而结构体数组是域,因此要访问数据,元胞数组可以A(1,2)而结构体数组需要A(1,2).f1
二者可以利用cell2struct和struct2cell相互转化。
元胞数组的扩容、删减、重置、嵌套。
A{1,3}(:
2)是访问A元胞数组中的第1行第3列的元胞,该元胞为一个数组,访问的是它的第2列。
(4)优化运算
针对矢量和矩阵运算进行了优化,根据运算符操作对象的不同,可以大致将其分为针对“数值数组元素”(单个元素)和针对“数值数组整体”(整体)的两类数学运算符。
可以使用逻辑数组作为数值数组索引,因此可以使用关系运算符或逻辑运算符生成索引,简化索引操作。
比如:
d=rand(1,100);
d(d>
0.5)利用d>
0.5生成索引,如此可检索出d数组中所有>
0.5的量。
经过优化的微量运算函数:
all、any、reshape、find、sort、sum、repmat、
4.程序流程控制
皆有end结尾。
for、while、if-else、switch-case、try-catch
常用其他命令:
return、input、keyboard、yesinput、pause、break、erro、warning、、、
5.M文件
可以通过Tab键打开代码输入提示功能。
函数程序保存的时候必须采用函数名作为文件名,普通输入的外部变量仅仅是值传递,因此它输入的值在函数体内发生变化并不影响函数的变量。
M脚本文件与M函数文件:
脚本文件只是一串按用户意图排列而成的指令,运行后所产生的所有变量都驻留在MATLAB基本(base)空间中;
函数文件function引导且罗列出函数与外界的所有联系,但输入输出变量个数不限(可无可有许多),允许使用比标称数目少的输入输出变量调用函数,函数文件运行时所有中间变量都存放在函数工作空间中,当函数运行完,这个临时空间及其所有中间变量就立即被清除,清除包括函数文件中发生对某脚本文件的调用时脚本文件运行产生的所有变量,因此,为了查看函数空间的变量值,需要插入断点,然后在工作空间窗口中选择函数空间。
通过global指令,MATLAB允许多个函数空间以及基本工作空间共享同一个(全局)变量,要求是共享和双方都用global声明此变量,除非与全局变量联系的所有工作空间都被删除,否则全局变量依然存在。
推荐使用大写字符命名全局变量,也推荐不使用全局变量。
M文件的一般结构:
以function开头,定义函数名以及函数的输入输出宗量的行是函数声明行;
紧随函数声明行之后以%开关的第一注释行叫H1行,H1行包含大写体的函数文件名和运用关键词简要描述函数功能,从lookfor关键词查询和help在线帮助使用;
H1行及其后的连续的以%开头的注释行构成整个在线帮助文本。
它通常包括函数输入输出变量的含义和调用格式说明;
在线帮助文件之后隔一空行,以%开头的叫编写和修改记录行,用作软件档案管理;
与前面所有的注释以空行相隔的是函数体。
6.表达式演算函数
eval与feval的区别
feval的FN绝对不能是表达式,只能接受函数名
内联函数举例:
G2=inline(‘a*exp(x
(1))*cos(x
(2))’,’a’,’x’),G2(2,[-1,pi/3])%执行结果为0.3679
函数句柄创建时要求被创建句柄的函数文件必须在当前视野中,如若不在,MATLAB不会报错与警告,一旦句柄成功建立,则可在被创建句柄的函数文件不在当前视野范围内时调用函数句柄执行函数。
7.面对对象编程
MATLAB的6个内装类:
cell、char、double、sparse、struct、unit8
为辨识具体变量的身份,MATLAB提供了多种函数:
class指示类别、isa、iscell等is函数
MATLAB有强大的代码生成功能,比如图形窗口都可以File——GenerateCode来生成相应代码。
8.程序的跟踪和调试
(1)直接调试法:
(1)将重点怀疑语句行、指令行后的分号去掉,使计算结果显示在屏幕上
(2)在适当的位置,添加显示某些关键变量值的语句(disp)
(3)利用echo指令,使运行时,在屏幕上逐行显示文件内容。
echoon能显示M脚本文件,echoFunNameon能显示名为FunName的M函数文件。
(4)在原M文件中的适当位置,增添keyboard指令。
(return结束)
(5)将原函数文件注释首先转化为脚本文件显化调试
(2)调试器的使用:
F10、F11、F12、F5的使用,在编辑/调试器中有空间堆栈可以查看工作空间中的变量。
9.MATLAB程序优化
(1)程序性能分析
利用desktop——profiler启动程序性能分析器,在栏中输入函数名,即可分析出此函数各部分执行所耗时间。
(2)提高M文件执行效率的技巧
(1)矢量化操作,例如用x=0:
.001:
10;
y=sin(x)而不用forx=0:
10y=sin(x);
(2)给数组预定义维数,例如用x=0:
y=zeros(1,10001);
y=sin(x)而不用x=0:
y=sin(x)
(3)下标或者索引操作,例如用sum(A(j,:
))而不用for循环
(4)尽量多使用函数文件而少使用脚本文件,因为脚本文件需要加载变量至内存
(5)将循环体中的内容转换为C—MEX,可以不必执行for循环时每次都编译
(6)内存优化clearall
(7)节约内存的方法:
避免生成大的中间变量,并删除不再需要的临时变量,当使用大的矩阵变量时,预告指定维数并分配好内存,当程序需要大量变量数据时,可以考虑将变量写到磁盘,然后清除这些变量。
当需要这些变量进,重新从磁盘加载。
当矩阵中数据极少进,将全矩阵转换为稀疏矩阵。
(8)尽可能使用MATLAB提供的函数指令。
10.符号函数
(1)概述
symsxy;
z=x+y;
%则z隐式定义为sym类型
x=10;
z=subs(z)%将z中x赋值为10,则返回z=10+y
y=20;
z=subs(z)%将z中y赋值为20,则返回z=30
符号运算的原因是其中有些变量暂时还不知道值,如果已经知道值,那就没必要定义成sym,比如已知x=10,则只需要定义symy,z=10+y
注意:
符号变量无法用不等号,即Ted为符号变量时不能用:
f=0.4*G(i,3)*(Ted>
G(i,5)+G(i,2))+(0.2*G(i,3)+(Ted-G(i,5))*G(i,4))*(Ted<
=G(i,5)+G(i,2));
%G矩阵已知
遇分段函数积分,则要将积分拆开以符号变量使用不等号的表述。
(2)积分与微分
符号函数积分:
int(s,v,a,b):
求定积分运算。
a,b分别表示定积分的下限和上限。
该函数求被积函数在区间[a,b]上的定积分。
a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。
由于是符号,因此精度可以无限。
数值积分:
求解定积分的数值方法多种多样,如简单的梯形法、辛普生(Simpson)•法、牛顿-柯特斯(Newton-Cotes)法等都是经常采用的方法。
它们的基本思想都是将整个积分区间[a,b]分成n个子区间[xi,xi+1],i=1,2,…,n,其中x1=a,xn+1=b。
这样求定积分问题就分解为求和问题。
数值积分的实现方法基于变步长辛普生法,MATLAB给出了quad函数来求定积分。
该函数的调用格式为:
[I,n]=quad('
fname'
a,b,tol,trace)基于变步长、牛顿-柯特斯(Newton-Cotes)法,MATLAB给出了quadl函数来求定积分。
[I,n]=quadl('
a,b,tol,trace)其中fname是被积函数名。
a和b分别是定积分的下限和上限。
tol用来控制积分精度,缺省时取tol=0.001。
trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,缺省时取trace=0。
返回参数I即定积分值,n为被积函数的调用次数。
例:
求函数'
exp(-x*x)的定积分,积分下限为0,积分上限为1。
trapz(x,y)—梯形法沿列方向求函数Y关于自变量X的积分(向量形式,数值方法)。
S=triplequad(F,-6,6,-5.5,5.5,-4.5,4.5)%求三重数值积分。
其中被积函数F用"
匿名函数"
来表达,即F=@(x,y,z)sqrt(e1*e2*e3)*cos(n1*pi*x/12).*cos(n2*pi*y/11).*cos(n3*pi*z/9);
如果直接用inline或字符串的形式,则表达式中的未知数有9个,分别是e1,e2,e3,n1,n2,n3,x,y,z。
而用匿名函数时,已知变量e1,e2,e3,n1,n2,n3就会以常数看待,未知数就只有x,y,z了。
fun=inline('
exp(-x.*x)'
'
x'
);
%用内联函数定义被积函数fname
>
Isim=quad(fun,0,1)%辛普生法
Isim=0.746824180726425
IL=quadl(fun,0,1)%牛顿-柯特斯法
IL=0.746824133988447
利用内联函数可以将原本是含符号变量的函数转化为普通函数,进而可以使用quad利用数值积分求解复杂的积分。
注意区分点乘与乘、点次方与次方。
(3)化简和替代
subs()、simple()
化简之后的结果要转化为数字,需要用double()函数。
3、遗传算法
1.概况
GeneticAlgorithm,简称GA,不依赖于梯度信息,而是通过模拟自然进化过程来搜索最优解,它利用某种编码技术,作用于称为染色体的数字串,模拟由这些串组成的群体的进化过程。
遗传算法通过有组织的、随机的信息交换来重新组合那些适应性好的串,生成新的串的群体。
2.模式理论
模式、阶数、定义距。
一个模式的阶数越高,其样本数就越少,因而确定性越高。
在选择算子作用下,与某一模式所匹配的样本数的增减依赖于模式的平均适应度,与群体平均适应度之比,平均适应度高于群体平均适应度的将呈指数级增长。
模式在交叉算子作用下定义距短的模式将增多。
模式定理:
在遗传鼻子选择、交叉和变异的作用下,具有阶数低、长度短、平均适应度高于群体平均适应度的模式在子代中将以指数级增长。
统计学的研究表明,在随机搜索中,要获得最优的可行解,则必须保证较优解的样本呈指数级增长,而模式定理保证了较优的模式的样本呈指数级增长,从而给出了遗传算法的理论基础,即交叉、变异算子保证遍历解空间,选择算子保证找出最优解。
3.积木块假设
阶数低、长度短、适应度高的模式(积木块)在遗传鼻子作用下,相互结合,能生成阶数高、长度长、适应度高的模式,可最终生成全局最优解。
4.优点
对可行解表示的广泛性,群体搜索特性,不需要辅助信息,内在启发式随机搜索特性,具有固有的并行性和并行计算的能力,具有扩展性,易于同别的技术混合使用。
5.早熟问题
群体中所有的个体都陷于同一极值而停止进化,接近最优解的个体问题被淘汰,进化过程不收敛。
6.改进
分层遗传算法、CHC算法、Messy遗传算法、自适应遗传算法、基于小生境技术的遗传算法、混合遗传算法(最速下降法、模拟退火法)
具体思路:
有条件的最佳保留机制,采用遗传—灾变算法,采用适应度比例机制和个体适应度选择机制的加权和,引入主群和属群的概念,适应度函数动态定标,多种群并行进化及自适应高速控制参数相结合的自适应并行遗传算法,对重要参数的选择采用自适应变化而非固定不变。
遗传算法5要素:
参数编码、初始群体的设定、适应度函数的设计、操作设计和控制参数设定。
针对这5个要素的改进:
初始群体的产生
将解空间划分为S个子空间,量化每个子空间,运用均匀数组或下次数组选择M个染色体,从M*N个染色体中,选择适应度函数最大的N个作为初始群体。
这样可保证初始群体在解空间均匀分布,另外初始群体的各个个体之间应保持一定的距离。
选择算子的改进
采用有条件的最佳保留策略,或者采用遗传—灾变算法。
遗传算法重要参数的选择
染色体的长度取决于求解问题的精度,存在定长的变长2种方式;
群体规模通常取20至200.求解问题的非线性性越大,n就越大。
通过交叉和变异,一对相互配合又相互竞争的算子使其搜索能力得到飞速提高。
交叉操作的作用是组合交叉两个个体中有价值的信息产生新的后代,它在群体进化期间大大回忆了搜索速度;
变异操作的作用是保持群体中基因的多样性。
自适应地改变
的大小,将进化过程分为渐进和突变两个不同阶段,渐进阶段强交叉、弱变异,强化优势型选择算子;
突变阶段弱交叉、强变异,弱化优势型选择算子。
适应度函数的设计
性能不良的适应度函数往往会导致“骗”问题。
将问题的约束以动态方式合并到适应度函数中,即形成一个具有变化的惩罚项的适应度函数,用来指导遗传搜索。
在那些具有许多约束条件而导致产生一个复杂搜索超平面的问题中,该方案能明显地以较大的概率找到全局最优解。
进化过程中动态调整子代个体
遗传算法要求在进行过程中保持群体规模不变,但为了防止早熟收敛,在进化过程可对群体中的个体进行调整,包括引入移民算子、过滤相似个体、动态补充子代新个体(优秀的父代个体中变异产生)等。
小范围竞争择优的交叉、变异操作
将某一对父母进行n次(3到5次)交叉、变异操作,生成2n个不同个体,从中选出最优者入选子代(兄弟竞争)。
如此则可避免基因重复,防止下一代的近亲结婚。
多目标优化问题的遗传算法:
权重系数变换法(将多目标加权和转化为单目标)、并列选择法(子群体各个寻优后合并)、排列选择法(优者排前)、共享函数法(小生境遗传算法,对类似个体的数量加以限制以便产生各类较多的不同的最优解)、混合法(主体使用并列选择法,并引入保留最佳个体和共享函数的思想)
4、混合编程
1.使用MATLAB引擎
2.使用ActiveX控件
Acti