当前位置:   article > 正文

MATLAB(1)_sqrt(15)*randn(800,1);

sqrt(15)*randn(800,1);

MATLAB

第一章 MATALB基础技能

第1节 MATLAB窗口

1、语言修改

中文版:预设——MATLAB——常规

英文版:Preferences——MATLAB——General

2、布局

中文版:布局

英文版:layout

3、帮助

可以搜索一些指令

第2节 命令行

1、常用指令及格式
(1)清除操作
clc 清理命令行显示
clear 清理变量
close all 关闭所有绘图窗口
clf 清除当前图像窗口
  • 1
  • 2
  • 3
  • 4
(2)快捷键
上下键:调用之前输入过的一些命令
esc:删除刚输入的一段
  • 1
  • 2
(3)换行操作
%命令行的换行输入
a=1 % 按Shift+Enter快捷键暂不执行此行命令,并进入下一行输入
b=2 % 按 Shift+Enter快捷键进入下一行输入,此时还可以编辑本行或上面一行命令
c=a+b % 按回车键运行全部3行命令

%当用户输入有关键词的多行循环命令时,例如for和end,并不需要使用Shift+Enter快捷键,直接按回车键即可
%进入下一行输入,直到完成了循环体之后,MATLAB才会将各行程序一起执行。
for r=1:5 % 按回车键
a=pi*r^2 % 按回车键
end % 按回车键并执行循环体内的命令
a =
    3.1416
a =
   12.5664
a =
   28.2743
a =
   50.2655
a =
   78.5398

%在同一行内输入多个函数
>> x = (1:10)'; logs = [x log10(x)]
logs =
    1.0000         0
    2.0000    0.3010
    3.0000    0.4771
    4.0000    0.6021
    5.0000    0.6990
    6.0000    0.7782
    7.0000    0.8451
    8.0000    0.9031
    9.0000    0.9542
   10.0000    1.0000

%长命令行的分行输入
>> headers = ['Author First Name, Author Middle Initial ' ...
'Author Last Name ']
headers =
    'Author First Name, Author Middle Initial Author Last Name '
>> headers = ['Author First Name, Author Middle Initial ' 'Author Last Name ']
headers =
    'Author First Name, Author Middle Initial Author Last Name '
    
%标识符(...)如果出现在两个单引号的中间,MATLAB则会报错
%headers = ['Author Last Name, Author First Name, ...
%Author Middle Initial']

%如果一行数据太多,想分行输入,那么需要加标识符(...),不可以直接换行
>> a=[1 2 3 4 5 ...
 6 7 8]
a =
     1     2     3     4     5     6     7     8
% a=[1 2 3 4 5 
% 6 7 8]     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
(4)数据显示格式
%数据显示格式
%默认显示:四舍五入,小数点后保留四位(但是后台存的是正常的数据)
>> aq=302.45
aq =
  302.4500
>> a=302.00045
a =
  302.0005

>> format long
>> a=302.0045
a =
     3.020045000000000e+02
>> format short
>>  a=302.0045
a =
  302.0045

format long
format short
format compact:紧凑显示(空行少)
format loose:松散显示(空行多) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
(5)科学计数法
>> a=10000000000000000000000000000000000000
a =
   1.0000e+37
>> b=100e35
b =
   1.0000e+37
>> c=0.0000000000021
c =
   2.1000e-12   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
(6)随机种子设置
不同版本设置方式有所不同,根据提示来
% rand('state', 0); % 14b之后
% rng(0)   % 17a之后

rng(0)    %设置完之后,每次生成的随机数都一样的,方便验证数据
>> rng(0)
>> randperm(7) % 创建由1∶7构成的随机数列(每次输入完rng(0),生成的随机序列便如下)
ans =
     6     3     7     5     1     2     4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
2、变量赋值
>> a=1
a =
     1
  • 1
  • 2
  • 3
3、矩阵操作
(1)矩阵输入
% 换行分号,行末分号
>> A = [1 2 3; 4 5 6; 7 8 10]
A =
     1     2     3
     4     5     6
     7     8    10
%行末加分号则不在命令行窗口显示结果,但是会存入内存空间
>> A = [1 2 3; 4 5 6; 7 8 10];
>> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
(2)矩阵合并
>> A = ones(2, 5) * 6    % 元素全部为6的2´5矩阵
A =
     6     6     6     6     6
     6     6     6     6     6
>> B= rand(3, 5) % 3´5 的随机数矩阵
B =
    0.8147    0.9134    0.2785    0.9649    0.9572
    0.9058    0.6324    0.5469    0.1576    0.4854
    0.1270    0.0975    0.9575    0.9706    0.8003
>> 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.8147    0.9134    0.2785    0.9649    0.9572
    0.9058    0.6324    0.5469    0.1576    0.4854
    0.1270    0.0975    0.9575    0.9706    0.8003
>> A = ones(3, 5) * 6
A =
     6     6     6     6     6
     6     6     6     6     6
     6     6     6     6     6
>> C = [A B]  %在维度一致的情况下,左右合并
C =
  1 至 7 列
    6.0000    6.0000    6.0000    6.0000    6.0000    0.8147    0.9134
    6.0000    6.0000    6.0000    6.0000    6.0000    0.9058    0.6324
    6.0000    6.0000    6.0000    6.0000    6.0000    0.1270    0.0975
  8 至 10 列
    0.2785    0.9649    0.9572
    0.5469    0.1576    0.4854
    0.9575    0.9706    0.8003    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
(3)矩阵的赋值
>> a=magic(4)
a =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
>> a(3,4)=0 % 对单个元素进行赋值
a =
    16     2     3    13
     5    11    10     8
     9     7     6     0
     4    14    15     1
>> a(:,1)=1 % 对第一列进行赋值
a =
     1     2     3    13
     1    11    10     8
     1     7     6     0
     1    14    15     1
>> a(14)=16 % 采用全下标对第14个元素进行赋值
a =
     1     2     3    13
     1    11    10    16
     1     7     6     0
     1    14    15     1
>> ones(4) % 创建所有元素为1的矩阵
ans =
     1     1     1     1
     1     1     1     1
     1     1     1     1
     1     1     1     1
>> rand(2,3) % 创建2*3的均匀分布随机数矩阵,赋值范围为0-1
ans =
    0.1419    0.9157    0.9595
    0.4218    0.7922    0.6557
>> randperm(7) % 创建由1∶7构成的随机数列
ans =
     1     7     4     6     5     2     3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
(4)数组运算与矩阵运算
>> a=[1 2 4 9;16 25 36 49]
a =
     1     2     4     9
    16    25    36    49
>> b=sqrt(a) % 应用函数对矩阵中的每一个元素分别开方
b =
    1.0000    1.4142    2.0000    3.0000
    4.0000    5.0000    6.0000    7.0000

>> A=[1 2;3 4] % 测试矩阵A
A =
     1     2
     3     4
>> B=[4 3;2 1] % 测试矩阵B
B =
     4     3
     2     1
>> r1=100+A % 矩阵A加上一个常数
r1 =
   101   102
   103   104
>> r2_1=A*B % 两个矩阵相乘,矩阵乘法
r2_1 =
     8     5
    20    13
>> r2_2=A.*B % 两个矩阵相乘,数组乘法
r2_2 =
     4     6
     6     4
>> r3_1=A\B % 矩阵左除
r3_1 =
   -6.0000   -5.0000
    5.0000    4.0000
>> r3_2=A.\B % 数组除法
r3_2 =
    4.0000    1.5000
    0.6667    0.2500
>> r4_1=B/A % 矩阵右除
r4_1 =
   -3.5000    2.5000
   -2.5000    1.5000
>> r4_2=B./A % 数组除法
r4_2 =
    4.0000    1.5000
    0.6667    0.2500
>> r5_2=A^2 % 矩阵幂
r5_2 =
     7    10
    15    22
>> r5_1=A.^2 % 数组幂
r5_1 =
     1     4
     9    16
>> r6_1=2.^A % 数组幂
r6_1 =
     2     4
     8    16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
(5)矩阵元素的扩展与删除
>> A=magic(4)
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
>> A(6,7)=17
A =
    16     2     3    13     0     0     0
     5    11    10     8     0     0     0
     9     7     6    12     0     0     0
     4    14    15     1     0     0     0
     0     0     0     0     0     0     0
     0     0     0     0     0     0    17
>> A(:,8)=ones(6,1)
A =
    16     2     3    13     0     0     0     1
     5    11    10     8     0     0     0     1
     9     7     6    12     0     0     0     1
     4    14    15     1     0     0     0     1
     0     0     0     0     0     0     0     1
     0     0     0     0     0     0    17     1
>> A(:,1)=[] % 删除矩阵A的第1列
A =
     2     3    13     0     0     0     1
    11    10     8     0     0     0     1
     7     6    12     0     0     0     1
    14    15     1     0     0     0     1
     0     0     0     0     0     0     1
     0     0     0     0     0    17     1
>> A(2,:)=[] % 删除矩阵A的第2行
A =
     2     3    13     0     0     0     1
     7     6    12     0     0     0     1
    14    15     1     0     0     0     1
     0     0     0     0     0     0     1
     0     0     0     0     0    17     1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
(6)矩阵的重构
>> 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 =
     1     7
     2     8
     3     9
     4    10
     5    11
     6    12
>> a = reshape(a,4,3) % 使用reshape改变a的形状,注意前后两个a每一个单下标对应的元素是一致的
a =
     1     5     9
     2     6    10
     3     7    11
     4     8    12
>> b=rot90(a,3) % 将矩阵a逆时针旋转3×90°
b =
     4     3     2     1
     8     7     6     5
    12    11    10     9
>> c=fliplr(a) % 将矩阵a左右翻转
c =
     9     5     1
    10     6     2
    11     7     3
    12     8     4
>> d=flipud(a) % 将矩阵a上下翻转
d =
     4     8    12
     3     7    11
     2     6    10
     1     5     9    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
(7)矩阵的形状信息
>> A = rand(5,3) * 10 % 生成5*3的随机矩阵
A =
    2.7603    4.9836    7.5127
    6.7970    9.5974    2.5510
    6.5510    3.4039    5.0596
    1.6261    5.8527    6.9908
    1.1900    2.2381    8.9090
>> size(A) 
ans =
     5     3
>> a=length(A) %最长的那个方向的长度
a =
     5
>> A = A'   %转置
A =
    2.7603    6.7970    6.5510    1.6261    1.1900
    4.9836    9.5974    3.4039    5.8527    2.2381
    7.5127    2.5510    5.0596    6.9908    8.9090  
>> a=length(A)
a =
     5
>> b=sum(A(:))/numel(A) % 使用Sum和numel函数计算矩阵A的平均值
b =
    5.0682
>> numel(A) 
ans =
    15
>> mean(A)   %求每一列的平均数
ans =
    5.0855    6.3151    5.0048    4.8232    4.1124 
>> mean(A,2)  %求每一行平均数
ans =
    3.7849
    5.2151
    6.2046  
>> mean(A(:))  %求所有元素的平均数
ans =
    5.0682 
>> mean(mean(A))  %先对所有列求平均数,求完平均再求平均
ans =
    5.0682    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
4、数据计算
>> b=29*(2+23/3)-5^2
b =
  255.3333
  • 1
  • 2
  • 3
5、函数的调用

语法格式:返回值=函数名(参数1,参数2,……)

注意:Tab键补全功能,语法提示,错误纠正

plot函数:输入”plot(“,等一会儿,会自动显示

magic(3:直接输入enter,会报错,可以根据箭头指向位置以及错误提示修改

Sin(pi):直接输入enter,会报错,可以根据错误提示修改,sin是区分大小写的

mean(c,'o:按下Tab,会出现自动补全

%生成3*3的幻方,行,列,对角线和都相等
>> d=magic(3)
d =
     8     1     6
     3     5     7
     4     9     2


% mean(a,'omitnan'),忽略NAN值求平均数
>> c=1:10
c =
     1     2     3     4     5     6     7     8     9    10
>> mean(c,'omitnan')
ans =
    5.5000
>> c(4)=NaN
c =
     1     2     3   NaN     5     6     7     8     9    10
>> mean(c,'omitnan')
ans =
    5.6667
>> mean(c)
ans =
   NaN    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
6、常用变量名
% ans:默认赋值结果变量名,但是会被不断覆盖
>> 2+3
ans =
     5
% NAN:not a number
>> 0/0
ans =
   NaN
% Inf:无穷大
>> 2/0
ans =
   Inf
% i或j:虚数单位
>> i
ans =
   0.0000 + 1.0000i
>> j
ans =
   0.0000 + 1.0000i
>> 2+3i
ans =
   2.0000 + 3.0000i
% pi:圆周率   
>> pi
ans =
    3.1416
% eps:相对精度,两个量最小可以差这么多(并不是MATLAB软件造成的,是计算机二进制系统造成的)
>> eps
ans =
   2.2204e-16
   
>> a=10000000000000000
b=10000000000000001
a =
   1.0000e+16
b =
   1.0000e+16
>> c=a-b
c =
     0
>> c==0
ans =
  logical
   1

>> a1=1000000000000000
b1=1000000000000001
a1 =
   1.0000e+15
b1 =
   1.0000e+15
>> c1=a1-b1
c1 =
    -1
>> c1==0
ans =
  logical
   0   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
7、复数相关函数
>> sd=5+6i
sd =
   5.0000 + 6.0000i
>> r=real(sd)   % 给出复数sd的实部
r =
     5
>> im=imag(sd)   % 给出复数sd的虚部
im =
     6
%复数 z=a+bi(a,b∈R)
%则模为√(a²+b²)
%相位角设为W,arctanW=b/a
>> a=abs(sd)   % 给出复数sd的模/绝对值
a =
    7.8102 
>> an=angle(sd)  % 以弧度为单位给出复数sd的相位角,angle 函数可以写为 atan2( imag (h), real (h) )
an =
    0.8761 
>> A=[2,4;1,6]-[3,7;3,9]*i
A =
   2.0000 - 3.0000i   4.0000 - 7.0000i
   1.0000 - 3.0000i   6.0000 - 9.0000i    
>> B=[2+5i,3+2i;6-9i,3-5i]
B =
   2.0000 + 5.0000i   3.0000 + 2.0000i
   6.0000 - 9.0000i   3.0000 - 5.0000i
>> C=B-A
C =
   0.0000 + 8.0000i  -1.0000 + 9.0000i
   5.0000 - 6.0000i  -3.0000 + 4.0000i   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
8、开立方根
>> a=-8
a =
    -8
>> r=a^(1/3)
r =
   1.0000 + 1.7321i
% 结果不为-2,因为在数学中开立方有三个解,有两个解是复数解,-2是实数解
>> R=abs(a)^(1/3) % 模的开3次方
R =
     2
>> m=[0,1,2]; % 为3个方根而设
>> theta=(angle(a)+2*pi*m)/3 % -pi<theta<=pi的3个相位角
theta =
    1.0472    3.1416    5.2360
>> r=R*exp(i*theta) % 将得到的结果赋给r
r =
   1.0000 + 1.7321i  -2.0000 + 0.0000i   1.0000 - 1.7321i    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

角度和弧度:1°=π/180°,1rad=180°/π

角度转弧度 π/180×角度;弧度变角度 180/π×弧度。

复数的立方根求法:
把复数变成幅度和相角的形式
例如a+bi:
幅度为:√(a^2 + b^2)
相角为:arctan(b/a)
开立方根:幅度开立方根,相角变成原来的1/3
得到3个复数,幅度相同,相角不同,它们都是原来那个数的立方根。

比如:求1的立方根:
先把1化成幅度和相角的形式:
幅度为1,相角为360k°(k=0,1,2,…)
开立方根:幅度开立方根,1开立方根还是1
相角变成原来的1/3:360k°/3=120k°(k=0,1,2,…)
所以相角有3种:0°,120°,240°。
得到3个立方根:
幅度1,相角0°;幅度1,相角120°;幅度1,相角240°
再化为a+bi的形式就是:
1 ; -1/2+(√3)i/2 ; -1/2-(√3)i/2

9、空格、冒号
(1)空格的作用
>> a1=7 -2 +5
a2=7 - 2 +5
a3=[7 - 2 + 5]
a4=[7 -2 +5]
a1 =
    10
a2 =
    10
a3 =
    10
a4 =
     7    -2     5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
(2)冒号的作用
>> a=2:2:20

a =

     2     4     6     8    10    12    14    16    18    20

>> b=10:-1:2

b =

    10     9     8     7     6     5     4     3     2
>> b=10:1:2
b =
  空的 1×0 double 行向量
>> a=1:5
a =
     1     2     3     4     5  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
>> a=[1 2 3; 4 5 6] % 创建测试矩阵
a =
     1     2     3
     4     5     6
>> d=a(1,:) % 通过使用冒号可以寻访全行元素
d =
     1     2     3
>> e=a(:,2) % 通过使用冒号可以寻访全列元素
e =
     2
     5
>> f=a(:) % 单下标寻访
f =
     1
     4
     2
     5
     3
     6
>> g=a(:,[1 3]) % 寻访地址可以是向量,以同时寻访多个元素
g =
     1     3
     4     6     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
10、下标
>> a=[1 2 3; 4 5 6] % 创建测试矩阵
a =
     1     2     3
     4     5     6
>> A=a(2,2) % 全下标寻访,第2行第2列
A =
     5
>> b=a(4) % 单下标寻访 (访问顺序:按列,1,4,2,5)
b =
     5 
% 逻辑1标识     
>> B=a>5 % 返回逻辑下标
B =
  2×3 logical 数组
   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
  • 18
  • 19
  • 20
  • 21
  • 22
11、多维数组:

创建多维数组最常用的方法有以下4种:

(1)直接通过“全下标”元素赋值的方式创建多维数组。

(2)由若干同样尺寸的二维数组组合成多维数组。

(3)由函数ones、zeros、rand、randn等直接创建特殊多维数组。

(4)借助cat、repmat、reshape等函数构建多维数组。

%三维数组:几行几列几页
>> A(3,3,3)=1 % 创建3*3*3数组,未赋值元素默认设置为0
A(:,:,1) =
     0     0     0
     0     0     0
     0     0     0
A(:,:,2) =
     0     0     0
     0     0     0
     0     0     0
A(:,:,3) =
     0     0     0
     0     0     0
     0     0     1
     
>> B(3,4,:)=1:4 % 创建3*4*4数组
B(:,:,1) =
     0     0     0     0
     0     0     0     0
     0     0     0     1
B(:,:,2) =
     0     0     0     0
     0     0     0     0
     0     0     0     2
B(:,:,3) =
     0     0     0     0
     0     0     0     0
     0     0     0     3
B(:,:,4) =
     0     0     0     0
     0     0     0     0
     0     0     0     4


>> C(:,:,1)=magic(4); % 创建数组A第1页的数据
C(:,:,2)=ones(4); % 创建数组A第2页的数据
C(:,:,3)=zeros(4) % 创建数组A第3页的数据
C(:,:,1) =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
C(:,:,2) =
     1     1     1     1
     1     1     1     1
     1     1     1     1
     1     1     1     1
C(:,:,3) =
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     
>> D=rand(3,4,3) % 由函数rand直接创建特殊多维数组
D(:,:,1) =
    0.8003    0.9157    0.6557    0.9340
    0.1419    0.7922    0.0357    0.6787
    0.4218    0.9595    0.8491    0.7577
D(:,:,2) =
    0.7431    0.1712    0.2769    0.8235
    0.3922    0.7060    0.0462    0.6948
    0.6555    0.0318    0.0971    0.3171
D(:,:,3) =
    0.9502    0.3816    0.1869    0.6463
    0.0344    0.7655    0.4898    0.7094
    0.4387    0.7952    0.4456    0.7547
    
 % cat()函数,后面那个数字,表示在第几维度上拼
 >> E3=cat(3,ones(2,3),ones(2,3)*2,ones(2,3)*3) %借助cat函数构建多维数组
E3(:,:,1) =
     1     1     1
     1     1     1
E3(:,:,2) =
     2     2     2
     2     2     2
E3(:,:,3) =
     3     3     3
     3     3     3

>> E2=cat(2,ones(2,3),ones(2,3)*2,ones(2,3)*3) %借助cat函数构建多维数组
E2 =
     1     1     1     2     2     2     3     3     3
     1     1     1     2     2     2     3     3     3

>> E1=cat(1,ones(2,3),ones(2,3)*2,ones(2,3)*3) %借助cat函数构建多维数组
E1 =
     1     1     1
     1     1     1
     2     2     2
     2     2     2
     3     3     3
     3     3     3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
>> e=[1,2;3,4;5,6]
e =
     1     2
     3     4
     5     6
>> F=repmat(e,[1,2,3])  %行这一维重复一遍,列这一维度重复两遍,页这一维度重复三遍
F(:,:,1) =
     1     2     1     2
     3     4     3     4
     5     6     5     6
F(:,:,2) =
     1     2     1     2
     3     4     3     4
     5     6     5     6
F(:,:,3) =
     1     2     1     2
     3     4     3     4
     5     6     5     6     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
>> G=reshape(1:60,5,4,3)
G(:,:,1) =
     1     6    11    16
     2     7    12    17
     3     8    13    18
     4     9    14    19
     5    10    15    20
G(:,:,2) =
    21    26    31    36
    22    27    32    37
    23    28    33    38
    24    29    34    39
    25    30    35    40
G(:,:,3) =
    41    46    51    56
    42    47    52    57
    43    48    53    58
    44    49    54    59
    45    50    55    60
    
>> H=reshape(G,4,5,3)
H(:,:,1) =
     1     5     9    13    17
     2     6    10    14    18
     3     7    11    15    19
     4     8    12    16    20
H(:,:,2) =
    21    25    29    33    37
    22    26    30    34    38
    23    27    31    35    39
    24    28    32    36    40
H(:,:,3) =
    41    45    49    53    57
    42    46    50    54    58
    43    47    51    55    59
    44    48    52    56    60    

>> I=flip(H,1)    %数组翻转(第一维度上下翻转)
I(:,:,1) =
     4     8    12    16    20
     3     7    11    15    19
     2     6    10    14    18
     1     5     9    13    17
I(:,:,2) =
    24    28    32    36    40
    23    27    31    35    39
    22    26    30    34    38
    21    25    29    33    37
I(:,:,3) =
    44    48    52    56    60
    43    47    51    55    59
    42    46    50    54    58
    41    45    49    53    57
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

image-20210810134005928

>> J=shiftdim(H,1) % 将各维向左移动1位,使2*3*3数组变成3*3*2数组
J(:,:,1) =
     1    21    41
     5    25    45
     9    29    49
    13    33    53
    17    37    57
J(:,:,2) =
     2    22    42
     6    26    46
    10    30    50
    14    34    54
    18    38    58
J(:,:,3) =
     3    23    43
     7    27    47
    11    31    51
    15    35    55
    19    39    59
J(:,:,4) =
     4    24    44
     8    28    48
    12    32    52
    16    36    56
    20    40    60
>> K=shiftdim(H,2) % 将各维向左移动2位,使2*3*3数组变成3*2*3数组    
K(:,:,1) =
     1     2     3     4
    21    22    23    24
    41    42    43    44
K(:,:,2) =
     5     6     7     8
    25    26    27    28
    45    46    47    48
K(:,:,3) =
     9    10    11    12
    29    30    31    32
    49    50    51    52
K(:,:,4) =
    13    14    15    16
    33    34    35    36
    53    54    55    56
K(:,:,5) =
    17    18    19    20
    37    38    39    40
    57    58    59    60
%运算D=shiftdim(A,1)实现以下操作:D(j,k,i)=A(i,j,k),i, j, k分别是指各维的下标。对于三维数组,%D=shiftdim(A,3)的操作就等同于简单的D=A。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

第3节 数据类型

1、逻辑型

image-20210810142940352

运算优先级

image-20210810145520627

>> a=[1 2 3; 4 5 6] % 创建测试矩阵
a =
     1     2     3
     4     5     6
>> B=a>5 % 返回逻辑下标
B =
  2×3 logical 数组
   0   0   0
   0   0   1

>> aa = true
aa =
  logical
   1
>> bb = false
bb =
  logical
   0 
>> c=true(size(a))
c =
  2×3 logical 数组
   1   1   1
   1   1   1
>> false([size(a),2])
  2×3×2 logical 数组
ans(:,:,1) =
   0   0   0
   0   0   0
ans(:,:,2) =
   0   0   0
   0   0   0   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
>> a=[1 2 3;4 5 6]
a =
     1     2     3
     4     5     6
>> b=[1 0 0;0 -2 1]
b =
     1     0     0
     0    -2     1
>> A=a&b % 逻辑“与”
A =
  2×3 logical 数组
   1   0   0
   0   1   1
>> B=a|b % 逻辑“或”
B =
  2×3 logical 数组
   1   1   1
   1   1   1
>> C=~b % 逻辑“非”
C =
  2×3 logical 数组
   0   1   1
   1   0   0   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
>> a=[1 1 0; 1 0 0;1 0 1]
a =
     1     1     0
     1     0     0
     1     0     1
>> A=all(a) % 每列元素均为非零时返回真
A =
  1×3 logical 数组
   1   0   0
>> D=all(a,2) % 每行元素均为非零时返回真
D =
  3×1 logical 数组
   0
   0
   0
   
>> B=any(a) % 每列元素存在非零时返回真
B =
  1×3 logical 数组
   1   1   1
>> C=any(a,2) % 每行元素存在非零时返回真
C =
  3×1 logical 数组
   1
   1
   1   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
>> a=[0 -1 2]
a =
     0    -1     2
>> b=[-3 1 2]
b =
    -3     1     2
>> a<b % 对应元素比较大小
ans =
  1×3 logical 数组
   0   1   0
>> a>b % 对应元素比较大小
ans =
  1×3 logical 数组
   1   0   0
>> a<=b % 对应元素比较大小
ans =
  1×3 logical 数组
   0   1   1
>> a>=b % 对应元素比较大小
ans =
  1×3 logical 数组
   1   0   1
>> a==b % 对应元素比较相等
ans =
  1×3 logical 数组
   0   0   1
>> a~=b % 对应元素比较不相等
ans =
  1×3 logical 数组
   1   1   0    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2、字符串

image-20210810150048143

>> a='matlab'
a =
    'matlab'
>> size(a)
ans =
     1     6
>> A='中文字符串输入演示'
A =
    '中文字符串输入演示'
>> A(3:5)
ans =
    '字符串'

>> S=['This string array '
'has multiple rows.']
S =
  2×18 char 数组
    'This string array '
    'has multiple rows.'
>> a=char('这','字符','串数组','','由5 行组成')
% 以字符最多的一行为准,而将其他行中的字符以空格补齐
a =
  5×6 char 数组
    '这     '
    '字符    '
    '串数组   '
    '      '
    '由5 行组成'
>> size(a)
ans =
     5     6     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
>> str1 = 'hello';
str2 = 'help';
>> C = strcmp(str1,str2)
C =
  logical
   0
>> C = strncmp(str1, str2, 2) % 比较前两个字符
C =
  logical
   1
>> str3 = 'Hello';
>> D = strncmp(str1, str3,2) % 对大小写敏感
D =
  logical
   0
>> F = strncmpi(str1, str3,2) % 对大小写不敏感
F =
  logical
   1

>> A = 'fate';
B = 'cake';
A == B %使用(==)运算符来判断两个字符串中有哪些字符相等
ans =
  1×4 logical 数组
   0   1   0   1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
>> a=1
a =
     1
>> b=num2str(a)
b =
    '1'
>> c=str2num(b)
c =
     1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
3、结构数组

image-20210810154816403

>> employee.name='henry';
employee.sex='male';
employee.age=25;
employee.number=12345;
employee
employee = 
  包含以下字段的 struct:

      name: 'henry'
       sex: 'male'
       age: 25
    number: 12345

>> employee(2).name='lee';
employee(2).sex='female';
employee(2).age=23;
employee(2).number=98765;
employee(2)
ans = 
  包含以下字段的 struct:

      name: 'lee'
       sex: 'female'
       age: 23
    number: 98765

>> employee % 查看employee结构数组
employee = 
  包含以下字段的 1×2 struct 数组:
    name
    sex
    age
    number
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

子域

>> green_house.name='一号房'; 
green_house.volume='2000 立方米'; 
green_house.parameter.temperature=...
[31.2 30.4 31.6 28.7;29.7 31.1 30.9 29.6]; %子域温度
green_house.parameter.humidity=...
[62.1 59.5 57.7 61.5;62.0 61.9 59.2 57.5]; %子域湿度
>> green_house.parameter % 显示域的内容
ans = 
  包含以下字段的 struct:

    temperature: [2×4 double]
       humidity: [2×4 double]
>> green_house.parameter.temperature % 显示子域中的内容
ans =
   31.2000   30.4000   31.6000   28.7000
   29.7000   31.1000   30.9000   29.6000        
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

image-20210810171748523

image-20210810171811715

>> USPres.name = 'Franklin D. Roosevelt'; 
USPres.vp(1) = {'John Garner'};
USPres.vp(2) = {'Henry Wallace'}; 
USPres.vp(3) = {'Harry S Truman'};
USPres.term = [1933, 1945]; 
USPres.party = 'Democratic'; % 创建包括4个域名的结构数组
presFields = fieldnames(USPres) % 使用fieldnames函数获取现有域名
presFields =
  4×1 cell 数组
    {'name' }
    {'vp'   }
    {'term' }
    {'party'}
>> orderfields(USPres) % 使用orderfields函数对域名按照字母顺序进行排序
ans = 
  包含以下字段的 struct:

     name: 'Franklin D. Roosevelt'
    party: 'Democratic'
     term: [1933 1945]
       vp: {'John Garner'  'Henry Wallace'  'Harry S Truman'}
>> mystr1 = getfield(USPres, 'name') % 获取结构的域内容
mystr1 =
    'Franklin D. Roosevelt'
>> mystr2= setfield(USPres, 'name', 'ted') % 设置结构的域内容
mystr2 = 
  包含以下字段的 struct:

     name: 'ted'
       vp: {'John Garner'  'Henry Wallace'  'Harry S Truman'}
     term: [1933 1945]
    party: 'Democratic'    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
>> USPres.name = 'Franklin D. Roosevelt'; 
USPres.vp(1) = {'John Garner'};
USPres.vp(2) = {'Henry Wallace'}; 
USPres.vp(3) = {'Harry S Truman'};
USPres.term = [1933, 1945]; 
USPres.party = 'Democratic'; % 创建包括4个域名的结构数组
>> USPres(3,2).name='Richard P. Jackson' % 结构数组的扩展
USPres = 
  包含以下字段的 3×2 struct 数组:
    name
    vp
    term
    party
>> USPres(2,:)=[] % 通过对结构数组赋值为空矩阵来实现删除
USPres = 
  包含以下字段的 2×2 struct 数组:
    name
    vp
    term
    party    
% emmm,具体点开那个变量就懂了
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
4、元胞数组

元胞数组有下标,做循环更方便

结构数组有域名,编程更为方便

image-20210810155646649

(1)创建元胞数组

使用{}

>> A = {[1 4 3; 0 5 8; 7 2 9], 'Anne Smith'; 3+7i, -pi:pi/4:pi}
A =
  2×2 cell 数组
    {3×3 double        }    {'Anne Smith'}
    {[3.0000 + 7.0000i]}    {1×9 double  }

>> header = {'Name', 'Age', 'Pulse/Temp/BP'} % 元胞数组的创建
header =
  1×3 cell 数组
    {'Name'}    {'Age'}    {'Pulse/Temp/BP'}

>> records(1,:) = {'Kelly', 49, {58, 98.3, [103, 72]}} % 嵌套元胞数组的创建
records =
  1×3 cell 数组
    {'Kelly'}    {[49]}    {1×3 cell}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
(2)依次创建元胞数组
A(1,1) = {[1 4 3; 0 5 8; 7 2 9]};
A(1,2) = {'Anne Smith'};
A(2,1) = {3+7i};
A(2,2) = {-pi:pi/4:pi};
A(3,3) = {5}
A =
  3×3 cell 数组
    {3×3 double        }    {'Anne Smith'}    {0×0 double}
    {[3.0000 + 7.0000i]}    {1×9 double  }    {0×0 double}
    {0×0 double        }    {0×0 double  }    {[       5]}
>> str=A{1,2} % 返回字符型数组str,a{1,2}表示对应元胞的内容
str =
    'Anne Smith'
>> class(str) % 查看变量str的数据类型,结果确为字符型
ans =
    'char'
>> str2=A(1,2) % a(1,2)表示元胞数组中的一个元胞
str2 =
  1×1 cell 数组
    {'Anne Smith'}
>> class(str2) % 查看变量str2的数据类型,结果为元胞数组
ans =
    'cell'
>> [nrows, ncols] = cellfun(@size, A) % 将size函数应用于每一个元胞元素
nrows =
     3     1     0
     1     1     0
     0     0     1
ncols =
     3    10     0
     1     9     0
     0     0     1
>> cellplot(A) % 以图片表示元胞数组的基本结构     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

image-20210810161106326

5、日期时间
>> t = datetime(2017,8,28,6:7,0,0)
t = 
  1×2 datetime 数组
   2017-08-28 06:00:00   2017-08-28 07:00:00
>> t.Day
ans =
    28    28
>> t.Day = 27:28
t = 
  1×2 datetime 数组
   2017-08-27 06:00:00   2017-08-28 07:00:00
>> t.Format
ans =
    'uuuu-MM-dd HH:mm:ss'
>> t.Format = 'MMMdd日, yyyy年'
t = 
  1×2 datetime 数组
   8月27日, 2017年   8月28日, 2017年
   
>> t2 = datetime(2017,7,29,6,30,45)
t2 = 
  datetime
   2017-07-29 06:30:45   
>> d = t - t2
d = 
  1×2 duration 数组
   695:29:15   720:29:15  % 时分秒
>> d.Format = 'h'
d = 
  1×2 duration 数组
   695.49小时   720.49小时
>> d.Format = 'd'
d = 
  1×2 duration 数组
   28.979天    30.02天   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
6、表格数组
>> T = readtable('patients.dat')  % 读取表格数据,matlab自带的一个数据文件
>> T(1:5,1:5)
ans =
  5×5 table
     LastName      Gender     Age             Location              Height
    __________    ________    ___    ___________________________    ______
    'Smith'       'Male'      38     'County General Hospital'        71  
    'Johnson'     'Male'      43     'VA Hospital'                    69  
    'Williams'    'Female'    38     'St. Mary's Medical Center'      64  
    'Jones'       'Female'    40     'VA Hospital'                    67  
    'Brown'       'Female'    49     'County General Hospital'        64  
>> T.Age    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

创建表格数组

>> LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
%这里如果创建结构数组,就会报错:要串联的数组的维度不一致。 
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
T = table(LastName,Age,Height,Weight,BloodPressure)
T =
  5×5 table
     LastName     Age    Height    Weight    BloodPressure
    __________    ___    ______    ______    _____________
    'Smith'       38       71       176       124     93  
    'Johnson'     43       69       163       109     77  
    'Williams'    38       64       131       125     83  
    'Jones'       40       67       133       117     75  
    'Brown'       49       64       119       122     80
>> T.Properties.VariableNames
ans =
  1×5 cell 数组
    {'LastName'}    {'Age'}    {'Height'}    {'Weight'}    {'BloodPressure'}
% properties 类属性名称 
% VariableNames 列名称
% RowNames 行名称
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

表可以像普通数值矩阵那样通过小括号加下标来进行寻访。

除了数值和逻辑型下标之外,用户还可以使用变量名和行名来作为下标。例如本例中可以使用LastName作为行名,然后将这一列数据删除。

>> T.LastName
ans =
  5×1 cell 数组
    {'Smith'   }
    {'Johnson' }
    {'Williams'}
    {'Jones'   }
    {'Brown'   }
>> T.LastName = [];
>> size(T) % 查看当前表T的尺寸
ans =
     5     4
>> T(1:5,3:4)
ans =
  5×2 table
    Weight    BloodPressure
    ______    _____________
     176       124     93  
     163       109     77  
     131       125     83  
     133       117     75  
     119       122     80      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

基于已有变量(身高和体重)用户可以创建新的变量BMI,也就是体重指数。然后还可以添加变量的单位和描述等属性

>> T.BMI = (T.Weight*0.453592)./(T.Height*0.0254).^2;
>> T
T =
  5×5 table
    Age    Height    Weight    BloodPressure     BMI  
    ___    ______    ______    _____________    ______
    38       71       176       124     93      24.547
    43       69       163       109     77      24.071
    38       64       131       125     83      22.486
    40       67       133       117     75      20.831
    49       64       119       122     80      20.426
%通过修改表属性 VariableUnits 来为表中的每个变量指定单位    
>> T.Properties.VariableUnits{'BMI'} = 'kg/m^2';
%创建索引
T.Properties.VariableDescriptions{'BMI'} = 'Body Mass Index';
%对数据做了备注,但是是不显示的
>> T
T =
  5×5 table
    Age    Height    Weight    BloodPressure     BMI  
    ___    ______    ______    _____________    ______
    38       71       176       124     93      24.547
    43       69       163       109     77      24.071
    38       64       131       125     83      22.486
    40       67       133       117     75      20.831
    49       64       119       122     80      20.426 
>> size(T) % 查看当前表的尺寸
ans =
     5     5    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

第二章 MATALB数据可视化及图像句柄

第1节 基础绘图

1、概述
(1)绘图类型

Help ——> Types of MATLAB Plots /MATLAB绘图类型

(2)绘图步骤

image-20210810174136243

(3)一般调用格式
Handle=FuntionName(data,’name’,’value’)
比如:h =plot(X,Y,name,value) 
  • 1
  • 2
(4)图形初步了解
1)二维曲线图
>> t=(0:pi/50:2*pi)';
k=0.4:0.1:1;
Y=cos(t)*k;
plot(t,Y)    %  绘制二维曲线图
  • 1
  • 2
  • 3
  • 4

image-20210810175042942

2)李萨如图形
>> t=linspace(0,2*pi,80)';       %  在[0,2pi]之间产生80个等距的采样点
X=[cos(t),cos(2*t),cos(3*t)]+1i*sin(t)*[1, 1, 1]; %(80×3)的复数矩阵
plot(X)
  • 1
  • 2
  • 3

image-20210811105208786

>> axis square                  %  使坐标轴长度相同
>> h1=legend('1','2','3')            %  图例

h1 = 

  Legend (1, 2, 3) - 属性:

         String: {'1'  '2'  '3'}
       Location: 'northeast'
    Orientation: 'vertical'
       FontSize: 9
       Position: [0.7015 0.7746 0.1036 0.1262]
          Units: 'normalized'

  显示 所有属性

>> h1.Location='southoutside'             %将图例位置移到下面外面

h1 = 

  Legend (1, 2, 3) - 属性:

         String: {'1'  '2'  '3'}
       Location: 'southoutside'
    Orientation: 'vertical'
       FontSize: 9
       Position: [0.4661 0.0881 0.1036 0.1262]
          Units: 'normalized'

  显示 所有属性

>> h1.Orientation='horizontal'           %三个图例显示为水平方向的

h1 = 

  Legend (1, 2, 3) - 属性:

         String: {'1'  '2'  '3'}
       Location: 'southoutside'
    Orientation: 'horizontal'
       FontSize: 9
       Position: [0.3679 0.0952 0.3000 0.0476]
          Units: 'normalized'

  显示 所有属性
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

image-20210811105830861

% legend函数还有如下用法,其他用法请查阅帮助文档
% legend('Location','southwest')
% legend('boxoff')
  • 1
  • 2
  • 3
3)绘制椭圆

采用模型image-20210811110251825画一组椭圆

>> clear
>> th = [0:pi/50:2*pi]';
a = [0.5:.5:4.5];
X = cos(th)*a;
Y = sin(th)*sqrt(25-a.^2);
plot(X,Y),axis('equal'),xlabel('x'), ylabel('y')
>> title('A set of Ellipses')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

image-20210811111148760

2、点型线型

image-20210811112018666

image-20210811112242296

>> clear
t = 0:pi/20:2*pi;
>> plot(t,sin(t),'-.r*')
>> hold on  %将几条曲线绘制到同一个图上,否则会覆盖之前的曲线
>> plot(t,sin(t-pi/2),'--mo')
>> plot(t,sin(t-pi),':bs')
>> hold off
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

image-20210811131013822

属性设置

>> figure                                        		%  生成新的绘图窗口
>> plot(t,sin(2*t),'-mo',...
    'LineWidth',2,...           			%  设置曲线粗细
    'MarkerEdgeColor','k',...   		%  设置数据点边界颜色
    'MarkerFaceColor',[.49 1 .63],...  	%  设置填充颜色,三原色的位置,0可以不打的
    'MarkerSize',12)                   	%  设置数据点型大小
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

image-20210811131313344

3、坐标轴设置
(1)常用的坐标控制命令

image-20210811130338274

>> x = 0:.025:pi/2;
plot(x,tan(x),'-ro')
  • 1
  • 2

image-20210811135741728

>> axis([0  pi/2  0  5])
  • 1

image-20210811140613950

(2)轴控制指令

采用多子图表现时,图形形状不仅受“控制指令”的影响,而且受整个图面“宽高比”及“子图数目”的影响。

>> clear
>> t=0:2*pi/99:2*pi;
x=1.15*cos(t);y=3.25*sin(t);        %  y为长轴,x为短轴
>> subplot(2,3,1),plot(x,y),axis normal,grid on,   %grid on 设置网格线
title('Normal and Grid on')
>> subplot(2,3,2),plot(x,y),axis equal,grid on,title('Equal')  %坐标轴长度相等
>> subplot(2,3,3),plot(x,y),axis square,grid on,title('Square')  %绘图外面的框是正方形
>> subplot(2,3,4),plot(x,y),axis image,box off,title('Image and Box off')
>> subplot(2,3,5),plot(x,y),axis image fill,box off
title('Image and Fill')
>> subplot(2,3,6),plot(x,y),axis tight,box off,title('Tight')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

image-20210811141547682

(3)坐标轴标签设置
>> x = linspace(0,10);  % 0到10之间均匀取数
y = x.^2;
plot(x,y)
  • 1
  • 2
  • 3

image-20210811142726205

>> xticks([0 5 10])
  • 1

image-20210811142845758

>> xticklabels({'x = 0','x = 5','x = 10'})
>> xticklabels({'0天','5天','10天'})
>> grid on%画分网格线
  • 1
  • 2
  • 3

image-20210811143225397

>> clear
>> figure
>> t = 0:pi/20:2*pi;
plot(t,sin(t),'-.r*')
>> hold on
>> plot(t,sin(t-pi/2),'--mo')
>> plot(t,sin(t-pi),':bs')
>> hold off
>> set(gca,'Xtick',[pi/2,pi,pi*3/2,2*pi],'Ytick', [-1,-0.5,0,0.5,1])
% gca:当前图形的句柄
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

image-20210811143615343

>> set(gca,'XTickLabel',{'$$\frac{\pi}{2}$$','$$\pi$$','$$\frac{3\pi}{2}$$','$$2\pi$$'},'YTickLabel', {'-1','-0.5','0','0.5','1'},'TickLabelInterpreter','latex')
% TickLabelInterpreter 解析
  • 1
  • 2

image-20210811143707213

(4)图形标识
>> clf
>> clear
>> t=0:pi/50:2*pi;
y=sin(t);plot(t,y);
axis([0,2*pi,-1.2,1.2])
>> text(pi/2,1.02,'\fontsize{16}\leftarrow\fontname {隶书}在\pi/2\fontname{隶书}处\itsin(t)\fontname{隶书}极大值')
% fontsize 字号
% leftarrow 左箭头
% fontname 字体
% it指的是斜体
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

image-20210811145416848

(5)双坐标轴
>> x = 0:0.01:20;                                        %  x坐标
y1 = 200*exp(-0.05*x).*sin(x);                  %  Y1
y2 = 0.8*exp(-0.5*x).*sin(10*x);                %  Y2
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');            %  绘制双坐标轴图形
set(get(AX(1),'Ylabel'),'String','Slow Decay')    %  纵轴标签1
set(get(AX(2),'Ylabel'),'String','Fast Decay')   %  纵轴标签2
xlabel('Time (\musec)')                            %  x标签
title('Multiple Decay Rates')                        %  图形标题
set(H1,'LineStyle','--')                           %  线形1
set(H2,'LineStyle',':')                            %  线形2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

image-20210811150422628

R2016a之后新版方式

>> figure
yyaxis left
plot(x,y1,'--')
xlabel('Time (\musec)')                            %  x标签
ylabel('Slow Decay')

yyaxis right
plot(x,y2,':')
ylabel('Slow Decay')
title('Multiple Decay Rates')                        %  图形标题
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

包括之后叠加新的曲线,只需要用上hold on命令就行,这种形式更方便

4、子图绘制
>> clf;clear
t=(pi*(0:1000)/1000)';
y1=sin(t);y2=sin(10*t);
y12=sin(t).*sin(10*t);
subplot(2,2,1)
plot(t,y1);
axis([0,pi,-1,1])
subplot(2,2,2)   %注意:绘图的时候是按照行来排列1234的
plot(t,y2)
axis([0,pi,-1,1])
subplot(2,2,[3 4])
plot(t,y12,'b-',t,[y1,-y1],'r:')
axis([0,pi,-1,1])
% subplot('position',[0.2,0.05,0.6,0.45])    
% 整个窗口左下角是(0,0),绘图的图片起点是(0.2,0.05)的位置
% 0.6表示的是宽度(即横轴长度),0.45表示的是长度(即纵轴长度)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

image-20210811151432367

image-20210811151852261

5、二维图形
(1)双轴对数图形
>>  x = logspace(-1,2);       %  生成50个等对数间距的坐标
loglog(x,exp(x),'-s')
grid on
  • 1
  • 2
  • 3

image-20210811160156475

(2)条形图
>> Y = round(rand(5,3)*10);	%随机产生一个5×3矩阵,每个元素为1-10之间的整数
subplot(2,2,1)       		%设定绘图区域,在图形对象的左上角绘制
bar(Y,'group')       		%绘制纵向条形图
title 'Group'        		%添加标题Group
subplot(2,2,2)       		%在图形对象的右上角绘制
bar(Y,'stack')
title 'Stack'
subplot(2,2,3)       		%在图形对象的左下角绘制
barh(Y,'stack')      		%绘制横向条形图
title 'Stack'
subplot(2,2,4)       		%在图形对象的右下角绘制
bar(Y,7.5)
title 'Width = 7.5'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

image-20210811160731083

(3)区域图
>> figure    %先画1312,然后画5256,向上叠加
Y = [1, 5, 3;
     3, 2, 7;
     1, 5, 3;
     2, 6, 1];
area(Y)
grid on
set(gca,'Layer','top') % 将图纸的背景放到所画的图像的顶层
title 'Stacked Area Plot'      	%  图名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

image-20210811161245479

(4)饼形图
1)单个饼形图
>> X = [1 3 0.5 2.5 2];
pie(X)
  • 1
  • 2

image-20210811163524028

>> explode = [0 1 0 1 0];
pie(X,explode)
  • 1
  • 2

image-20210811163658156

>> figure
X = 1:3;
labels = {'Taxes','Expenses','Profit'};
pie(X,labels)
  • 1
  • 2
  • 3
  • 4

image-20210811163837074

2)两个饼形图
>> X = [0.2 0.4 0.4];
labels = {'Taxes','Expenses','Profit'};
ax1 = subplot(1,2,1);
pie(ax1,X,labels)
title(ax1,'2012');

Y = [0.24 0.46 0.3];
ax2 = subplot(1,2,2);
pie(ax2,Y,labels)
title(ax2,'2013');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

image-20210811164301347

(5)直方图
>> figure
x = -4:0.1:4;
y = randn(10000,1);  %生成一组符合正态分布的数
histogram(y,x)   %绘制直方图
  • 1
  • 2
  • 3
  • 4

image-20210811164636788

(6)stem杆图
>> figure
t = linspace(-2*pi,2*pi,10);         %  创建10个位于-2*pi到2*pi之间的等间隔的数
h = stem(t,cos(t),'fill','--');       %  以'--'绘制离散数据图,fill表示给蓝色圆圈填充上颜色
set(get(h,'BaseLine'),'LineStyle',':')  % 改变基准线的线型
set(h,'MarkerFaceColor','red')          % 填充的内容为红色
  • 1
  • 2
  • 3
  • 4
  • 5

image-20210811170656233

(7)阶跃图形
 x = linspace(-2*pi,2*pi,40); %  创建40个位于-2*pi到2*pi之间的等间隔的数
stairs(x,sin(x))                %  绘制正弦曲线的二维阶跃图形
  • 1
  • 2

image-20210811170834208

(8)误差图
>> % 误差相同情况
x = 1:10:100;
y = [20 30 45 40 60 65 80 75 95 90];
err = 8*ones(size(y));
errorbar(x,y,err)
  • 1
  • 2
  • 3
  • 4
  • 5

image-20210811171138807

>> % 误差变化情况
x = 1:10:100;
y = [20 30 45 40 60 65 80 75 95 90]; 
err = [5 8 2 9 3 3 8 3 9 3];
errorbar(x,y,err)
  • 1
  • 2
  • 3
  • 4
  • 5

image-20210811171243924

>> % 水平方向误差
x = 1:10:100;
y = [20 30 45 40 60 65 80 75 95 90];
err = [1 3 5 3 5 3 6 4 3 3];
errorbar(x,y,err,'horizontal')
  • 1
  • 2
  • 3
  • 4
  • 5

image-20210811171327933

>> % 双方向误差
x = 1:10:100;
y = [20 30 45 40 60 65 80 75 95 90];
err = [4 3 5 3 5 3 6 4 3 3];
errorbar(x,y,err,'both')
  • 1
  • 2
  • 3
  • 4
  • 5

image-20210811171531397

>> % 双方向误差,没有线情况
x = 1:10:100;
y = [20 30 45 40 60 65 80 75 95 90];
err = [4 3 5 3 5 3 6 4 3 3];
errorbar(x,y,err,'both','o')
  • 1
  • 2
  • 3
  • 4
  • 5

image-20210811171709330

(9)极坐标图
>> theta = 0:0.01:2*pi;  %角度
rho = sin(2*theta).*cos(2*theta);
polarplot(theta,rho)
  • 1
  • 2
  • 3

image-20210811171909505

6、三维图形
(1)三维曲线图
>> t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
grid on
axis square
  • 1
  • 2
  • 3
  • 4

image-20210811173629432

(2)绘制函数image-20210811173904366的网格图
>> x=-4:.2:4;y=x;   % x:1*41  y:1*41
[X,Y]=meshgrid(x,y);  % X:41*41重复41行  Y:41*41 重复41列,将一维数据生成网格数据
Z=X.^2+Y.^2;   %点乘,计算的是相对应的元素之间的计算 
mesh(X,Y,Z)  %绘制网格图
  • 1
  • 2
  • 3
  • 4

image-20210811174053631

(3)绘制peaks函数的三维网格图及其在底面投影的等高线图
>> [X,Y] = meshgrid(-3:.125:3);
Z = peaks(X,Y);
meshc(X,Y,Z); % 绘制网格图的同时,在底面加上等高线图
axis([-3 3 -3 3 -10 10])
  • 1
  • 2
  • 3
  • 4

image-20210811174806277

(4)曲面图
>> [X,Y,Z] = peaks(30);
surfc(X,Y,Z)  %绘制曲面,加上等高线
colormap hsv  %设置颜色
axis([-3 3 -3 3 -10 10])
  • 1
  • 2
  • 3
  • 4

image-20210811175419042

(5)三维柱状图
>> X=rand(5,5)*10;  %  产生5×5矩阵,其中每个元素为1~10之间的随机数
subplot(221),bar3(X,'detached'),title('detached');
subplot(222),bar3(X,'grouped'),title('grouped');
subplot(223),bar3h(X,'stacked'),title('stacked');
subplot(224),bar3h(X,'detached'),title('detached');
  • 1
  • 2
  • 3
  • 4
  • 5

image-20210811180319358

三维柱状图可能看起来更好看,但是会挡住后面数据的展示

(6)三维球体图
>> figure
subplot(2,2,1)
sphere(8)            %  括号中的数字指生成球体的面数,这里是指8×8
axis equal
subplot(2,2,2)
sphere(16)
axis equal
subplot(2,2,3)
sphere(24)
axis equal
subplot(2,2,4)
sphere(32)
axis equal
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

image-20210811181117340

(7)三维饼形图
>> figure
x = 1:3;
labels = {'Taxes','Expenses','Profit'};
    
explode=[0 1 0 ]   %  突出显示向量x的第二个元素
pie3(x,explode,labels)

explode =

     0     1     0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

image-20210811181307014

(8)三维等高线图
>> [X,Y] = meshgrid([-2:.25:2]);   	%  生成维数相同的两个矩阵X,Y
Z = X.*exp(-X.^2-Y.^2);
contour3(X,Y,Z,40)           		%  绘制Z的等高线,40为等高线的数目
surface(X,Y,Z,'EdgeColor',[.8 .8 .8],'FaceColor','none')	%  绘制表面图
grid off                     								%  去掉网格线
view(-15,25)                								%  设定视角
colormap cool               								%  建立颜色图
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

image-20210811181510276

(9)三维切片图

绘制x,y,z在 [-2,2]范围内的image-20210811181826833函数的分布(此时有四个维度,切出一个面来展示)

>> figure
[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2);
v = x.*exp(-x.^2-y.^2-z.^2);
xslice = [-1.2,.8,2]; 
yslice = 2; 
zslice = [-2,0];
slice(x,y,z,v,xslice,yslice,zslice)
colormap hsv
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

image-20210811181959726

(10)三维直方图
>> figure
x = randn(10000,1);
y = randn(10000,1);
h = histogram2(x,y)

h = 

  Histogram2 - 属性:

             Data: [10000×2 double]
           Values: [28×26 double]
          NumBins: [28 26]
        XBinEdges: [1×29 double]
        YBinEdges: [1×27 double]
         BinWidth: [0.3000 0.3000]
    Normalization: 'count'
        FaceColor: 'auto'
        EdgeColor: [0.1500 0.1500 0.1500]

  显示 所有属性
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

image-20210811182435700

(11)视点控制
>> [X,Y,Z] = peaks(30);  
subplot(121),surf(X,Y,Z)
view(3)                         %  默认的三维视角
subplot(122),surfc(X,Y,Z)
view(30,60) % 和x轴夹角为30度,和y轴夹角为60度
  • 1
  • 2
  • 3
  • 4
  • 5

image-20210811182732678

(12)光照控制
>> figure
[X,Y,Z] = peaks(30);
surfc(X,Y,Z)
colormap hsv
axis([-3 3 -3 3 -10 10])
light('Position',[-20,20,5])      %  光照控制,数字指的是角度
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

image-20210811182913382

第2节 图形句柄(handle)

1、图形对象基本概念

Matlab的图形系统是面向对象的,图形对象之间的关系为父代与子代的关系。

MATLAB图形对象包括:

image-20210812101603019

每个图形对象都拥有自己的句柄 ( handle )。所有能创建图形对象的matlab函数都可给出所创建图形对象的句柄。
Root 是关联计算机屏幕的一个图形对象。Matlab系统只有一个Root对象,它没有父对象,子对象是Figure。当启动Matlab时,Root对象就创建,用户无法再创建一个Root,也无法删除这个对象。

图形对象举例:

>> plot(rand(5))   %生成五条任意的折线
>> ax = gca  %返回当前轴对象的句柄

ax = 

  Axes - 属性:

             XLim: [1 5]           % x轴范围
             YLim: [0 1]
           XScale: 'linear'        %线型
           YScale: 'linear'
    GridLineStyle: '-'
         Position: [0.1300 0.1100 0.7750 0.8150]      %(0,0)位置,宽度以及高度
            Units: 'normalized'       % 单位:归一化
            
>> ax.Children   %查看子对象

ans = 

  5×1 Line 数组:

  Line
  Line
  Line
  Line
  Line
  
>> ax.Parent   %查看父对象

ans = 

  Figure (1) - 属性:

      Number: 1
        Name: ''
       Color: [0.9400 0.9400 0.9400]
    Position: [403 246 560 420]
       Units: 'pixels'    %单位:像素
       
>> af=gcf  %返回当前窗口对象的句柄

af = 

  Figure (1) - 属性:

      Number: 1
        Name: ''
       Color: [0.9400 0.9400 0.9400]
    Position: [403 246 560 420]
       Units: 'pixels'    
       
>> af.Parent  % 即根对象:显示器的屏幕

ans = 

  Graphics Root - 属性:

          CurrentFigure: [1×1 Figure]
    ScreenPixelsPerInch: 96
             ScreenSize: [1 1 1366 768]
       MonitorPositions: [1 1 1366 768]
                  Units: 'pixels'       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

还可以指定父对象,比如上面图中可以将画的线组成一个群组对象

>> close all
>> clear
>> figure
>> hg = hggroup;  
>> plot(rand(5),'Parent',hg)
>> ax = gca

ax = 

  Axes - 属性:

             XLim: [1 5]
             YLim: [0 1]
           XScale: 'linear'
           YScale: 'linear'
    GridLineStyle: '-'
         Position: [0.1300 0.1100 0.7750 0.8150]
            Units: 'normalized'

  显示 所有属性

>> ax.Children

ans = 

  Group - 属性:

    Children: [5×1 Line]
     Visible: 'on'
     HitTest: 'on'

  显示 所有属性

>> ax.Children.Children

ans = 

  5×1 Line 数组:

  Line
  Line
  Line
  Line
  Line
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

MATLAB在用户调用绘图命令时总会创建一个轴和图形对象。在用户创建一个图形M文件的时候,尤其是别人在使用用户创建的程序时,最好使用命令来设置轴和图形对象。进行此设置可以解决如下两个问题。

(1)用户的M文件绘制的图形覆盖了当前图形窗口(用户单击图形窗口,该窗口就会变为当前窗口)。

(2)当前图形或许处于一种意外的状态,并没有像程序设置的那样显示。
专用函数

gcf 返回当前窗口对象的句柄 Get Current Figure
gca 返回当前轴对象的句柄 Get Current Axes
gco 返回当前图形对象的句柄 Get Current Object

句柄属性的设置与修改

get 获得句柄图形对象的属性和返回某些对象的句柄值
set 改变图形对象的属性
delete(h) 删除句柄为h的图形对象
直接通过属性赋值来修改
>> get(0)  %% 获取显示器属性
         CallbackObject: [0×0 GraphicsPlaceholder]
               Children: [1×1 Figure]
          CurrentFigure: [1×1 Figure]
     FixedWidthFontName: 'SimHei'
       HandleVisibility: 'on'
       MonitorPositions: [1 1 1366 768]
                 Parent: [0×0 GraphicsPlaceholder]
        PointerLocation: [390 57]
            ScreenDepth: 32
    ScreenPixelsPerInch: 96
             ScreenSize: [1 1 1366 768]
      ShowHiddenHandles: 'off'
                    Tag: ''
                   Type: 'root'
                  Units: 'pixels'
               UserData: []
               
>> set(gca,'YAxisLocation','right')  %将轴对象的Y轴改到右边


>> plot(rand(5))
ax = gca
>> ax.YAxisLocation='left'
>> ax.YAxisLocation='Right'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
2、图形窗口设置
(1)图像窗口(Figure)

Figure对象是Matlab系统中显示的图形窗口。用户可建立任意多个Figure窗口。所有Figure对象的父对象都是Root对象,而其他所有Matlab图形对象都是Figure的子对象。

  • figure( ) 创建图形窗口
  • close( ) 删除图形窗口
  • clf( ) 图形图形窗口中的子对象
  • gcf 返回当前窗口对象的句柄
(2)创建图形窗口 :figure
  • figure 利用缺省属性值来创建新的图形窗口对象。
  • figure(‘PropertyName’,propertyvalue,…) 利用指定的属性值来创建图形窗口对象。对于用户没有显式地定义的属性值,将其设置为默认的属性值。
  • figure(h) 如果句柄h所指示的图形窗口对象存在,则将其设置为当前窗口,并将其移动到屏幕的最前方。如果h所指示的图形窗口不存在且h是个整数 (h >= 1),则创建一个图形窗口,并将窗口的句柄设置为h;如果h不是整数,则返回错误信息。
  • h = figure(…) 返回图形窗口对象的句柄。

备注:为了在一个已有的图形窗口中绘制图形,这个窗口必须是激活的,或者是当前的图形窗口。

>> T=datetime(2018,1,1:10,0,0,0);
>> for n=1:10
figure('Name',datestr(T(n),'yyyy年mm月dd日'),'NumberTitle','off',...
    'Position',[200+n*30 250-n*20 560 420]);
%  注意,这里的位置是适用于双显示器且主显示器在左方情况,测试时需要相应修改
% datestr 将日期的变量转换为年月日的格式
% 'NumberTitle','off',将标题的编号关闭掉
plot(T(n)+hours(0:23),sin(1:24)*n)
ylim([-10,10])
end

>> hold on   %在当前点击的窗口上进行增加绘图
plot(T(n)+hours(0:23),cos(1:24)*n)

>> findobj  %查找对象函数

ans = 

  28×1 graphics 数组:

  Root
  Figure    (3: 2018年01月03日)
  Figure    (2: 2018年01月02日)
  Figure    (4: 2018年01月04日)
  Figure    (5: 2018年01月05日)
  Figure    (6: 2018年01月06日)
  Figure    (7: 2018年01月07日)
  Figure    (8: 2018年01月08日)
  Figure    (10: 2018年01月10日)
  Figure    (9: 2018年01月09日)
  Axes
  Axes
  Axes
  Axes
  Axes
  Axes
  Axes
  Axes
  Axes
  Line
  Line
  Line
  Line
  Line
  Line
  Line
  Line
  Line
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
(3)删除图形窗口:close
  • close 删除当前figure,相当于close(gcf)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/133098
推荐阅读
相关标签
  

闽ICP备14008679号