1.若i和j不改写,它们将表示虚数的。但是在Matlab程序的设计过程中,经常使用i或者j作为循环的变量。如果涉及到虚数运算,应当先确认这两个量有没有被改写,如果被改写了,用i=sqrt(-1)来重置。
2.无穷大,在Matlab中用inf表示,负无穷大相应地用-inf表示。
3.NaN,指的是不定式(not a number,NaN),通常由0/0运算、Inf/Inf及其他可能的运算得出。
4.pi,圆周率的双精度浮点表示。
1.数值型。Matlab中最常用的数值量是双精度的浮点数,占8个字节(64位),在matlab中其表示为double()。
2.符号型。Matlab中还定义了符号型变量,用来区别数值型变量,可以用于推导公式和数学解析求解。在进行解析运算之前要将采用的变量声明为符号变量,利用的命令是syms.具体用法是syms vars props,其中vars是需要声明的变量列表,可以同时生命多个变量,中间用空格分隔,而不是用逗号分隔开。如果需要,还可以进一步生命变量的类型:props,可以使用的类型由real、positive等。例如,将a、b定义为符号变量可以表达为:syms a b,假设要将a定义成实数,那就用syms a real
符号型数值可以通过变精度算法函数vpa()以任意指定的精度显示出来。该函数的调用格式为vpa(A),或vpa(A,n),其中A是要显示的数值或者矩阵,n为指定的有效数字位数,前者以默认的十进制位数(32位)显示结果
例2-1.自然对数底e的前300位有效数字可以由下面的语句直接显示出来。代码中首先要把1转换成符号量。
如果没有把1转换成符号量,则结果如下:
说明如果没有把1转换成符号类型,虽然要求了提供前300位的解析解,但是程序做不到。
3.其他数据结构。
3.1字符串。Matlab支持字符串变量,与其他语言不同的是,matlab的字符串需要用单引号括起来。(这点跟Python有点像)
3.2多维数组。三维数组是一般矩阵的直接拓展。在控制系统的分析中也可以直接用于多变量系统的表示上。在实际编程中还可以使用维数更高的数组。
3.3单元数组。单元数组是矩阵的直接扩展,其存储格式类似于普通的矩阵,而矩阵的每个元素不是数值,可以认为能储存任意类型的信息,这样每个元素称为“单元”(cell),例如A{i,j}可以表示单元数组A的第i行,第j列的内容。
3.4类与对象。后面再介绍,高阶内容。
1.直接赋值语句
变量=值。例如考虑矩阵:
由下面的语句将值直接赋值给矩阵A
2.函数调用语句
基本形式:[返回变量列表]=函数名(输入变量列表),其中,函数名的要求和变量名的要求是一致的,一般函数名应该对应再MATLAB路径下的一个文件。
例如函数名为:my_fun应该对应于my_fun.m文件。还有一些函数名需对应于MATLAB的内核函数(built-n function),如inv()等函数。
返回变量列表和输入变量列表均可以由若干个变量名组成,它们之间应该分别用逗号。返回变量还允许使用空格分隔,例如[U S V]=svd(X),这是对矩阵X进行SVD分解的函数,返回值是S,V,D这三个变量,如果不想返回某个变量,则可以用~符号占位。
这一部分很重要,因为控制系统中的运算除了少数简单的的纯代数运算,大部分都是矩阵运算。冒号表达式时MATLAB中很有用的表达式,在向量生成、子矩阵提取等很多方面极其重要。冒号表达式的原型为:v=s1:s2:s3,该函数将生成一个行向量v,其中s1时向量的起始值,s2为步距:该向量从s1出发,每隔步距s2就取一个点,直至不超过s3的最大值就可以构成一个向量。若省略s2,则步距默认取1.
例2-4选择不同的步距,则可以用下面语句在t∈[0,Π]区间去除一些点构成向量。
下面尝试冒号表达式的不同写法
很明显步距无法是负的,所以v2取出来是个空的向量。
如果省略了s2,程序会默认步距为1.
如果把上下限反过来写,步距写成-1,那么就会逆序排列构成新向量。
提取子矩阵是在MATLAB操作中非常容易用到的操作。提取子矩阵的具体方法是B=A(v1,v2),其中,v1向量表示子矩阵要包含的行号构成的向量,v2表示要包含的列号构成的向量,这样从A矩阵中提取有关的行和列,就可以构成子矩阵B了。如果v1的地方用冒号占位,即B=A(:,v2)意思是要提取A矩阵所有的行。子矩阵提取通常配合关键字end使用,end用于表示最后一行/列。
例2-5 下面将列出若干命令,并加以解释。
提取矩阵A的奇数行和所有列。这里嵌套了冒号表达式,我们知道冒号表示的格式是,a=s1:s2:s3,其中s2为步距。那么在B1=A(1:2:end,:)中,逗号前的语句就是冒号表达式,即1:2:end,意思是,从第一行开始,以步距为2,取下一行,一直到行数的末尾。 这样就实现了奇数行的提取。而逗号之后是一个冒号,意思是所有的列都取。
取A矩阵的第3、2、1行和2、3、4列组成新矩阵B2
取A矩阵的所有行,列从第一列到最后一列反着排列组成新矩阵B3。实际上就是左右颠倒个儿。
如果一个矩阵A有n行、m列元素,则称A矩阵为nxm矩阵;若n=m则矩阵为仿真。
1.矩阵转置
矩阵转置记作,其元素定义为
,故B为mxn矩阵。如果A矩阵含有复数元素,则对之转置时,其转置矩阵B的元素定义为
,即先对各个元素进行转置,然后再逐项求取其共轭复数值。这种转置又称为Hermit转置,其数学符号是
。MATLAB中用
可以求出A矩阵的Hermit转置,矩阵的转置则可以由
求出。
2.加减法
假设再MATLAB环境下有两个矩阵A和B,则可以由和
命令取执行矩阵加减法。若A和B的矩阵维数相同,它将会自动地将A和B矩阵对应元素相加减,从而得到正确的结果,并赋值给C变量。若二者之一为标量,则应该将其遍加(减)于两一个矩阵。在其他情况下,MATLAB将自动地给出错误信息,提示用户两个矩阵的维数不匹配。
3.矩阵乘法
4.矩阵的左右除
MATLAB中用“\"和"/"分别表示矩阵的左除和右除,A\B为方程的解
,
为方程
的解。若A为非奇异方阵,则左除和右除分别为
和
5.矩阵翻转
矩阵A进行左右翻转再赋值给B:B=fliplr(A),而C=flipud(A)是指把矩阵A上下翻转再赋值给C,D=rot90(A)是将矩阵A逆时针旋转90度再赋值给D
6.矩阵乘方
矩阵乘方要求A必须是方阵,代码为F=A^x,其中x可以是整数、分数、无理数和复数。
7.点运算
MATLAB中的特殊运算。两个矩阵之间的点运算是它们对应元素的直接运算。例如表示A和B的相应元素之间直接进行点乘运算,然后将结果赋值给C矩阵,即
。这种点乘运算又称为Hadamard乘积。注意,点乘积要求A和B矩阵的维数相同或其一为标量。这种运算和普通乘法不同。
点运算在MATLAB中起到很重要的作用。例如,当x是一个向量时,则求取数值时不能直接写成x^5,而必须写成x.^5。在进行矩阵的点运算时,同样要求运算的两个矩阵是维度一致的。其实一些特殊的函数,例如sin()也是由点运算的形式进行的,因为它要对矩阵的每个元素求取正弦值。
矩阵点运算不仅可以用于点乘积,还可以用于其他。例如进行A.^A运算,则新的矩阵元素为
MATLB的化简函数为simple(),具体用法:
s1=simple(s) %从各种方法中自动选取最简单格式
[s1,how]=simple(s)%化简并返回实际采用的化简方法
除此之外还有collect()函数,可以合并同类项,expand()函数可以展开多项式,factor()函数可以因式分解,numden()函数可以提取多项式的分子和分母,sincos()可以进行三角函数的化简等。这些函数的信息与调用格式都可以用help查看。
试用各种化简函数对其进行处理,并理解得出的变换结果。
这里需要注意,高版本的matlab好像已经没有simple函数,取而代之的是simplify()