数据的输入
1 | % 换行分号,行末分号 |
Tab键补全功能,语法提示,错误纠正
1 | >> Sin(pi) |
科学计数法
1 | >> a=10000000000000000000000000000000000000 |
相对精度
eps = 2.2204e-16
1 | >> a=10000000000000000; %1E16 |
ans,NaN,inf,eps,i,j,pi
1 | >> 2+3 |
开立方根
1 | >> a=-8; |
命令行换行输入
>> a=1 % 按Shift+Enter快捷键暂不执行此行命令,并进入下一行输入b=2 % 按 Shift+Enter快捷键进入下一行输入,此时还可以编辑本行或上面一行命令c=a+b % 按回车键运行全部3行命令
当用户输入有关键词的多行循环命令时,例如for和end,并不需要使用Shift+Enter快捷键,直接按回车键即可进入下一行输入,直到完成了循环体之后,MATLAB才会将各行程序一起执行。
1 | for r=1:5 % 按回车键 |
在同一行内输入多个函数
x = (1:10)'; logs = [x log10(x)]
长命令行的分行输入
1 | headers = ['Author First Name, Author Middle Initial ' ... |
标识符(…)如果出现在两个单引号的中间,MATLAB则会报错
Format long /short /compact/loose 调整数据显示格式
format long %长整型显示格式format short %短整型显示格式format compact %压缩空格format loose %松散
clc,clear,close all 清屏, 清除内存, 关闭所有的Figure窗口
空格的作用
1 | >> a3=[7 - 2 + 5] |
冒号的作用
a=2:2:20 %从2 ~ 20 步长为2
特殊矩阵的生成函数
1 | ones(4) % 创建所有元素为1的矩阵 |
- 随机种子的设置
不同版本设置方式有所不同,根据提示来
1 | % rand('state', 0); % 14b |
数组矩阵寻访
全下标标识
1
2
3
4>> a=[1 2 3; 4 5 6] % 创建测试矩阵
>> A=a(2,2) % 全下标寻访
A =
5单下标标识
1
2
3>> b=a(4) % 单下标寻访
b =
5逻辑1标识
1
2
3
4
5
6
7
8
9
10
11
12
13>> B=a>5 % 返回逻辑下标
B =
2×3 logical array
0 0 0
0 0 1
>> c=a(B) % 逻辑下标寻访
c =
6
>> C=a(a>5)
C =
6冒号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17>> d=a(1,:) % 通过使用冒号可以寻访全行元素
d =
1 2 3
>> e=a(:,2) % 通过使用冒号可以寻访全列元素
d =
2
5
>> f=a(:) % 单下标寻访
f =
1
4
2
5
3
6向量/数组
1
2
3
4>> g=a(:,[1 3]) % 寻访地址可以是向量,以同时寻访多个元素
g =
1 3
4 6
数组矩阵操作
矩阵的合并
1
2
3
4
5
6
7
8
9
10>> A = ones(2, 5) * 6; % 元素全部为6的2´5矩阵
>> B = rand(3, 5); % 3´5 的随机数矩阵
>> C = [A; B]
C =
6.0000 6.0000 6.0000 6.0000 6.0000
6.0000 6.0000 6.0000 6.0000 6.0000
0.5469 0.1576 0.4854 0.4218 0.9595
0.9575 0.9706 0.8003 0.9157 0.6557
0.9649 0.9572 0.1419 0.7922 0.0357矩阵的赋值
1
2
3
4a=magic(4)
a(3,4)=0 % 对单个元素进行赋值
a(:,1)=1 % 对第一列进行赋值
a(14)=16 % 采用全下标对第14个元素进行赋值矩阵的转置
1
2
3
4
5
6
7
8
9>> A = [1 2; 3 4]
A =
1 2
3 4
>> A'
ans =
1 3
2 4
数组运算和矩阵运算的区别
1
2a=[1 2 4 9;16 25 36 49]
b=sqrt(a) % 应用函数对矩阵中的每一个元素分别开方矩阵的形状信息
1
2
3
4
5
6
7
8
9
10
11
12>> A = rand(5,3) * 10 % 生成5´5的随机矩阵
>> size(A)
ans =
5 3
>> a=length(A) %对于维度较多的数组,长度为max(size(A))
b=sum(A(:))/numel(A) % 使用Sum和numel函数计算矩阵A的平均值 numel:Number of array elements
mean(A) %第一维度(列)求平均数
mean(A,2) %第二维度(行)求平均数
mean(A(:)) %整个数组平均数
mean(mean(A))数组运算和矩阵运算的比较
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16A=[1 2;3 4] % 测试矩阵A
B=[4 3;2 1] % 测试矩阵B
r1=100+A % 矩阵A加上一个常数
r2_1=A*B % 两个矩阵相乘,矩阵乘法
r2_2=A.*B % 两个矩阵相乘,数组乘法
r3_1=A\B % 矩阵左除
r3_2=A.\B % 数组除法
r4_1=B/A % 矩阵右除
r4_2=B./A % 数组除法
r5_1=A.^2 % 数组幂
r5_2=A^2 % 矩阵幂
r6_1=2.^A % 数组幂
r6_1 =
2 4
8 16矩阵元素的扩展与删除
1
2
3
4
5A=magic(4)
A(6,7)=17 %直接赋值就可以扩充
A(:,8)=ones(6,1)
A(:,1)=[] % 删除矩阵A的第1列
A(2,:)=[] % 删除矩阵A的第2行矩阵的重构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23>> a=reshape(1:9,3,3) % 创建测试矩阵
a =
1 4 7
2 5 8
3 6 9
>> a= [1,7;2,8;3,9;4,10;5,11;6,12]; % 创建测试矩阵
>> a = reshape(a,4,3) % 使用reshape改变a的形状
a =
1 5 9
2 6 10
3 7 11
4 8 12
% 注意前后两个a每一个单下标对应的元素是一致的
>> b=rot90(a,3) % 将矩阵a逆时针旋转3×90°
b =
4 3 2 1
8 7 6 5
12 11 10 9
c=fliplr(a) % 将矩阵a左右翻转
d=flipud(a) % 将矩阵a上下翻转稀疏矩阵,创建,与普通矩阵转换,视图
1
2
3
4
5
6
7
8
9
10>> A=[0 0 0 1;0 1 0 0;1 2 0 0;0 0 3 0];
>> s=sparse(A)
s =
(3,1) 1
(2,2) 1
(3,2) 2
(4,3) 3
(1,4) 1
B=full(s) %还原成普通矩阵使用函数sparse,可以用一组非零元素直接创建一个稀疏矩阵。该函数调用格式为:
S=sparse(i,j,s,m,n)
其中i和j都为矢量,分别是指矩阵中非零元素的行号与列号,s是一个全部为非零元素矢量,元素在矩阵中排列的位置为(i,j)。m为输出的稀疏矩阵的行数,n为输出的稀疏矩阵的列数。1
2
3
4S=sparse([1 3 2 1 4],[3 1 4 1 4],[1 2 3 4 5],4,4) %行号矢量,列号矢量, 值矢量
full(S)
B = bucky;
spy(B) %画图
多维数组
创建多维数组最常用的方法有以下4种。
- 直接通过“全下标”元素赋值的方式创建多维数组。
- 由若干同样尺寸的二维数组组合成多维数组。
- 由函数ones、zeros、rand、randn等直接创建特殊多维数组。
- 借助cat、repmat、reshape等函数构建多维数组。
1 | >> clear %%%%记得要清内存啊啊 |
1 | B(3,4,:)=1:4 % 创建3*4*4数组 |
1 | C(:,:,1)=magic(4); % 创建数组A第1页的数据 |
1 | D=rand(3,4,3) % 由函数rand直接创建特殊多维数组 |
1 | e=[1,2;3,4;5,6] |
运算D=shiftdim(A,1)实现以下操作:D(j,k,i)=A(i,j,k),i, j, k分别是指各维的下标。对于三维数组,D=shiftdim(A,3)的操作就等同于简单的D=A。
数据类型
数值型
……
逻辑型
1 | >> a=[1 2 3; 4 5 6] % 创建测试矩阵 |
练习
1 | a=[1 2 3;4 5 6]; |
运算符优先级

字符和字符串
1 | >> a = 'matlab' |
结构数组

1 | >> employee.name='henry'; |
结构还可以通过赋值的方式扩展为结构数组
1 | >> employee(2).name='lee'; |
子域
1 | >> green_house.name='一号房'; |
元胞数组

创建元胞数组
1 | >> A = {[1 4 3; 0 5 8; 7 2 9], 'Anne Smith'; 3+7i, -pi:pi/4:pi} |
依次创建元胞数组
1 | clear |

日期和时间
1 | t = datetime(2017,8,28,6:7,0,0) |
Tables 表格数组
1 | T = readtable('patients.dat') % 读取表格数据 |
可通过以下方式直接创建
1 | LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'}; |
表可以像普通数值矩阵那样通过小括号加下标来进行寻访。除了数值和逻辑型下标之外,用户还可以使用变量名和行名来作为下标。例如本例中可以使用LastName作为行名,然后将这一列数据删除。
1 | clear |
基于已有变量(身高和体重)用户可以创建新的变量BMI,也就是体重指数。然后还可以添加变量的单位和描述等属性。
T.BMI = (T.Weight0.453592)./(T.Height0.0254).^2;
T.Properties.VariableUnits{‘BMI’} = ‘kg/m^2’;
T.Properties.VariableDescriptions{‘BMI’} = ‘Body Mass Index’;
size(T) % 查看当前表的尺寸
导数
1 | A=randperm(9) % 生成随机数列 |
梯度
FX = gradient(F):返回F的一维数值梯度,F是一个向量。
[FX,FY] = gradient(F):返回二维数值梯度的x和y部分,F是一个矩阵。
[FX,FY,FZ,…] = gradient(F):求高维矩阵F的数值梯度。
[…] = gradient(F,h):h是一个标量,用于指定各个方向上点之间的间距。
[…] = gradient(F,h1,h2,…):指定各个方向上的间距。
1
2
3
4
5v = -2:0.2:2;
[x,y] = meshgrid(v);
z = x .* exp(-x.^2 - y.^2); % 创建测试数据
[px,py] = gradient(z,.2,.2); % 求梯度
contour(v,v,z), hold on, quiver(v,v,px,py), hold off % 绘制等高线和梯度方向