Download presentation
Presentation is loading. Please wait.
1
数学软件 Matlab —— 数据类型
2
内容提要 变量与常量 数值型数据 逻辑型数据 字符与字符串 细胞(cell) 结构型数据 句柄
3
变量 变量 变量是任何程序设计语言的基本元素之一 Matlab 变量的特点: 不要求事先声明(也无法声明)
不需要指定变量类型: 根据所赋的值或对变量所进行的操作来确定变量的类型 变量的类型可以随时改变: 在赋值过程中,如果变量已经存在,Matlab 会用新值代替旧值,并以新的数据的类型代替旧的变量类型 如果能够事先给大数组分配空间,则可以提高程序的执行效率
4
变量 变量命名要求 Matlab 预定义常量 必须以字母开头,含字母(大小写)、数字和下划线
区分大小写 Matlab 预定义常量 i,j 虚数单位 realmin 最小正浮点数 pi 圆周率 realmax 最大正浮点数 eps 浮点运算相对精度 intmin 最小整数 Inf 无穷大 intmax 最大整数 NaN/nan 不定值
5
数据类型 Matlab 常用的数据类型有: numeric:数值 char:字符 logical:逻辑 cell:单元、细胞、元胞
struct:结构
6
细胞 逻辑 字符 函数句柄 Matlab7.x 中的数据类型表
7
数值型 带符号 整数 无符号 数值型数据 单精度 浮点数 双精度
为了提高数值计算的精度,若没有指定数据类型,则所有的数都被看作是双精度的浮点数 使用整型数据或单精度数据可以节约内存空间
8
整型数据 Matlab 提供四种带符号整型和四种无符号整型 数据类型 取值范围 转换函数 带符号 8 位整型 [-27,27 –1]
int8 带符号 16 位整型 [-215 , 215 –1] int16 带符号 32 位整型 [-231 , 231 –1] int32 带符号 64 位整型 [-263 , 263 –1] int64 无符号 8 位整型 [0 , 28 –1] uint8 无符号 16 位整型 [0 , 216 –1] uint16 无符号 32 位整型 [0 , 232 –1] uint32 无符号 64 位整型 [0 , 264 –1] uint64
9
举例 x1=11 x1=int8(11); x2=int8(15.49); x2=15 x3=int8(15.5); x3=16
x5=uint8(255); x5=255 x6=uint8(256); x6=255 x7=uint8(-1); x7=0
10
整型数据运算规则 整型数据运算规则: 整型数据不能与双精度数组进行运算 相同整型数据之间的运算,结果为同类型的整数
不同整型数据之间不能进行运算! x=int8(11); y=int8(5); z=x*y % OK x=int8(11); y=int16(5); z=x*y % ERROR! 整型数据可以和双精度标量进行数值运算,结果为整数。在运算过程中保持浮点运算精度,最后将结果转换成整型。 整型数据不能与双精度数组进行运算 x=int8(11); y=[1,2]; z=x*y % ERROR!
11
最大整数与最小整数 intmax 和 intmin 函数: 查询不同整型数据所能表示的最大整数和最小整数 例:
intmin('int8'); intmax('uint8'); intmin('uint8'); intmax; intmin; intmax('int32'); intmin('int32');
12
浮点数 X 浮点数:单精度(占 4 个字节)和双精度(占 8 个字节) single:将数据转换成单精度浮点数
double:将数据转换成双精度浮点数 浮点数与其它类型数据运算表 operand single double int/uint char logical X
13
最大和最小浮点数 realmax 和 realmin : 查询单精度和双精度所能表示的最大浮点数和最小浮点数 例:
realmax('single'); realmin('single'); realmax('double'); realmin('double'); realmax; realmin; realmax('double'); realmin('double');
14
复数 复数的输入方法 z=3+4i z=complex(3,4) z=complex(3) z=complex(3,0) 直接输入:
虚部与虚数单位之间不能留空格 使用 complex 函数 z=complex(3,4) z=complex(3) z=complex(3,0)
15
整型数据相关函数
16
浮点数相关函数
17
复数相关函数
18
其它相关函数
19
判断数据类型相关函数
20
字符串 字符串和字符数组 字符与字符串运算是各种高级语言不可缺少的部分,Matlab具有强大的字符处理能力 字符串必须用单引号括起来
str1='Matrix Laboratory' 字符串是由多个字符组成的字符行向量 str2=['M','a','t','r','i','x'] 字符数组必须是方的,即每行的字符个数必须相等 str3=['M','a','t'; 'r','i','x']
21
字符串 字符串中的每个字符(包括空格)都是字符串的一个元素 str='Matrix'; str(3) size(str)
Matlab中字符是以 ASCII 码存储的,因而区分大小写,可用 double 等函数查看一个字符的 ASCII 码 str='Matrix'; double(str(3)); int16(str);
22
字符串的输入 直接输入 str1='Matrix'; str2='Laboratory'; str=[str1, str2];
str=[str1; str2]; // ERROR! 使用 char 函数 ASCII 码 字符串 str=char([77,97,116,108,97,98]) str=char(str1,str2) 生成一个字符数组,第一行为 str1,第二行为 str2 数组的列数=max(length(str1), length(str2))
23
字符与数的转换 字符串、字符数组与数值数组之间的转换 按 ASCII 码转换 字符 数:double、int8、int16、...
数 字符:char 直接将数转换成字符 字符 数:str2num (仅限于字符串由数字构成) 数 字符:num2str、int2str、mat2str a=[97, 97.3; 97.8, 98]; str1=char(a); str2=num2str(a); str3=int2str(a); str4=mat2str(a);
24
举例 char 的输入参数有效范围为 [0,65535],当输入参数中有小数时,直接将小数部分舍去。
num2str 直接将每个数字转换成字符 mat2str 把整个矩阵转换成字符行向量,包括矩阵中的方括号、空格 和 分号(逗号自动去除) a=[1,2,3]; b=num2str(a); c=2*a; % c=? d=2*b; % d=? 数值数组转换为字符数组后,表面上看象一个数值数组,但此时的元素是字符而不是数!
25
char、double、int8、int16 等是按 ASCII码 进行转换
str2num、num2str、int2str、mat2str 是直接进行转换
26
字符串的合并 字符串水平合并 直接使用中括号 str1=['hello ', 'world!'] 使用 strcat 函数
str2=strcat('hello ','world!') 使用 strcat 时,系统会自动去除原字符串结尾处的空格 水平合并得到的是一个更长的字符串
27
字符串的合并 字符串垂直合并 直接使用中括号 str3=['Matrix '; 'Laboratory'] 使用 strvcat 函数
str4=strvcat('Matrix','Laboratory') 在中括号中用分号实现垂直合并,必须保证每个字符串的长度相等,否则需用空格补齐 用 strvcat 合并,系统会自动为较短的字符串补充空格 垂直合并得到的是一个字符数组
28
字符串的执行 执行字符串所表示的表达式或命令: eval str='1+2'; a=eval(str) str='A=magic(3)';
str1='figure(1); mesh(peaks(60))'; str2='figure(2); waterfall(peaks(60))'; eval(str1) eval(str2)
29
字符串相关函数 函 数 功 能 strcmp 字符串比较 strrep 字符串替换 strcmpi 字符串比较: 忽略大小写 strncmp
upper 转换为大写 lower 转换为小写 blanks 产生空字符串 deblank 删除字符串中的空格 strmatch 查找匹配字符串 findstr 在一个字符串中查找另一字符串 strjust 对齐字符数组,包括左对齐,右对齐和居中 strtok 返回字符串中第一个分隔符 ( 空格,回车和Tab键 ) 前的部分
30
细胞数组/单元/元胞 Matlab 从 5.0 版开始引入了一种新的数据类型 — 细胞 ( cell ),该结构可以把不同类型的数据纳入到一个变量中。 普通数组中的每个元素都必须具有相同的数据类型,而细胞则没有此要求。 细胞变量的表示方法类似于带有下标的数组,但这些下标不是用圆括号括起来,而是使用大括号。
31
细胞数组举例
32
细胞变量的定义 可以通过以下两种方式定义一个细胞变量 A=[1 2; 3 4]; str='Matlab';
用赋值语句直接定义 A=[1 2; 3 4]; str='Matlab'; M={1:4, A, str}; cellplot(M) 用 cell 函数预先分配空间,然后对细胞的每个元素逐个赋值 M=cell(m,n); % 生成一个 m 行 n 列 的细胞数组 M=cell(2,3); M{1,1}=1; M{1,2}=rand(2); M{1,3}='hello'; M{2,1}=1:3; M{2,2}='Matrix'; M{2,3}=5; cellplot(M)
33
细胞变量元素的引用 要引用细胞中的单个元素,必须使用大括号 A=[1 2; 3 4]; str='Matlab';
M={1:4, A, str}; N={'hello', M; eye(2),magic(3)}; N{1,1} N{1,2} N{1,2}{1,2} N{1,2}{1,2}(2,1)
34
相关函数 celldisp % 列出细胞变量的内容 cellplot % 用图形方式显示细胞变量的内容
iscell % 判别一个变量是否为细胞变量 A=[1 2; 3 4]; str='Matlab'; M={1:4, A, str}; celldisp(M); cellplot(M); iscell(A) iscell(M)
35
上机作业 1、已知 Chebyshev 多项式定义如下: 编程计算 T10(x) (注:Tn(x) 为 n 阶多项式)
试用细胞数组实现(程序取名 m101.m) 2、阶梯问题:有一个长阶梯,若每步上 2 阶,最后剩 1 阶;若每步上 3 阶,最后剩 2 阶;若每步上 5 阶,最后剩 4 阶;若每步上 6 阶,最后剩 5 阶;若每步上 7 阶,最后刚好一阶不剩。问该阶梯至少有多少阶?编程解决这个问题。(程序取名 m102.m)
36
上机作业 3、哥德巴赫猜想:任何一个大于 2 的偶数都能表示成两个素数之和。试编程验证 [3, 2000] 中的偶数是否满足哥德巴赫猜想的论断,并将结果写入文本文件 m103.txt(程序取名 m103.m) 4、由 0 到 9 共 10 个数字组成 4 个完全平方数(即是某个正整数的平方),要求它们分别是一位、二位、三位、四位的数字,且数位不重复(即 0 到 9 每个数字只能在这四个数字中出现一次)。例如: 编程找出所有满足条件的数,并写入到文本文件 m104.txt 中。 (程序取名 m104.m)
Similar presentations