Matlab学习(台大郭彦甫)第4节-变数(变量)与档案存取
第4节 变数(变量)与档案存取
4.1 MATLAB Data (Variables) Types 数据类型
4.1.1 numeric (数值型)
一些常见的数值类型的转换函数:
4.1.2 char(字符型)
- A character is represented in ASCII using a numeric code between 0 to 255(字符通过ASCII用0到255之间的数字代码表示)
- Create a character or a string by putting them into a pair of apostrophe(将一个字符或字符串放入一对引号中)
示例:
clc
clear
s1 = 'h'
whos
uint16(s1)
运行结果:
注意:
1)这里whos指令用于列出工作区中的变量及大小和类型。
2)对于ASCII码,字母的大小写是不一样的。
示例:
clc;
clear;
s1 = 'H';
whos;
uint16(s1)
运行结果:
可以看到,H和h对应的ASCII的码有区别。
4.1.3 string (字符串)
- An array collects characters:(通过数组收集字符)
- String concatenation:(字符串的连接)
示例:
clear;
clc;
s1 = 'Example';
s2 = 'String';
s3 = [s1,s2];
s4 = [s1;s1];
fprintf('s1 = %s \n s2 = %s \n s3 = %s \n s4 = %s',s1,s2,s3,s4);
运行结果:
注意:
1)s = [s1;s2] 在使用时需要s1 和s2 的长度相等,结果是叠加;
2)fprintf()函数,可以将数据按指定格式写入到文本文件中。
4.1.4 Logical Operations and Assignments(逻辑操作和分配)
- Many numerical and logical operators can be applied to strings(许多数字和逻辑运算符可以应用于字符串)
示例代码:
str = 'aardvark';
'a' == str
结果:(查找str字符串中,若等于‘a’则为1,否则为0)
- try this
str = 'aardvark';
str(str == 'a') = 'z'
结果:(将str字符串中为‘a’的替换成字母‘z’)
- What if we want to compare the entries string with another?(如果我们想将整个字符串与另一个字符串进行比较呢)
使用:tf=strcmp(s1,s2)
tf=strcmp(s1,s2)比较s1和s2,如果两者相同,则返回1(true),否则返回0(false)。
习题:
将字符串s1颠倒地赋值给s2
代码:
clear;
clc;
s1='I like the letter E';
for i=1:19
s2(i)=s1(20-i);
end
disp(s2);
运行结果:
注意:这里的191是提前数好的,s1里面有19个字符。
4.1.5 Structure(结构体)
(1)A method of storing heterogeneous data(一种存储异构数据的方法)
(2)Structures contain arrays called fields(结构包含称为字段的数组)
(3)Student assignment grade:(例如学生作业成绩)
示例:
clear;
clc;
student.name = 'John Doe';
student.id = 'jdo2@sfu.ca';
student.number = 301073268;
student.grade = [100, 75, 73;95, 91, 85.5;100, 98, 72];
disp(student);
disp(student.grade);
运行结果:
(4)Adding Information to A Structure(向结构体中添加信息)
示例:
student(2).name = 'Ann Lane';
student(2).id = 'aln4@sfu.ca';
student(2).number = 301078853;
student(2).grade = [95 100 90; 95 82 97; 100 85 100];
disp(student);
disp(student(1));
disp(student(2));
运行结果:
(5)习题:检索Ann Lane的grade,如90分
代码:
disp(student(2).grade(1,3));
或者
disp(student(2).grade(7));
运行结果:
(6)Structure Functions(结构体函数)
-
cell2struct()函数
Convert cell array to structure array(将单元格数组转换为结构数组) -
fieldnames()函数
Field names of structure,or public fields of object(结构的字段名,或对象的公共字段) -
getfield()函数
Field of structure array(结构数组的字段) -
isfield()函数
Determine whether input is structure array field(确定输入是否为结构数组字段) -
isstruct()函数
Determine whether input is structure array(确定输入是否为结构数组) -
orderfields()函数
Order fields of structure array(结构数组的规则) -
rmfield()函数
-
Remove fields from structure(从结构中删除字段)
-
setfield()函数
Assign values to structure array field(为结构数组字段赋值) -
struct()函数
Create structure array(创建结构数组) -
struct2cell()函数
Convert structure to cell array(将结构转换为单元数组) -
stuctfun()函数
Apply function to each field of scalar structure(将函数应用于标量结构的每个字段)
(7)Nesting Structures(嵌套结构)
示例:
clear;
clc;
A = struct('data', [3 4 7; 8 0 1], 'nest',struct('testnum', 'Test 1', 'xdata', [4 2 8],'ydata', [7 1 6]));
A(2).data = [9 3 2; 7 6 5];
A(2).nest.testnum = 'Test 2';
A(2).nest.xdata = [3 4 2];
A(2).nest.ydata = [5 0 9];
disp(A);
disp(A(1).nest);
disp(A(2).nest.xdata(2));
运行结果:
注意:struct()函数,其语法为:s = struct(field1,value1,…,fieldN,valueN)