cuiguanjun 2020-05-07
MATLAB中有15种基本数据类型,其中常用的数据类型主要是整型、浮点型、逻辑类型、结构体、元胞数组及字符串等。
>> x = int8(12) x = int8 12 >> y = uint16(x) y = uint16 12 >> A = zeros(3, ‘uint8‘) % 生成全零矩阵 A = 3×3 uint8 矩阵 0 0 0 0 0 0 0 0 0 >> intmin(‘int8‘) % 确定整型数据类型的数据范围 ans = int8 -128 >> intmax(‘int8‘) ans = int8 127
>> a = single(32) % 单精度 a = single 32 >> b = double(10000) %双精度 b = 10000 >> z = 10 % 默认为双精度 z = 10 >> B = ones(3,‘single‘) % 三个单精度全1矩阵 B = 3×3 single 矩阵 1 1 1 1 1 1 1 1 1 >> realmin(‘double‘) % 浮点型数据的取值范围查询 ans = 2.2251e-308 >> realmax(‘double‘) ans = 1.7977e+308
% 1. if 语句的判断 >> a = 5; >> if a > 0 disp(‘大于0‘) else disp(‘小于0‘) end 大于0
% 2. 查找矩阵中符合一定条件的数据 >> a = magic(3) a = 8 1 6 3 5 7 4 9 2 >> a > 5 ans = 3×3 logical 数组 1 0 1 0 0 1 0 1 0
% 3. 逻辑运算 >> x = [1 2 3 -2 0 -1]; >> ~ x % x中元素为0 则返回"1",否则返回“0” ans = 1×6 logical 数组 0 0 0 0 1 0
% 1. 一维字符串的生成 % 1.1 直接赋值发 >> str = "ABCDE" str = "ABCDE" % 1.2 连接法 >> str1 = strcat(str,"FGH") str1 = "ABCDEFGH" >> str2 = [str1, "STR"] str2 = 1×2 string 数组 "ABCDEFGH" "STR" >> str3 = [str1,str2] str3 = 1×3 string 数组 "ABCDEFGH" "ABCDEFGH" "STR"
% 2. 二维字符串的生成 >> str1 = [‘abcd‘;‘efg‘] % 注意二维数组在创建时要保证每行列数相同,不然会报下面的错误 要串联的数组的维度不一致。 >> str1 = [‘abcd‘;‘efg ‘] % 空格填充 str1 = 2×4 char 数组 ‘abcd‘ ‘efg ‘ >> str2 = char(‘ABC‘,‘DE‘) % 通过char()创建二维字符串 str2 = 2×3 char 数组 ‘ABC‘ ‘DE ‘ >> str3 = strvcat(str1,str2) % 字符串的垂直连接 str3 = 4×4 char 数组 ‘abcd‘ ‘efg ‘ ‘ABC ‘ ‘DE ‘
% 1. 字符串的判断 >> str1 str1 = 2×4 char 数组 ‘abcd‘ ‘efg ‘ >> ischar(str1) % 判断是否为字符串 ans = logical 1 >> isletter(str1) % 判断每个字符是否为字母 ans = 2×4 logical 数组 1 1 1 1 1 1 1 0 >> isspace(str1) % 判断每个字符是否为空格 ans = 2×4 logical 数组 0 0 0 0 0 0 0 1
% 2. 字符串的访问 >> str1 = char(‘abc‘,‘d f‘,‘ lee3‘) str1 = 3×5 char 数组 ‘abc ‘ ‘d f ‘ ‘ lee3‘ >> str1(1,:) % 访问字符串中的第1行 ans = ‘abc ‘ >> str1(1,2) % 访问第1行第2个元素 ans = ‘b‘ >> str1([1,2]) % 索引访问第1,2行首个元素 ans = ‘ad‘ >> str1([1,2],[2,3]) % 访问第1行2、3个元素和第2行2、3个元素 ans = 2×2 char 数组 ‘bc‘ ‘ f‘
%3. 字符串的查找与替换 >> str1 = ‘Specify character data by placing characters inside a pair of single qutes‘; >> k = strfind(str1, ‘ar‘) % 查找指定字符串,返回其位置 k = 11 37 >> k = strfind(str1,‘are‘) % 不存在返回空列表 k = [] >> k = findstr(str1,‘are‘) k = [] >> k = findstr(str1,‘ar‘) k = 11 37 >> strrep(str1,‘ar‘,‘are‘) % 替换字符串中的字符 ans = ‘Specify chareacter data by placing chareacters inside a pair of single qutes‘ >> i = strmatch(‘min‘,strvcat(‘min‘,‘minimax‘,‘maximum‘)) % 字符串中匹配查找 i = 1 2 >> i = strmatch(‘min‘,strvcat(‘min‘,‘minimax‘,‘maximum‘),‘exact‘) % 查找其精确位置 i = 1
% 4. 字符串的比较 >> str1 = ‘ABC‘; >> str2 = ‘ABC‘; >> str3 = ‘abc‘; >> str4 = ‘ABCD‘; >> k1 = strcmp(str1,str2) % 比较字符串,相等返回1 k1 = logical 1 >> k2 = strcmp(str1,str3) % 不相等返回0 k2 = logical 0 >> k3 = strcmpi(str1,str3) % 不区分大小写的比较 k3 = logical 1 >> k4 = strncmp(str1,str4,3) % 比较两个字符串的前n位是否相同 k4 = logical 1
%5. 字符串的大小写转换 >> str = "Hello MATLAB"; >> s = lower(str) s = "hello matlab" >> s = upper(str) s = "HELLO MATLAB"
% 6. 字符串的执行 (eval()函数) >> A = rand(3) A = 0.9649 0.9572 0.1419 0.1576 0.4854 0.4218 0.9706 0.8003 0.9157 >> eval(‘length(A)‘) % 此处直接执行字符串 ans = 3 >> [I,J] = eval(‘size(A)‘) I = 3 J = 3 >> for i = 1:3 % 实现分别给a1,a2,a3赋值操作 eval([‘a‘,num2str(i),‘=2*i‘]) end a1 = 2 a2 = 4 a3 = 6
% 1. 直接赋值法创建元胞数组 %1.1 元素下标使用 >> a{1,1} = 8; >> a{1,2} = ‘cell study‘; >> a{2,1} = magic(3); >> a{2,2} = magic(3)> 5; >> a a = 2×2 cell 数组 {[ 8]} {‘cell study‘} {3×3 double} {3×3 logical } >> b{1,1} = {8}; >> b{1,2} = {‘cell study‘}; >> b{2,1} = {magic(3)}; >> b{2,2} = {magic(3) > 5}; >> b b = 2×2 cell 数组 {1×1 cell} {1×1 cell} {1×1 cell} {1×1 cell}
% 2. cell()函数创建元胞数组 >> a = cell(2) a = 2×2 cell 数组 {0×0 double} {0×0 double} {0×0 double} {0×0 double} >> a = {1,‘c‘,2,cell(3)}
% 1. 访问元胞数组 >> a = {8, ‘cell study‘;magic(3), magic(3) > 5} a = 2×2 cell 数组 {[ 8]} {‘cell study‘} {3×3 double} {3×3 logical } >> a{1,1} ans = 8 >> a{1,:} ans = 8 ans = ‘cell study‘ >> a{:,2} ans = ‘cell study‘ ans = 3×3 logical 数组 1 0 1 0 0 1 0 1 0 >> a{2,2}(1,1) ans = logical 1 >> a{2,2}(1,1) + 1 ans = 2 >> a(1,1) ans = 1×1 cell 数组 {[8]} >> a(1,1) + 1 %小括号访问不能修改值 未定义与 ‘cell‘ 类型的输入参数相对应的运算符 ‘+‘。
% 2. 元胞数组的显示 >> celldisp(a) a{1,1} = 8 a{2,1} = 8 1 6 3 5 7 4 9 2 a{1,2} = cell study a{2,2} = 1 0 1 0 0 1 0 1 0 >> celldisp(a,‘s‘) % 以s为元胞数组命名 s{1,1} = 8 s{2,1} = 8 1 6 3 5 7 4 9 2 s{1,2} = cell study s{2,2} = 1 0 1 0 0 1 0 1 0 >> cellplot(a) % 以图形化的方式显示元胞数组
% 3.删除元胞数组的内容 >> a{1,1} = [] a = 2×2 cell 数组 {0×0 double} {‘cell study‘} {3×3 double} {3×3 logical } >> a{1,1} ans = []
%1. 直接赋值法 >> ss.name = ‘matlba‘; >> ss.age = 2019; >> ss.num = [5:2:16]; >> ss ss = 包含以下字段的 struct: name: ‘matlba‘ age: 2019 num: [5 7 9 11 13 15]
% 2. 函数法 >> ss1 = struct(‘name‘,‘matlab‘,‘age‘,2019,‘num‘,[5:2:16]) % struct()函数创建结构体 ss1 = 包含以下字段的 struct: name: ‘matlab‘ age: 2019 num: [5 7 9 11 13 15]
% 1. 访问结构体中的元素 >> stu = struct(‘sname‘,{‘xiaoming‘,‘xiaoli‘,‘xiaochen‘},‘sage‘,{20,21,22}) stu = 包含以下字段的 1×3 struct 数组: sname sage >> stu(:,1) ans = 包含以下字段的 struct: sname: ‘xiaoming‘ sage: 20 >> stu(1) ans = 包含以下字段的 struct: sname: ‘xiaoming‘ sage: 20 >> stu.sname ans = ‘xiaoming‘ ans = ‘xiaoli‘ ans = ‘xiaochen‘ >> stu(1).sname ans = ‘xiaoming‘
% 2. 结构体的显示 >> names = fieldnames(stu) % 显示结构体的域名 names = 2×1 cell 数组 {‘sname‘} {‘sage‘ } >> f = getfield(stu,‘sname‘) % 显示域名中的内容 f = ‘xiaoming‘
% 3. 结构体的删除 >> s = rmfield(stu,‘sage‘) s = 包含以下字段的 1×3 struct 数组: sname