matlab 求a的数据类型,MATLAB R2012a 的数据类型

数字为数学运算的最基本对象。在MATLAB 中,数字的数据类型有双精度(double)型、单精度型和各种有符号和无符号整数型。本节主要介绍这些数据类型。

整数

MATLAB 支持8 位、16 位、32 位和64 位的有符号和无符号整数数据类型,如表2-11所示。

0ced55751d17ec17f0501780a44308d6.png

上述整数数据类型除了定义范围不同外,具有相同的性质。

由于MATLAB 默认的数据类型为双精度型,因此在定义整型变量时,需指定变量的数据类型。

例2-8 整型数据类型的定义。

>> x=int8(50) %指定x 的数据类型为int8

x =

50

>> class(x)

ans =

int8

>> y=50 %未指定y 的数据类型

y =

50

>> class(y)

ans =

double

类型相同的整数之间可以进行运算,返回相同类型的结果。在进行加、减和乘法运算时比较简单,在进行除法运算时稍微复杂一些,因为在多精度情况下,整数的除法不一定能得到整数的结果。在进行除法运算时,MATLAB 首先将两个数视为双精度类型进行运算,然后将结果转化为相应的整型数据。

例2-9 整数的运算。

>> x=int8(45)

x =

45

>> y=int8(-2)

y =

-2

>> z1=x+y

z1 =

43

>> z2=x-y

z2 =

47

>> z3=x*y

z3 =

-90

>> z4=x/y

z4 =

-23

>> class(z1),class(z2),class(z3),class(z4)

ans =

int8

ans =

int8

ans =

int8

ans =

int8

MATLAB 中不允许进行不同整数类型之间的运算。

例2-10 不同整数类型之间不允许进行运算。

>> x=int8(40);

>> y=int16(20);

>> z=x+y

Error using +

Integers can only be combined with integers of the same class, or scalar

doubles.

由于每种整数数据类型都有相应的取值范围,因此数学运算有可能产生结果溢出。MATLAB 利用饱和处理解决此类问题,即当运算结果超出了此类数据类型的上限或下限时,系统将结果设置为该上限或下限。

例2-11 整数运算中的数据溢出。

>> x=int8(100);

>> y=int8(90);

>> z=x+y

z =

127

>> x-3*y

ans =

-27

>> x-y-y-y

ans =

-128

当计算x+y 时,结果溢出上限,因此结果为127;计算x-3*y 时,3*y 溢出上限,结果为127,继续计算,得到最后结果-27;计算x-y-y-y 时,从左到右进行计算,结果溢出下限,因此结果为-128。

2.3.2 浮点数

MATLAB 的默认数据类型是双精度类型(Double)。为了节省存储空间,MATLAB 也支持单精度数据类型的数组。单精度和双精度数据类型的取值范围和精度可以通过例2-12 的方式进行查看。例2-12 单精度和双精度数据类型的取值范围和精度。

>> realmin('single')

ans =

1.1755e-38

>> realmax('single')

ans =

3.4028e+38

>> eps('single')

ans =

1.1921e-07

>> realmin('double')

ans =

2.2251e-308

>> realmax('double')

ans =

1.7977e+308

>> eps('double')

ans =2.2204e-16

创建单精度类型的变量时需要声明变量类型,与创建整型变量类似。单精度数据类型的数据进行运算时,返回值为单精度。

复数

复数由两个部分组成:实部和虚部。在 MATLAB 中虚数单位由i 或者j 表示。MATLAB 中可以通过两种方法创建复数:第一种方法为直接输入法,第二种方法为

通过complex 函数实现。直接输入法见例2-13。

98719eb47b436136bcb20dc1a9701311.png

另一种创建复数的方法为通过complex 函数。complex 函数的调用方法如下。

(1) c = complex(a,b):返回结果c 为复数,其实部为a,虚部为b。输入参数a 和b 可以为标量,或者维数、大小相同的向量、矩阵或者多维数组;输出参数与a 和b 的结构相同。a 和b 可以有不同的数据类型,当a 和b 为各种不同的类型时,返回值分别如下。

① 当a 和b 中有一个为单精度时,返回结果为单精度。

② 如果a 和b 其中一个为整数类型,则另外一个必须有相同的整数类型,或者为 双精度型,返回结果c 为相同的整数类型。

(2) c = complex(a):只有一个输入参数,返回结果c 为复数,其实部为a,虚部为0。但是此时c 的数据类型为复数。

例2-14 通过complex 函数创建复数。

>> a = uint8([1;2;3;4]);

>> b = uint8([2;2;7;7]);

>> c = complex(a,b)

c =

1 + 2i

2 + 2i

3 + 7i

4 + 7i

例2-15 通过complex 函数创建复数和直接创建复数的比较。

>> x=4;y=0;

>> z1=x+i*y;

>> z2=complex(x,y);

>> isreal(z1),isreal(z2)

ans =1

ans =0

逻辑变量

逻辑数据类型通过1 和0 分别表示逻辑真和逻辑假。一些MATLAB 函数或操作符会返回逻辑真或逻辑假表示条件是否满足,如表达式(5 * 10) > 40 返回逻辑真。在MATLAB 中,存在逻辑数组,如下面的表达式返回逻辑数组。

>> [30 40 50 60 70] > 40

ans =

0 0 1 1 1

1. 逻辑数组的创建

创建逻辑数组最简单的方法为直接输入元素的值为true 或者false。

例2-16 直接创建逻辑数组。

>> x = [true, true, false, true, false]

x =

1 1 0 1 0

>> class(x)

ans =

logical

逻辑数组也可以通过逻辑表达式生成,如例2-17。

例2-17 通过逻辑表达式生成逻辑数组。

>> x = magic(4) >= 9

x =

1 0 0 1

0 1 1 0

1 0 0 1

0 1 1 0

MATLAB 中返回逻辑值的函数和操作符如表2-12 所示。

c4aff68762d0c84809dadb0f12dfa42a.png

对于大型的逻辑数组,如果其中只有少数元素为1,可以采用稀疏矩阵的方式进行存

储和运算,如下所示。

>> x = sparse(magic(20) > 395)

x =

(1,1) 1

(1,4) 1

(1,5) 1

(20,18) 1

(20,19) 1

2. 逻辑数组的应用

MATLAB 中逻辑数组主要有两种应用:用于条件表达式和用于数组索引。如果仅当条件成立时执行某段代码,可以应用逻辑数组进行判断和控制,如例2-18。例2-18 通过逻辑数组控制程序流程。

>> str = 'Hello';

>> if ~isempty(str) && ischar(str)

sprintf('Input string is ''%s''', str)

end

ans =Input string is 'Hello'

该段程序中,只有当str 非空并且为字符串时,执行sprintf 语句。

在MATLAB 中支持通过一个数组对另一个数组进行索引,如下所示。

>> A = 5:5:50

A =

5 10 15 20 25 30 35 40 45 50

>> B = [1 3 6 7 10];

>> A(B)

ans =

5 15 30 35 50

通过数组B 对数组A 的第1、3、6、7、10 个元素进行访问。另外,MATLAB 允许以逻辑数组作为数组索引,对数组元素进行访问,见例2-19。例2-19 通过逻辑数组对数组进行索引,将数组A 中超过0.5 的元素置为0。

>> A = rand(5);

>> B = A > 0.5;

>> A(B) = 0

A =

0 0.0975 0.1576 0.1419 0

0 0.2785 0 0.4218 0.0357

0.1270 0 0 0 0

0 0 0.4854 0 0

0 0 0 0 0

例2-20 通过逻辑数组对数组进行索引,将数组A 中非素数置为0。

>> A = magic(4)

A =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

>> B = isprime(A)

B =

0 1 1 1

1 1 0 0

0 1 0 0

0 0 0 0

>> A(~B) = 0

A =

0 2 3 13

5 11 0 0

0 7 0 0

0 0 0 0

3. 逻辑数组的判断

MATLAB 中提供了一组函数用于判断数组是否为逻辑数组,如表2-13 所示。

492122fa20c3880bc9d323d31e504b91.png

例2-21 判断数组是否为逻辑数组。

>> C{1,1} = pi;

>> C{1,2} = 1;

>> C{1,3} = ispc;

>> C{1,4} = magic(3)

C =

[3.1416] [1] [1] [3x3 double]

>> for k = 1:4

x(k) = islogical(C{1,k});

end

>> x

x =

(3,1) 1

(1,4) 1

(1,5) 1

(20,18) 1

(20,19) 1

各种数据类型之间的转换

在MATLAB 中,各种数据类型之间可以互相转换,转换方式为:(1) datatype(variable),

其中datatype 为目标数据类型,variable 为待转换的变量;(2) cast(x,'type'),将x 的类型转

换为'type'指定的类型。

例2-22 数据类型之间的转换。

>> x=single(6.9)

x =

6.9000

>> x1=int8(x)

x1 =

7

>> class(x1)

ans =int8

>> x2=double(x)

x2 =

6.9000

>> class(x2)

ans =

double

转换时,如果由高精度数据类型转换为低精度数据类型,则对数据进行四舍五入;如果由定义范围大的数据类型转换为定义范围小的数据类型,则返回目标数据类型的上限或下限。

数据类型操作函数

MATLAB R2012a 中提供了大量和数据类型相关的操作函数,如表2-14 所示。

ca4a2a4f2f8775d50590b039bf7bb88c.png

注意:

其中的'type'包括'numeric'、'integer'、'float'和所有的数据类型。

变量

变量是程序的基本元素之一。与其他语言不同,MATLAB 不需要对变量进行事先声明,也不需要指定变量的类型,系统会根据对变量赋予的值为变量自动指定类型。本节主要介绍变量的命名规则,关于变量的更多知识,将会在第6 章进行进一步介绍。MATLAB 的变量命名规则与其他计算机语言类似。首先,变量名必须是一个单一的词,

不能包含空格,另外其命名必须符合下列规则。

(1) 变量名区分大小写。如pi 和Pi 是两个不同的变量。在命令窗口中输入如下的命令,

查看其结果。

>> pi

ans =

3.1416

>> Pi

Undefined function or variable 'Pi'.

>> Pi=2.0

Pi =

2

>> pi

ans =

3.1416

pi 是系统预定义的变量,在命令窗口中输入pi,则显示该变量的值为3.1416。输入Pi,系统提示该变量不存在,可见pi 和Pi 为两个不同的变量。将Pi 赋值为2.0,再次查看变量pi 的值,仍旧为3.1416,即Pi 的改变不影响pi 的值。

(2) 变量名长度不超过63 个字符,超过的部分将会被忽略。

(3) 变量名必须以字母开始,其后可以为字母、数字或者下划线。MATLAB 中的变量名不支持其他符号,因为其他符号在MATLAB 中具有特殊的意义。

除上述3 条规则外,还有一些其他规定,如用户不能利用 MATLAB 中的关键字(保留字)作为变量名。用户可以利用iskeyword 命令查看系统的预定义关键字,或者使用该函数判断一个字符串是否为预定义关键字。

>> iskeyword

ans =

'break'

'case'

'catch'

'classdef'

'continue'

'else'

'elseif'

'end'

'for'

'function'

'global'

'if'

'otherwise'

'parfor'

'persistent'

'return'

'spmd'

'switch'

'try'

'while'

>> iskeyword if

ans =

1

>> iskeyword keyword

ans =

0

另外,用户可以使用isvarname 函数判断一个变量名是否合法,如下所示:

>> isvarname keyword

ans =1

该例显示keyword 为合法变量名,用户可以使用。

系统预定义的特殊变量

除用户定义的变量之外,MATLAB 定义了一些特殊变量,如果用户没有对这些变量另行赋值,则采用其默认值。MALTAB 的预定义特殊变量如表2-15 所示。

变 量 名 描 述

ans 结果显示的默认变量名

beep 使计算机发出“嘟嘟”声

pi 圆周率

eps 浮点数的精度(2.2204e-016),MALTAB 中的最小数

inf 无穷大,如当除数为0 时系统返回inf

NaN 或nan 表示不定数,即结果不能确定

i 或j 虚数单位

nargin 函数的输入参数个数

nargout 函数的输出参数个数

realmin 可用的最小正实数2.2251e-308

realmax 可用的最大正实数值1.7977e+308

bitmax 可用的最大正整数(以双精度格式存储)

varargin 可变的函数输入参数个数

varargout 可变的函数输出参数个数

下面以虚数单位i 为例说明这些变量的用法,见例2-23。

例2-23 系统预定义变量的使用。

>> clear i %清除该变量的定义

>> i

ans =

0 + 1.0000i

>> i=1:3 %重新定义变量i 的值

i =

1 2 3

>> clear i %清除该变量的定义

>> i

ans =

0 + 1.0000i

该例中首先清除i 的定义,查看i 的值,为虚数单位,再对i 重新赋值,则其原来的值被覆盖,清除其定义后,i 的值回到默认值。

MATLAB 中,允许用户再次定义这些变量,对这些变量赋值,如例2-23 中对i 再次赋值。但是在编写程序时,应尽量避免对系统预定义的变量重新赋值,或者使用已有函数名作为变量名,以免程序产生非预期结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值