MATLAB变量和数据类型

 一.变量

MATLAB语言不需要对变量进行事先声明,也不需要指定变量类型,它会自动根据所赋予变量的值或对变量所进行的操作来确定变量的类型。其命名规则为︰
(1)变量名长度最大为63个字符,超过的字符系统忽略不计。

(2)变量名以字母开头,且只能由字母、下划线和数字混合组成。

(3)变量名区分大小写。
(4)变量名不要与MATLAB中已有的函数名、变量名和关键字相同。
MATLAB中的主要关键字包括break, case, catch, classdef,continue,else,elseif等,可以通过iskeyword指令获得这些关键字
MATLAB中有一些特定的变量,不需要用户定义,它们已经被预定义了某个特定的值.这些变量称作系统变量(有些系统变量也称为常量)。系统变量在 MATLAB启动时就产生。

常用系统变量
ans 运算结果的默认变量名
pi 圆周率
eps 浮点数相对精度
inf 无穷大
NaN 不定数
i或j 虚数单位
intmax 特定整数类型的最大值
flintmax 浮点格式的最大连续整数
realmax 最大的正浮点数
realmin 最小的正浮点数
nargin 函数输入参数个数
nargout 函数输出参数个数
%相关代码举例>> a=5
a =5
>> b=3
b =3
>> a+b
ans =8>> pi
ans =3.1416
>> vpa(pi,100)
ans =
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068>> eps
ans =2.2204e-16
>> a=inf
a =Inf
>> a=nan
a =NaN
>> a=0/0
a =NaN
>> a=1/0
a =Inf>> a=2+3i
a =2.0000 + 3.0000i
>> b=2+3j
b =2.0000 + 3.0000i>> intmax
ans =int322147483647
>> flintmax
ans =9.0072e+15

 二.数据类型

MATLAB数据类型有以下几种:数值类型,字符串,日期和时间,结构体数组,细胞数组(元胞数组),函数句柄, Java对象,逻辑类型等。

1.数值型数据

数值型数据包括双精度浮点型、单精度浮点型、整型数据。

MATLAB中变量默认的类型为双精度浮点型(double)。
科学计数法使用字母e来指定10次方的缩放因子。

例如2e3、2e-3分别表示2×10^3和2×10^-3。
在MATLAB语言中,最基本的数据类型就是矩阵,最重要的功能就是进行各种矩阵的运算,所有的数值功能都是以矩阵为基本单位来实现的。

(1)整型

int8;uint8;int16;uint16;int32;uint32;int64;uint64

(int8:带符号8位整型

   uint8:无符号8位整型)

intmax(class)和intmin(class) 函数返回该类整型的最大值和最小值

带符号8位的整型数据最大值是127,int8函数转换时只输出最大值

>> x=int8(129)
x =int8127
>> x=int16(129)
x =int16129

(2)浮点型

单精度:single

双精度:double

(3)复型

复数的相关函数

complex(a.b)

构造以a为实部,以b为虚部的实数
conj(z) 返回复数z的共轭复数
real(z) 返回复数z的实部
image(z) 返回复数z的虚部
abs(z) 返回复数z的模
angle(z) 返回复数z的辐角

b=complex(3,5)

举例:

例1.1已知三角形AABC三点的坐标A(12,10),B(2,6),C(4,-10),求三角形ABC的面积。
解法一:利用复数运算的命令计算得到三角形的面积
解法二:若三角形三顶点(x1,y1), (x2 ,y2), (x3,y3)呈逆时针排列,利用矩阵求三角形的面积

clc,clear
a=12+10i;b=2+6i;c=4-10i;%输入三角形的三个顶点对应的复数
plot([a,b,c,a]) %画出三角形
theta=angle((b-a)/(c-a))%利用复数运算求两个向量夹角
s1=1/2*abs(b-a)*abs(c-a)*abs(sin(theta))%第一种方法t=[12 10 1; 2 6 1; 4 -10 1];%输入矩阵
s2=1/2*abs(det(t)) %不考虑顶点的排列,加上绝对值函数abs,第二种方法

 数值矩阵
在MATLAB中,矩阵的建立方式有多种。

常用的建立方式有直接输入、通过语句和函数建立矩阵和从外部数据文件中导入矩阵3种。
(1)直接输入
直接输入是最简单的矩阵构建方式.直接输入矩阵,应遵循如下几条规则:

1)矩阵元素应当在方括号内;
2)同行内的元素,用逗号或者空格隔开;

3)行与行之间,用分号或者回车分割;

4)元素可以是数值或表达式。

>> a=[1,2,3;3,4,5]
a =1     2     33     4     5

(2)通过语句和函数建立矩阵
t=[0:0.1:5]           %产生从0到5的行向量,元素之间间隔为0.1.

>> t=[0:0.1:5]  
t =列 1 至 180    0.1000    0.2000    0.3000    0.4000    0.5000    0.6000    0.7000    0.8000    0.9000    1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000列 19 至 361.8000    1.9000    2.0000    2.1000    2.2000    2.3000    2.4000    2.5000    2.6000    2.7000    2.8000    2.9000    3.0000    3.1000    3.2000    3.3000    3.4000    3.5000列 37 至 513.6000    3.7000    3.8000    3.9000    4.0000    4.1000    4.2000    4.3000    4.4000    4.5000    4.6000    4.7000    4.8000    4.9000    5.0000

t=linspace(n1,n2,n)  %产生n1和n2之间线性均匀分布的n个数(缺省n时,产生100个数).
t=logspace(n1,n2,n)  %在10^n1和10^n2之间按照对数距离等间距产生n个数(缺省n时,产生50个数

t=rand(4)  %随机产生四行四列的方阵

t=rand(4,5) %随机产生四行五列的矩阵

t=randi(10,5)

t=randi([0,10],3,5)

(3)从外部数据文件中导入矩阵
从外部文本文件导入矩阵的函数有load,

从文本文件和Excel文件导入矩阵的函数有readmatrix。

数据文件保存在当前工作目录下

a=load("data.txt")

b=readmatrix("data.txt")

单引号是字符数组,双引号是字符串

 2.符号型数据

MATLAB还定义了符号型变量,以区别于常规的数值型变量,可以用于公式推导和数学问题的解析解法。进行解析运算前需要首先将采用的变量声明为符号变量,这需要用syms命令实现。该语句的用法为:
syms var1 … xarN  %定义多个符号变量
syms var1…. varN [nrow ncol] matrix  %定义符号变量矩阵

syms f(var1…..varN)  %定义符号函数
syms f(var1…..varN)[nrow ncol] matrix  %定义符号函数矩阵
注意声明多个符号变量var1. … varN,时,中间只能用空格分隔,而不能用逗号等其他符号分隔。
如果需要还可以声明变量的其他属性,如限制变量为positive(正数) integer(正数)、real(实数)、rational (有理数)等。

sxms a b positive%定义两个正数的符号变量a, b

 符号变量的类型可以由assumptions函数读出。
MATLAB符号运算工具箱提供了函数symvar,可以从符号表达式中提出符号变量列表。

vpa函数以指定的有效数字位数显示符号数,默认的是显示32位浮点格式的符号数。

举例:
clc, clear
sxms a [2.3]%声明符号矩阵a
syms b [1.3]%声明符号向量
sxms f(x,y)%声明符号函数

f(x,y)=x*sin(y)%定义符号函数
fsurf(f)%画出曲面图形
class(f)%显示f的类型
symvar(f)%显示f中的符号变量
A=diag(b,-1)%定义符号矩阵A

图像数据一定要注意数据类型,数据类型转换尽量用im2double

3.字符串数组

1.字符数组与字符串
MATLAB使用单引号建立字符数组,字符数组实际存储的是字符串的ASCIl码,函数abs可以获得字符数组的ASClI码。
从R2017A版本开始,可以使用双引号创建字符串标量和字符串数组,使用string将字符数组转换为字符串数组,使用char函数将字符串转换为字符数组。

举例:
clc, clear
a1='l', b1='Love', c1='You'
s1=[a1,b1,c1]%字符数组拼接

a2="I", b2="Love", c2="You"
s2=[a2,b2,c2]%构造字符串数组
s3=string(s1)%转换为字符串标量
s4=char(s3)%转换为字符数组
n = abs(s4)%显示每个字符的ascii码

在一些数据处理中,需要对字符数组和数值之间进行转换

数据类型转换函数
char 转化成字符数组
str2num

字符数组转换为数值

int2str 整数转换为字符数组
str2double 字符数组转换为浮点数
num2str 数值转换为字符数组
eval 将字符数组转换为matlab可执行语句

举例:

求矩阵代数余子式

syms a 3 % 声明3阶符号矩阵a
for i=1:3for j=1:3%删除矩阵的第i行和第j列aij=a;aij(i,:)=[];aij(:,j)=[]str=['A',int2str(i),int2str(j),'=',num2str((-1)^(i+j)),'*det(aij)']eval(str) %执行str对应的执行语句As(j,i)=(-1)^(i+j)*det(aij);end
end
As %显示得到的伴随矩阵

2.字符串操作

字符串的操作命令很多,有字符串查找命令findstr,字符串匹配命令matches。可以在命令窗口运行doc strfun可以看到大多数的字符串操作函数名称。

举例:

某计算机机房的一台计算机经常出故障,研究者每隔15分钟观察一次计算机的运行状态,收集了24小时的数据(共作97次观察)。用1表示正常状态,用О表示不正常状态,所得的数据序列如下:
1110010011111110011110111111001111111110001101101

111011011010111101110111101111110011011111100111
统计上述97个0或1构造的字符串中子串”00"、“01"、“10"、“11"的出现次数,另外再统计"0→0"、"0→1"、"1→0"、"1→1"的次数。

clc,clear,f=fopen("data1.txt")
a=textscan(f,"%c") %a为字符元胞数组
b=[a{:}'] %构造一个大的字符串
s=["00","01","10","11"];
for i=1for j=1:4c1(i,j)=count(b,s(i,j));c2(i,j)=length(findstr(b,s(i,j)));end
end
c1 , c2 %显示字串的个数和变化的次数

Published by

风君子

独自遨游何稽首 揭天掀地慰生平