变量的定义不需要进行事先声明,也不需要指定变量类型。MATLAB会根据赋值类型自动判断。MATLAB将识别到的变量视为局部变量,定义全局变量需要在变量前加global。一般会用全大写字母表示全局变量。
MATLAB本身预定义的变量称为常量。比如pi对应为圆周率。常量值被更改(如定义变量与常量名重复且赋值),可通过命令clear + 常量名来恢复常量初值。
MATLAB常用数据显示格式如下:
类型 | 数据精度 |
---|---|
short | 小数点后4位(默认) |
long | 小数点后14位 |
short e | 5位指数 |
long e | 15位指数 |
MATLAB中复数的表示:用i或者j来表示复数基本单位。数值表示:3i,表达式表示:value1*i,表达式中必须使用*将变量与i分开。
字符串与字符数组基本等价,即字符串视为一个字符数组中各个元素的组合,可以用数组方式操作字符串。%之后的内容为注释
矩阵可以直接输入:
s = [1 4 7; 2 5 8;3 6 9]
S = [1,4,7; 2,5,8;3,6,9]
上面两个得到的矩阵相同。矩阵元素间用空格或者 , 分开,矩阵行与行之间用 ; 分开。
可以采用增量赋值来快速创建有多个元素的矩阵;
S = 初值:增量:终值
如s = 0.5:0.5:2 得到一个1x3矩阵:s= [0.5 1.0 1.5 2.0]。可以在一维数组基础上创建多维矩阵。不指定增量时默认增量为1。
对于一个矩阵S,S(i,j)表示矩阵的第i行第j列元素。可以直接进行读取或者赋值。如果读出元素超出矩阵大小则会报错,如果赋值元素超出矩阵大小,即目标元素前面有未定义元素,则会将未定义元素用0填充。
可以采用单下标来定位一个元素,如S(i,j)可以表示为S(s),其中s=(j-1)*m-1,即按照从上到下,从左到右排序后的元素序号。
从已经存在的矩阵中按条件取出部分元素组成的新的矩阵称为原来矩阵的子矩阵。常用为根据行列条件或者单下标条件进行创建,例子如下:
% 单独下标赋值
s(5:6) = [9 9] % 将第5、6个元素赋值为9
% 全下标赋值,可以指定具体元素,也可以指定为部分元素。部分元素时行和列数目应该对应
s(1:2, 1:3) = [2 2 2; 3 3 3] % 对第1-2行的第1-3列元素赋值
% 全元素赋值
s(:) = B % B要去元素总数和s元素总数一致
如果语句过长需要换行,在语句后面添加…。结果默认变量名为ans。
MATLAB变量定义以字母开头,允许包含字母,数字和_,且区分大小写。
MATLAB可同时执行以,或者;隔开的多个赋值语句,如下:
t=cos(pi/7);y=x^2,z=5*y %将会打印y和z的结果,不会打印t的结果
who命令可以对已经定义的变量进行查询,whos命令可以对已经定义的变量及其属性进行查询。如下:
永久变量是MATLAB预定义的,不能用clear命令清除,不响应who,whos命令。如果在程序中对永久变量赋值了可使用clear使其恢复为默认值。常用永久变量如下:
变量 | 含义 | 变量 | 含义 | |
---|---|---|---|---|
ans | 计算结果的默认变量名 | NaN或者nan | 非数变量 | |
eps | 机器0阈值 | nargin | 函数输入变量数目 | |
Inf或inf | 无穷大 | nargout | 函数输出变量数目 | |
i或j | 虚数单位 | realmax | 最大正实数 | |
Pi | 圆周率 | realmin | 最小正实数 |
按优先级排序的算术运算符如下:
可以通过括号改变运算优先级。注意标量运算,向量运算,矩阵运算的区别。
MATLAB可以实现复数的直角坐标转换和极坐标转换。复数z的直角坐标表示为z=a+bi和极坐标表示z=re θ \theta θi的相关操作指令如下:
函数 | 功能 |
---|---|
real(z) | 得到z的实数部分 |
imag(z) | 得到z的虚数部分 |
abs(z) | 得到z的模:r= a 2 + b 2 2 \sqrt[2]{a^2 + b^2} 2a2+b2 |
angle(z) | 得到z的相角: θ \theta θ=arctan(b/a) |
矩阵运算遵循线性代数运算规则。除了加减乘,MATLAB还定义了矩阵的除,包括左除、右除,其意义和乘以矩阵的逆意义相近。具体涉及到的矩阵运算可以百度。常用的矩阵运算在MATLAB中如下:
(1)矩阵转置
矩阵A的转置表示为A’。如果A为复数矩阵,则A’为A的共轭矩阵(即实部不变,虚数取反)。例子如下:
A = [3 5 9; 2 6 8]
A1 = A' % 此时A1的值为A的转置
(2)加减运算
两个具有相同阶数的矩阵的加减是对应元素的加减,而矩阵与标量的加减则是矩阵中每个元素与标量进行加减。
(3)矩阵的乘法
使用*进行乘运算。标量与矩阵的乘运算是每个元素与标量进行乘法运算,矩阵间的乘法按照线性代数运算,即前一个矩阵的列数与后一个矩阵的行数相同才行。
即兴补充:filpir(A) 表示将矩阵A的左右翻转得到新的矩阵,但不会改变矩阵A,需要将其赋值给别的变量。
(4)矩阵的除法
矩阵的除法包括左除\和右除/。
左除:A\B,表示矩阵A左除矩阵B,结果与A的逆和矩阵B相乘结果相似。可以视为A\B是方程Ax=B的解,如果方程欠定或者超定,则结果为其最小二乘解。
右除:A/B,表示矩阵A右除矩阵B,结果与矩阵A和矩阵B的逆相乘相似。可以视为方程xB=A的解。
(5)矩阵乘方
矩阵乘方表示为A^P,根据A和P的不同具体对象,有不同的含义:
A=[12 22; 32 42]
C=A^0.4 %此时C为=[1.6635+1.1684i 1.6411-0.5652i; 2.3870-0.8221i 3.9013+0.3977i]
注意区分数组和矩阵,使用正确运算符进行运算。数组的运算符是在矩阵的运算符前面加一个.,且两个数组要具有相同的维数才能进行数组计算。
(1)数组加减法
数组加减法为对应元素之间的互加和互减。采用运算符 + 和 - 。
(2)数组乘除
为对应元素间的乘除,运算符为:.* 、./ 、.\。
其中x ./ y表示除法运算中x的元素作为被除数,而x .\ y中x的元素作为除数。
(3)乘方运算
运算符为.^,根据底数和指数的不同,可以分为3种情况:
底数和指数都为数组;
底数为数组,指数为标量;
底数为标量,指数为数组;
乘方运算示例如下:
x=[1 4 7 9];
y=[3 6 8 2];
a=x.^y; %结果为a=[1 4096 576480 81]
b=x.^3; % 结果为b=[1 64 343 729],即每个元素进行3次乘方
c=5.^y; % 结果为c=[125 15625 390625 25],即每个新元素都为对5进行对于位置y元素进行乘方
(4)关系运算
数组与数组之间进行关系运算,实际是对应元素之间进行比较,结果成立时候返回1,否则返回0。
支持的关系运算符如下:>、 >= 、==、 >、 <=、 ~=(不等)。
(5)逻辑运算
为数组间对应元素的运算。支持的逻辑运算如下:与(&)、或(|)、非(-)。
a = [1 3 5] %直接创建
b = 0.5:1:8 %增量法创建,顺序为 初值:步长:终值
c = linspace(x1, x2, n) % 利用线性等分功能来进行创建。x1为第一个元素值,x2为最末元素值,n为目标维度,将x1~x2这个区间等分为n-1份,共n个元素
可以用一个向量来作为矩阵下标。如下例子:
a = [5 7 9 11 17]
b = [5 1 3 2 4]
c = a(b) % 此时c=[175 9 7 11],即根据b中的数值改变a中元素的顺序
% 利用线性等分功能来进行创建。x1为第一个元素值,x2为最末元素值,n为目标维度,将x1~x2这个区间等分为n-1份,共n个元素
### 1.7.2 向量下标
可以用一个向量来作为矩阵下标。如下例子:
```matlab
a = [5 7 9 11 17]
b = [5 1 3 2 4]
c = a(b) % 此时c=[175 9 7 11],即根据b中的数值改变a中元素的顺序