控制语句
MATLAB 常用的控制语句有for, while, if, switch 等。
一、循环语句
通过循环控制语句,可以重复执行代码块。循环有两类:for 循环和while 循环。
for 循环是一组语句重复固定的,指定的次数,while 循环是满足条件执行。
1.for 循环
循环特定次数,并通过递增的索引变量跟踪每次迭代。
for 循环的典型结构如下: for x=lower_bound:step:upper_bound group of statements end • 1 • 2 • 3 • 4
循环变量为x,表达式lower_bound:step:upper_bound 给循环变量赋值,循环变量从初始值lower_bound 开始,步长为step 进行递增。如果step 为1 可以省略。循环索引
lower_bound:step:upper_bound 相当于一个数组。在每一次循环执行期间,循环变量执行一次,直到循环变量超过终止值upper_bound 为止。end 语句标志着循环执行语句的结束。
简单示例:
2.while 循环
只要条件仍然为true 就进行循环,事先并不知道循环的执行次数。
while 循环的典型结构如下: while expression group of statements end • 1 • 2 • 3 • 4
逻辑表达式expression 为真,则执行语句,直到逻辑表达式为假时终止。当表达式始终为真,循环则会无限的执行下去。在while 循环之前,循环变量有一个初始值,在执行过程中,循环变量的值被改变。
简单示例:
break 和continue 语句
使用break 语句可以在循环变量达到终止值之前跳出循环,break 命令可以终止循环。
使用continue 语句跳到循环的下一次迭代。
二、条件语句
条件语句可用于在运行时选择要执行的代码块。条件语句中包含一个或者多个if,else,elseif 语句。可以根据真/假(布尔)表达式有条件地控制1 个或多个命令的执行。
1. if 语句
if 语句的基本结构是:
if expression group of statements end • 1 • 2 • 3
每一个if 语句以end 语句作为结束。
如果有两种选择,使用if 和else 语句,基本结构如下:
if expression statements1 else statements2 end • 1 • 2 • 3 • 4 • 5
如果有多个选择,使用if 和elseif 语句,基本结构如下:
if expression1 statements1 elseif expression2 statements2 else statements3 end • 1 • 2 • 3 • 4 • 5 • 6 • 7
2.switch 语句
除了if, elseif, else 语句之外还可以使用switch 语句。switch 语句也可以用if 结构编写。
switch 语句执行多组语句中的一组。
switch 语句基本结构如下:
switch switch_expression case case_expression statements1 case case_expression statements2 ... otherwise statementsn end • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9
输入表达式switch_expression 与每一个case 进行比较,如果bool 值时1,则执行case语句之后的语句statements。如果没有相应的case,则执行otherwise 语句之后的语句,如果没有otherwise 语句,则执行end 之后的语句。
数组操作
数组可分为:空数组,向量(一维数组),二维数组,多维数组。标量是只有一个元素的数组,向量是只有一行或者一列的数组,也称为一维数组。矩阵是二维的数组,可以看作
是几行或者几列合并在一起的向量。
矩阵的数学含义是一个空间的线性变换,拉伸、旋转、缩放、反射的结合。
矩阵的运算,矩阵和矩阵相乘的本质是坐标系的线性变换,矩阵和向量相乘的本质是向量的线性变换。
一、矩阵基本操作
1.创建
矩阵是二维数组,具有多行多列。矩阵是按行进行书写,每一行以分号进行分隔,每一
列以逗号或者空格进行分隔。三种书写方式等价。(…)符号可以在使用空格处使用。例如,A= [1 2 3; 4 5 6];
创建了一个二维数组。
矩阵可以通过内置函数创建,函数zeros(m,n)可以创建m* n 的全零矩阵。
函数ones(m,n)可以创建m *n 的全1 矩阵。
2.获取元素
A(i,j)是第i 行第j 列的元素。
指定行和列的范围,A(m:n,k:l)是m 到n 行,k 到l 列的范围的元素。
以冒号:作为索引为指定矩阵的所有行或所有列。
A(m:n,:)是m 到n 行,所有列的范围的元素。
A(:,k:l))是所有行,k 到l 列的范围的元素。
3.矩阵赋值
获取矩阵的尺寸,size(A,1)是矩阵A 的第一位,size(A,2)是矩阵的第二个维度。
当第一次指定矩阵时,如果矩阵未存在,未指定的元素被赋值为零。
B(2,3)=5;
4.空矩阵
零行零列的矩阵为空矩阵,x=[]。
5.删除元素
利用空矩阵删除矩阵的元素,将矩阵的元素设置为[],即可删除元素。
A(:,1)=[]; % 删除矩阵的第一列所有元素
A(2,:)=[]; % 删除矩阵的第二行所有元素
6.矩阵重排
函数reshape()可以实现数组的重排。函数reshape()可以改变数组的形状,reshape(A,m,n)
可以将矩阵重排为m* n 的矩阵,重构前后的元素个数相同。
例如,将数组A 重构为5*2 的数组。
矩阵可以被重排成向量,按列重排
7.矩阵转置、旋转、翻转
矩阵A 的转置为A’。
矩阵的旋转可以利用函数rot90(A,k)将矩阵A 旋转90 度,k 为旋转90 度的倍数。
矩阵的翻转可以利用函数fliplr()将矩阵左右翻转或者函数flipud()将矩阵进行上下翻转。
8.矩阵扩充
列向量u,行向量v 可以通过以下方式对A 的列进行扩充和行进行扩充。
A=[A u]
A=[A; v]
9.特殊矩阵
魔方矩阵,使用magic()函数进行创建,每行、每列以及两条对角线上的元素和相等。
希尔伯特矩阵,使用hilb()函数创建。
稀疏矩阵,使用sparse()函数创建,使用稀疏存储的方式进行创建。
二、矩阵运算
1.矩阵的加减法
如果矩阵A 和B 有相同的维度,矩阵A+B, A-B 是相应位置上的元素进行加减。
矩阵与标量进行加减,是将矩阵的每一个元素与标量进行加减。
矩阵与标量相乘,是将矩阵的每一个元素与标量进行相乘。
2.矩阵的乘法
矩阵的乘法A *B,需要满足矩阵A 的列数与B 的行数相等,C=A *B,矩阵C 的行数等于A 的行数,列数等于B 的列数。
矩阵的乘法可以使用循环的方式得到相乘后的每一个元素。
3.矩阵的除法
- MATLAB 中的左除号与右除号的区别,左除号(\),右除号(/)。
- /:右除:A/B 表示矩阵A 乘以矩阵B 的逆。
- \:左除:A\B 表示矩阵A 的逆乘以B。解方程AX=B,X=A\B,相当于inv(A)*B。
- ./:右除:A./B 表示矩阵A 中的每个元素除以矩阵B 的对应的元素。
- .\:左除:A.\B 表示矩阵B 中的每个元素除以矩阵A 的对应的元素。
三、矩阵分析
1.矩阵的逆
函数inv()可以计算矩阵的逆,例如,B=inv(A); 矩阵B 为矩阵A 的逆。
函数pinv()可以计算矩阵的伪逆,矩阵A 不是方阵或者是一个非满秩的方阵,B=pinv(A);
矩阵B 为矩阵A 的伪逆,也称为广义逆矩阵。
2.矩阵的行列式
函数det()可以计算方阵的行列式。
3.矩阵的秩和迹
函数rank()可以计算矩阵的秩,矩阵的秩是矩阵线性无关的行数和列数。
函数trace()可以计算矩阵的迹,矩阵的迹是特征值之和,矩阵的对角线元素之和。
4.矩阵的范数
函数norm()可以计算矩阵的范数,默认为2-范数。
norm(A,1)为矩阵的1-范数,norm(A,2)为矩阵的2-范数,norm(A,inf)为矩阵的∞范数。
5.矩阵的条件数
函数cond(A,1)计算矩阵A 在1-范数下的条件数,函数cond(A,2)计算矩阵A 在2-范数下的条件数,函数cond(A,inf)计算矩阵A 在∞范数下的条件数。
6.矩阵特征值和特征向量
函数eig(A)用来计算矩阵特征值,[V,D]=eig(A)为矩阵A 的全部特征值构成对角矩阵D,
特征向量构成矩阵V 的列向量。
四、向量运算
向量的逐元素乘积:u.* v=[u1* v1 u2*v2 u3 v3…]
向量的逐元素除法:u./v=[u1/v1 u2/v2 u3/v3…]
向量的逐元素指数运算:u.v=[u1v1 u2v2 u3v3…]
向量的内外积:列向量x,内积为x ’ * x,外积为xx’
五、标量与向量
标量c 只是一个(实数或复数)数值,维度为1*1 的矩阵。
向量v 是一个既有大小又有方向的对象,向量也称为线性数组或线性矩阵,是一个维度长度为1,另一维度长度大于1 的矩阵。
向量分行向量和列向量,行向量的每个数值用逗号或空格隔开,列向量的每个数值用分号隔开。
向量的分量数决定了向量所在空间的维数。
向量的长度由2-范数给出,用函数norm()计算。
符号运算
符号运算是集成到符号数据箱中允许在MATLAB 环境中以富豪的方式执行运算。
符号运算可以计算微分、积分、极限、求和、矩阵求逆、行列式、特征值、化简代数表达式、方程求解等。
符号对象是符号工具箱中定义的一种数据类型,符号对象是符号的字符串表示,符号对象用于表示符号变量、表达式和方程。
一、符号变量与符号表达式
符号变量的生成
使用函数sym 和syms 生成一个或者多个符号对象。
(1)函数sym
生成单个字符符号变量。
x = sym(‘x’) 创建一个符号变量x,变量的内容是x,表达式是x。
(2)函数syms
一次性生成多个符号变量,但是不能用于生成表达式。
syms 函数的输入参数必须以字母为开头,只包含字母和数字。
syms arg1 arg2…定义多个符号变量。
相当于arg1=sym(‘arg1’);arg2=sym(‘arg2’);…
函数subs
将符号表达式中的符号变量用数值代替。
符号方程的生成
二、符号表达式化简
多项式有多种表达式,函数simplify 可以实现符号表达式的化简。
三、符号运算
1.符号微分
函数diff 用来求符号表达式的微分.
diff(S)求表达式S 的导数;
diff(S,n)求表达式S 的n 阶导数;
diff(S,’v’)求表达式S 对变量v 的导数。
2.符号积分
函数int 用于实现符号微分运算。
int(S)求表达式的不定积分;
int(S,v)求表达式S 对自变量v 的不定积分;
Int(S,a,b)求表达式S 在区间[a,b]内的定积分;
Int(S,v,a,b)求表达式S 自变量v 在区间[a,b]内的定积分。