0%

《Matlab从入门到精通》

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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
% 双精度(double):8字节;单精度(single):4字节
% 复数还可以使用函数来产生复数??complex;complex接收两个参数,前一个是实部,后一个是虚数;前一个参数可以为零,但是后面的参数不行
% inf和-inf来表示正无穷大和负无穷大;除法运算中除数为0或者运算结果溢出都会导致inf或者-inf的结果。
x=exp(1000000)
x=log(0)
% 上述两行代码的输出结果分别为:Inf,-Inf

% NaN用来表示一个既不是实数也不是复数的数值。NAN是Not A Number的缩写。类似0/0,inf/inf这样的表达式得到的结果均为NAN
inf/-inf
nan

% 逻辑类型
% 逻辑类型用1和0来表示。
% 函数logical()来得到逻辑类型的数值。它可以把任何非零的数值转换为逻辑true(1),反过来也可以
x = logical(-1)
% x = logical 1

% 字符和字符串
% Matlab中规定用char数据类型来表示一个字符串。一个char类型的1*n的数组则可以称为字符串String。Matlab中char类型都是以2字节的unicode字符来存储的
% 可以使用一对单引号来表示字符串:
str = "I love china!"
% 也可以使用char函数来构造字符串,下面的代码将得到字符串'AB'
str=char([65 66])

% 函数句柄
% 是用来提供间接调用函数的数据类型。函数句柄可以转递给其他函数以便该函数所代表的函数就可以被调用。函数句柄还可以储存起来,以便以后利用。
% 函数句柄可以用符号@后面跟着函数名来表示。下面的函数句柄使得自定义变量可以用来代替tan函数的功能
f=@tan
jieguo=f(pi/2)

% 结构体类型
% 结构体是根据属性名组织起来的不同类型数据的集合。
% 有一种容易与结构体类型混淆的数据类型是单元数组类型。它们之间既有相同点,也有不同点:“单元数组类型,它是一种特殊类型的MATLAB 7.0数组,
% 它的每一个元素叫做单元,而每一个单元包含MATLAB 7.0数组。结构体和单元数组的共同之处在于它们都提供了一种分级存储机制来存储不同类型的数据,
% 不同之处是组织数据的方式不一样。结构体数组里的数据是通过属性名来引用的,而在单元数组里,数据是通过单元数组下标引用来操作的。”
% 结构体数组是由数据容器组成的数组,这种数组容器称为结构体的属性。结构体的任何一个属性可以包含任何一种类型的数据。
% 和其他数据类型一样,结构体也是一个数组,一个单独的结构体就是一个1*1结构体数组。
% 可以构造任何维数和形状的结构体数组

% 结构体构造
% 1 利用赋值语句
Student(1).Name='xiaoming';
Student(1).Score=100;
Student(1).fees=[6500,10000];

% 在上面的基础上把结构体数组扩展成1*2的结构体

Student(2).Name='xiaolei';
Student(2).Score=100;
Student(2).fees=[6500,10000];
Student(1) %多维结构数组输出时要用括号加上标量
Student(2)

% 2 利用函数struct()来定义
% (1)单独使用struct函数
Student(3)=struct('Name','xiaohong','Score',99,'fees',[]);
Student(3)
% struct函数和repmat函数配合使用
% struct函数的输入为单元数组(后两种没有搞懂暂时)


% 访问结构体数组的数据
Personel=struct('Name',{'xiaolei','dalei','zhonglei'},'Score',{[100,8,100],[0,60,90],[100,50,100]});
New=Personel(1:2)% 生成新的结构体
News=New(1)% 访问新结构体的第一维数据
New(2).Name% 访问第一维数据的Name值
Personel(3).Score(2)% 访问第三个人的Score中的第三个值
Personel.Name % 用于访问结构体数组中所有元素的某个属性
% 使用矩阵合并符来合并上面输出的结果
Personel_hebing=[Personel.Name]% 'xiaoleidaleizhonglei'
% 也可以把它们合并在一个单元数组中
Personel={Personel.Name} % {'xiaolei'} {'dalei'} {'zhonglei'}


% 单元数组类型
% 1 单元数组的构造
% (1)左标志法
c{1,1}='nianchu';
c{1,2}=eye(3,3);
c{2,1}=@sec;
c{2,2}=false;
c{3,1}=true;
c

% 2.21
% (2)右标志法
% 右标志法和左标志法类似,只是将左边的标志符{}用括号代替,而在右边添加标志符即可
% 代码实现:
a(1,1)={"xiaochu"};
a(1,2)={eye(4,4)};
a(2,1)={@tan};
a(2,2)={[]};
% 或者下面这样:
b={"chuntian",[341,434];'dream','weiling'};
b

% 知识补充:eye()函数的用法——返回单位矩阵:当eye(m,n)中m和n参数不相等时,单位矩阵会出现全0行或列
% 1 返回N*N的单位矩阵
% 2 返回M*N的单位矩阵
% 3 返回和给定矩阵一样大小的单位矩阵
% 4 无参数时返回标量1
% 代码实现:
a1=eye(3)
a2=eye(2,3)
a3=eye([2,3])
a4=eye(size(b))
a4=eye()
% 补充:~eye(m,n)为eye(m,n)中1,0完全对换

% 显示单元数组的方法:
% 1 直接用数组的名字
% 2 使用函数celldisp()——使用此函数会隔行依次输出数组中的元素
% 法2代码实现
celldisp(a)
% 说明:celldisp函数的显示格式与直接输入单元组名的显示格式是不同的。celldisp函数更适用于具有大量数据的单元数组的显示

% 单元数组的读取
% 1 读取全面c数组中{1,1}处的字符串:
Str=c{1,1}
% 2 读取单元数组中若干个单元的数据,例如读取第二行的数据:
c(2,:)
% 读取单元数组的第一列
c(:,2)

% 单元数组的删除
% 将空矩阵赋给单元数组的某一行或者某一列是可以删除这一行或者这一列
% 删掉c单元数组中第二列的值
c(:,2)=[]

% 矩阵的基本操作
% Matlab是基于矩阵运算的一个软件,所有数据均以二维矩阵或高维数组的形式存储,Matlab又称为矩阵实验室

% 名词介绍:
% 标量:1*1的矩阵
% 向量: 1*n的矩阵
% 空矩阵: 至少有一堆的长度为0的矩阵称为空矩阵,用[]表示
Number=1.5;
whos Number



% 矩阵的构造
% 1 简单矩阵构造(略)
% 2 特殊矩阵构造:
% 举例:
% ones——产生矩阵元素全为1的矩阵
% zeros——产生矩阵元素全为0的矩阵
% eye——上面已经介绍过了
ones(2)
ones(2,3)
zeros(2)
zeros(2,3)
% diag 把向量转化为对角矩阵或者得到矩阵的对角元素
% magic 产生魔方矩阵,即每行、每列之和相等的矩阵
% rand 产生0-1均匀分布的随机数(此函数是以机器时间作为随机种子的,因而每次运行得到的结果都是不同的 )
% randn 产生均值为0,方差为1高斯分布的随机数
% randperm 产生整数1-n的随机排列
% compan 长生多项式的伴随矩阵
% Diga之对角矩阵和对角元素
% 形成对角矩阵
Strs='I will be a successful man'
Value=[9 9 9 2 7 2]
X=diag(Strs,-1)
X=diag(Value,0)
% 获得对角元素
Values=diag(X,0)
% 注意:当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。
% 如果k的值缺失,则默认为主对角