第一章 Matlab简介
程序编写简介
1、常用符号说明
% 注释符号,在m文件中绿色显示。
; 命令行结束符号,有则不显示命令执行结果,否则显示执行结果。
2、变量
基本类型为复述矩阵和字符矩阵。
一维矩阵称为向量,分为行向量和列向量
1X1的矩阵为标量,即一个数(实数或复数)或一个字符
= 赋值
注意:矩阵的行数和列数从1开始计数
zeros:a=zeros(2,3)2X3的矩阵赋值为0
a=zeros(2) 2X2的矩阵赋值为0
ones:a=ones(2,3)2X3的矩阵赋值为1
a=zeros(2) 2X2的矩阵赋值为1
行向量赋值
a=[1 2 3 4]
a=[1:2:99](m:t:n 表示:m为起始数值,t为增量,n为最终值)
a=[1 2 5;3 4 6](2X3矩阵)
列向量赋值
行向量的转置c=a'
常用运算
矩阵运算:
向量运算:
注意:乘,除,乘方运算时要在运算符号前加“.”,表示对应位置数据运算。a.^2
3、常用命令操作
clc:清除当前命令窗口(command window)显示所有内容
clear:清除当前工作空间(workspace)中的变量
help 函数名:显示相关函数的所有帮助信息
4、常用语句
条件语句 if-else-end
if 条件表达式;
程序段1
else
程序段2
end;
多条件语句
if-elseif-end
循环语句
for循环:循环次数一定
for=is: id: ie is初值 id 步长 ie终值
循环体
end;
break:终止循环
for=i1: i2:i3
循环体
if 条件表达式;break;end;
end;
while循环:次数不确定,根据条件确定是否结束循环
while 循环表达式
循环体
end;
绘图语句
figure:创造图形窗口(figure window)
plot:绘制二维图形的基本函数 plot([1 2],[5 6])
simulink简介
1、simulink:对动态系统进行建模、仿真和分析的软件包。
2、建模环境:交互式、图形化的建模环境。
3、仿真环境
4、专用模块库(Blocksets)
5、提供了仿真库的扩充和定制机制
6、与matlab工具箱的集成
7、simulink的特点
(1)基于矩阵的数值计算,与matlab无缝结合
(2)高级编程语言、针对动态系统
(3)图形与可视化。
(4)工具箱提供面向具体应用领域的功能
(5)丰富的数据I/O工具
(6)提供与其他高级语言的接口
(7)支持多平台
(8)开放与可扩展的体系结构
第二章 程序设计基础
1、命令行运行方式
1)直接在命令窗口中输入命令行:
-
指令
-
简单计算命令行
-
简单绘图命令行
2)M文件运行方式
2、Matlab中的窗口
1)命令窗口(command window)
2)M文件窗口
3)起始面板(lauch pad)
4)工作空间窗口(workspace)
5)命令历史窗口(command history)
6)当前目录窗口(command directory)
7)图形窗口(figure)
8)GUI制作窗口
5如何获得Matlab的帮助信息
1)命令行帮助
2)联机帮助
3)演示帮助
Matlab语言的数据结构
1、数据结构
-
定义
-
基本数据结构
-
线性表示结构
-
堆栈结构:只能在线性表的一端进行插入或删除
-
队列:只能在线性表一端进行插入另外一端删除
-
链接:
2、数据类型
-
二进制位数:8位,16位,32位
-
整型数据:int8(),int16()
-
无符号整型数据:unit8()常用于图形处理
-
双精度浮点数:double():8字节(64位)一般情况下存储与计算均以双精度进行。
-
其他
-
复数向量
-
矩阵和字符串型矩阵
-
多维数组,数据机构体,单元数据,类和对象等。
3、常量与变量
-
常量:
-
变量:
-
常量与变量名称
-
字母开头,后接字母,数字或下划线
-
区分大小写
-
总长度不超过19个字符
-
一般情况,名称具有一定指示意义
-
特殊变量名称
4、赋值语句
-
直接赋值语句
-
函数调用语句:[返回变量列表] 函数名(输入变量列表)
-
函数名:一般函数名对应matlab路径下的同名文件。
-
同个函数可能有不同的输入变量列表,返回变量列表。
-
特定常数:避免对其赋值
eps:机器的浮点运算误差限
i和j通常作为循环变量用于for循环中。也用于复数虚部的标识符。
Inf(inf) :数学中无穷大的表示方式。
NaN(not a number)不定式。
Pi:圆周率的双精度浮点表示
lasterr:存放最新一次的错误信息。字符串型。
lastwarn:存放最新的警告信息。字符串型。
矩阵的matlab表示
1、变量单元:复数矩阵(特殊的数据结构)
2、二维矩阵表示[1 2 1:3 4 6:1 0 2]
-
各种符号意义 []:矩阵内容
-
空格或“,”同一行中不同的数据
-
“;”换行
-
-
书写顺序:从左往右,一行一行书写
3、向量表示
4、标量表示
5、矩阵增补,
-
行向量增补,如:a=[1 2 1;2 2 2;3 2 1]
a=[a;[3 5 6]]
-
列向量增补,如:a=[1 2 1;2 2 2;3 2 1]
a=[a [3;5;6]]
6、冒号表达式 a=s1:s2:s3
-
S1:起始数值;S2步长;S3终值数值
7、复数矩阵:用i或j表示复数的虚部,表示方法同实数矩阵
多维数组的定义
1、多维数组
-
数组表示:用脚标表示数组维数的大小。二维数组Amn
-
定义:三维数组可以看作以若干二维数组为数据元素的向量,以此类推。
-
三维数组中数据元素表示:数组名(:,:,k)
k为三维数组中第k个元素,即构成三维数组的第k个二维数组
-
定义三维数组
-
手工定义:常用于数据没有规律
-
例子:A1=[1 2 3;4 5 6;7 8 9]A2是A1的转置,A2=A1',A3=A1-A2,A4为A1,A2和A3构成的三维数组
函数定义:cat(DIM,A1,A2,A3,……)
-
a、变量说明:DIM为数组维数,A1,A2等大小相同为组成数组的元素,元素的个数不受维数影响。
-
b、DIM取值
cat(1,A1,A2)相当于[A1;A2]
cat(2,A1,A2)相当于[A1,A2]
-
-
多维数组大小测试函数:size()
数据结构体
1、结构体:一种构造数据类型,把不同类型的数据组织在一起,其中数据类型可以自己定义。
1)结构体分量(成员变量)的表示
2)结构体分量为矩阵时的表示方法
3)结构体分量的应用,直接写出分量就可以。
4)结构体变量的引用
5)构造小型数据库
6)修改成员体
-
增加成员变量
-
删除成员分量
单元结构
1、定义:把不同属性的数据都纳入到一个变量之下,该变量就是单元(cell),这种数据结构就是单元结构。
2、与结构体的异同
相同之处:均包括多种不同类型的分量
不同之处:结构体的各个分量称为成员变量,成员变量有自己的名称。单元名称可以看做关于结构体某个单元具体内容的变量。
说明
1)单元结构用{}括起所有内容
2)“...”为续行符号。表示下一行的内容紧跟一行,可以将较长的语句分多行写
3)Size函数对单元变量的应用
4)Length函数对单元变量的应用
5)查找单元变量的具体内容:单元变量名{第n个单元}或者celldisp(单元变量名)
6)删除单元变量某个分量:单元变量名(第n个分量)=[]
7)结构体,单元数据可以相互嵌套。
MATLAB下的类与对象
参考《MATLAB基础及其应用》机械工业出版社,2003
矩阵的代数运算
1、矩阵
2、矩阵的生成:
1)直接在命令窗口中书写
2)先定义矩阵变量然后对矩阵变量赋值。
3)利用矩阵编辑器(Array Editor)在已有矩阵上修改。
-
扩展矩阵
-
缩减矩阵
3、矩阵的代数运算
1)实数矩阵转置:A的转置是A'
2)Hermit转置
-
共轭:用i标志复数的虚部,复数a+bi的共轭复数为a-bi
-
若a矩阵中含有复数元素,其转置矩阵B的元素定义为bji=a*ij,就是先对A转置,然后对每个元素取共轭
-
复数矩阵A的转置还是A'
3)矩阵共轭:conj(A)
4)复数矩阵普通转置
-
方法一:B=transpose(A)
-
方法二:B=A.'
5)其他
-
函数ctransporse():与Hermit转置具有相同功能。
-
函数conj()对实数矩阵没有区别,可用于多维矩阵,
4、加减法运算
-
提供“+”“-”运算符
-
提供函数plus(A,B),minus(A,B)
-
其它情况,当A或B中有一方为标量时,根据矩阵加减法运算规则,将标量遍加或遍减与另一矩阵
-
A,B大小不一致则出错。
5、矩阵相乘
-
矩阵维数相容,一般情况下,矩阵不满足乘法交换律。
-
函数mtimes(A,B)
6、矩阵求逆
-
矩阵的逆:存在逆矩阵的条件为一般情况下为方阵。同时A为非奇异矩阵。此时,A应具有n个线性无关的列向量和n个线性无关的行向量。
-
矩阵求逆的两种方法
方法一:B=A^(-1)
方法二:B=inv(A)
7、矩阵的左除
AX=B求X
-
若A非奇异,则X=A-1B
方法一:先求A的逆,然后乘以B
方法二:X=AB
-
若a奇异或非方阵,求X
方法一:求A的伪逆,然后乘以B:X=pinv(A)*B
矩阵B的行数决定于矩阵D的行数,列数决定于矩阵X的列数;
矩阵X的行数决定于矩阵A的列数,列数决定于矩阵B的列数;
方法二:X=AB
注意:对于某些矩阵,两种方法求得的矩阵解不一定完全相同。
8、矩阵的右除
XA=B求X
-
若A非奇异,则X=BA-1
方法一:先求B乘以A的逆:X=B*A^(-1)
方法二:X=B/A
方法三:利用左除运算实现右除运算 X=(A'B')'
方法四:利用函数 X=mrdivide(B,A)=B/A
-
若a奇异或非方阵,参考左除做法
注意:
1)左除和右除符号不同
2)相乘顺序的不同
3)对于不是非奇异的方阵,不同方法的运算结果具有一定差异。
4)右除函数中参数的顺序。
9、矩阵翻转
-
左右翻转fliplr()B=fliplr(A)
-
上下翻转flipup() C=flipup(A)
-
逆时针选择90度 rot90()
-
矩阵翻转不同于矩阵转置,矩阵转置可以看做是关于矩阵对角线翻转。
10、矩阵乘方运算
方法一:运算式形式 M=A^K
方法二:函数形式 M=mpower(A,K)
说明:
1)矩阵开K次方可以得到K个解,MATLAB显示其中一个解
2)M=A1/r但反过来Mr不一定等于矩阵A
11、点运算
-
矩阵点乘运算(Hadamard运算):大小相同矩阵对应元素相乘
C为矩阵A,B的点乘积,记作:C=A.*B
方法一:运算式形式 C=A.*B
方法二:函数形式 C=times(A,B)
-
向量点乘运算
设向量D为向量X的k次方,记作D=xk
运算式形式 D=x.^k
-
矩阵与标量点乘
矩阵A,标量t则 A.*t
-
矩阵点指数运算
大小相同的矩阵A,B,则点指数运算在MATLAB记为:A.^B
-
矩阵点左除运算
大小相同的矩阵A,B,则记为:A.B
-
矩阵点右除运算
大小相同的矩阵A,B,则记为:A./B
12、Kronecker乘积(Kronecker product),又称为直积(direct product)或张量积(tensor product)为表示矩阵特殊乘积的简洁数学符号。设有n*m矩阵A,p*q矩阵B
-
矩阵A与B的右kronecker积:记为kron(A,B)
-
矩阵A与B的左kronecker积:记为kron(B,A)
说明:
(1):左和右kronecker乘积矩阵大小相同,均为np*mq;
(2):一般情况下,左和右kronecker的乘积不同
(3):不要求两个相乘的矩阵维数相同
用途:
1)求解方程
2)信号处理与系统理论中的多变元时间序列的高阶统计理论与方法中的应用
3)信号处理与系统理论中的随机静态分析、随机向量和随机向量过程分析
4)数理统计、线性系统理论
5)滤波器组和Hadamard变换的分析
矩阵的逻辑运算
-
逻辑代数:即布尔代数。仅有两种状态,0和1.
-
逻辑运算:与,或,非
-
MATLAB中没有定义专门的逻辑变量,0为逻辑0,其他为逻辑1.
-
矩阵的与运算
1)矩阵间对应元素“与”运算。跟普通的符号为“0,1”逻辑运算中的与运算相似。
MATLAB中两个元素均非零,其结果为1,否则为0.
方法一:运算式形式 ,A&B,即A与B
方法二:函数形式 and(A,B)
2)矩阵A与标量B与运算
矩阵A中每个元素按照Matlab中规则与标量B做与运算
-
矩阵的或运算
1)矩阵间对应元素“或运算”运算。MATLAB中两个元素均为零,其结果为0,否则为1
方法一:运算式形式 ,A|B,即A或B
方法二:函数形式 or(A,B)
2)矩阵A与标量B或运算
-
矩阵的非运算
1)矩阵A“非”运算。对应元素为零,其结果为1,否则为0
方法一:运算式形式 ,~A
方法二:函数形式 not(A)
-
矩阵的异或运算
1)异或运算的矩阵中对应元素都为0或都为非零元素,结果为0,否则结果为1。
方法:函数形式 xor(A,B)
2)矩阵A与标量B的异或运算
xor(A,B)
矩阵的比较关系
1)Matlab定义的比较关系
2)两个矩阵做比较时,对应位置元素做比较,如果满足给定的比较关系,结果为1,否则为0.
3)关系运算与代数运算
-
all()参数为待查询矩阵,依次检查每列元素,当该列元素均为非零元素,返回结果1,否则返回0。结果为行向量。当参数为向量时,返回结果为1或0.
-
any()参数为待查询矩阵,当某列含有非零元素,返回1,否则0 ,结果为行向量。参数为待查询向量时,返回1或者0。
矩阵元素的数据变换
-
floor(A)对矩阵A元素按负无穷方向取整。
-
ceil(A)对矩阵A元素按正无穷方向取整。
-
round(A)对矩阵A元素四舍五入。
-
fix(A)将矩阵A中元素按离0近的方向取整。
-
[n,d]=rat(A)矩阵A中的每个元素表示为两个整数的有理除式。相当于A的点右除运算。如果该等式无左边的标识,以列向量化形式返回有理式表示的元素数值。
-
rem(A,x)求矩阵A的余数,x为模数,可理解为除数。
x不为0时,整数部分由fix(A./x)表示,余数C=A-x.*fix(A./x)
x为与A相同维数的矩阵时,按对应元素计算
不同维数不能计算
流程控制结果
循环结构
-
For 循环变量=Vect
-
循环体语句组
end
-
Vect为向量
-
-
While 逻辑变量
循环体语句组
end
说明:1.逻辑变量:衡量是否满足条件表达式,满足则变量为1,不满足为0
2.满足条件执行循环,否则跳出。
3.用于不知道参数具体值。
Break语句,无条件的跳出循环。一般结合条件转移语句使用。
-
循环嵌套,在一个循环结构中嵌入另一个或多个循环结构。
条件转移结构
单条件转移结构
if 条件表达式
条件语句组
end
二条件转移结构
if 条件表达式
条件语句组1
else
条件语句组2
end
多条件转移结构
if 条件表达式1
条件语句组1
else if 条件表达式2
条件语句组2
……
else
条件语句组n+1
end
开关结构
Switch 表达式
case 表达式1
语句段1
case {表达式2,表达式3,……,表达式m}
语句段2
……
otherwise
语句段n
end
试探式语句结构
Try
语句段1
catch
语句段2
end