2.1 MATLAB的数据类型
- 每种数据类型都是以矩阵的形式存在的
- 数据类型:数值型、字符型、元胞型、结构体、函数句柄
- 数值型包含:双精度类型、单精度类型、整型
- 支持不同数据的转换
2.1.1 变量与常量
1.变量
- 无须事先声明
- 无须指定变量类型,MATLAB会自动根据变量的赋值与相关操作来确定变量的类型
- 命名规则:
- 区分大小写
- 必须字母开头,可以包含字母、数字、下划线
- 变量名长度不超过63个
2.常量
常量 | 说明 |
pi | 圆周率 |
Inf | 无穷大 |
NaN | 不定值(0/0) |
eps | 浮点运算的相对精度 |
realmax | 最大的正实数 |
realmin | 最小的正实数 |
ans | 默认变量名 |
i,j | 虚数单位,定义为√-1 |
- 定义变量名避免与常量名相同
2.1.2 数值型数据
1.MATLAB的数值精度
MATLAB的数值精度为2-1074,任何绝对值小于2-1074的实数都视为0
2.MATLAB的显示精度
显示精度:MATLAB所能显示的有效位数;默认下,整型则以整型显示,实数 以保留小数点后4位的浮点数显示
显示格式控制;format,digits,vpa
eps ans = 2.2204e-16 eps format short ans =2.220446049250313e-16 eps format long ans =2.2204e-16 eps format rat ans =2.2204e-16 eps digits(10) ans = 1/4503599627370496 vpa(pi) ans =3.141592654 vpa(pi,20) ans =3.1415926535897932385
2.1.3 字符型数据
syms a b %创建符号变量
字符串可以进行加减乘除
2.1.4 元胞数组
元胞数组的基本组成单元是元胞,元胞可以存放任意类型、任意大小的数组,同一元胞数组中个元胞的内容可以不同
元胞数组可以通过赋值语句直接定义(使用{}括号),也可以由cell函数预先分配存储空间再对元胞元素逐个赋值(节约内存占用,提高执行效率)
元胞的创建例如:
a = {[1,2,3],ones(3),'matlab'} a = {1×3 double} {3×3 double} {'matlab'} b = cell(1,3); b{1,1} = [1,2,3]; b{1,2} = ones(3); b{1,3} = 'matlab'; b = {1×3 double} {3×3 double} {'matlab'}
2.1.5 结构体
也可以存放不同类型的数据类型
和元胞的差异:元胞通过值传递,结构体通过指针传递
定义:直接赋值,或通过struct函数定义
clc,clear,close all; A.b1 = [1,2,3]; A.b2 = ones(2); A.b3 = 'matlab'; B = struct('b1',1,'b2',ones(2),'b3',',matlab'); >> A A = 包含以下字段的 struct: b1: [1 2 3] b2: [2×2 double] b3: 'matlab' >> B B = 包含以下字段的 struct: b1: 1 b2: [2×2 double] b3: ',matlab'
2.1.6 函数句柄
用于间接调用一个函数的MATLAB的值或者数据类型
提高函数调用的速度,扩大子函数和私用函数的可调用范围,并迅速获得同名重载函数的位置、类型信息
创建:通过命令fhandle = @ functionname 来创建,如:trig_f = @ sin 或者 sqr = @ (x)x.^2
使用:fhandle(arg1, arg2, ...argn) 或者 fhandle()(无参数)
clc, clear, close all; sin_f = @sin a = sin_f(pi); myadd = @(x,y) x+y^2; b1 = myadd(1,2); a = 1/8165619676597685 b1 = 5
2.1.7 数据类型间转换
对于图像而言,一般读入为uint8 型数据,需要转换为double类型
im1 = im2double(img)
注意理解一下代码:
clc,clear,close all; a = '2'; b = double(a); b1 = str2num(a); c = 2*a; d = 2*b; e = 2*b1; a = 2 b = 50 b1 = 2 c = 100 d = 100 e = 4