MATlab--MATLAB数值数据

1.数值数据类型的分类

 整型  浮点型  复数型

(1)整型

  • 无符号整数:无符号8位整数、无符号16位整数、无符号32位整数、 无符号64位整数。
  • 带符号整数:带符号8位整数、带符号16位整数、带符号32位整数、 带符号64位整数

无符号8位整数数据范围:00000000-11111111(0~28-1)。
带符号8位整数数据范围:10000000-01111111(-27~27-1)。

(2)浮点型

  • single函数:将其他类型的数据转换为单精度型。

  • double函数:将其他类型的数据转换为双精度型。

>> class(4)
ans =
double
>> class(single(4))
ans =
single

(3)复型

复型数据包括实部和虚部两个部分,实部和虚部默认为双精度型,虚数单位用i或j来表示。

 real函数:求复数的实部
 imag函数:求复数的虚部

2.数值数据的输出格式
format命令的格式:format 格式符

>> format long
>> 50/3
ans =
16.666666666666668
>> format 
>> 50/3
ans =
16.6667

3.常用数学函数

(1)函数的调用格式为:函数名(函数自变量的值)


>> A=[4,2;3,6]     矩阵A
A =
4 2
3 6
>> B=exp(A)
B =
54.5982 7.3891
20.0855 403.4288

函数在运算时是将函数逐项作用于矩阵
的每个元素上,所以最后运算的结果就
是一个与自变量同型的矩阵。

(2)常用函数的应用
① 三角函数有以弧度为单位的函数和以角度为单位的函数,如果是以角度为单位的函数就在函数名后面加“d”,以示区别。

>> sin(pi/2)
ans =
1
>> sind(90)
ans =
1

② abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值。

>> abs(-4)
ans =
4
>> abs(3+4i)
ans =
5
>> abs('a')
ans =
97

③用于取整的函数有fix、floor、ceil、round。


>> round(4.7)
ans =
5
>> fix(-3.2)
ans =
-3
>> floor(3.6)
ans =
3
>> ceil(-3.8)
ans =
-3

round函数是按照四舍五入的规则来取整。
ceil是向上取整,取大于等于这个数的第一个整数。
floor是向下取整,取小于等于这个数的第一个整数。
fix是固定取靠近0的那个整数,也就是舍去小数取整。

④函数应用举例。
 分别求一个三位正整数的个位数字、十位数字和百位数字。

>> m=345;
>> m1=rem(m,10)
m1 =
5
>> m2=rem(fix(m/10),10)
m2 =
4
>> m3=fix(m/100)
m3 =
3

变量及其操作

 变量与赋值语句  预定义变量  变量的管理

1.变量与赋值语句
在MATLAB中,变量名是以字母开头,后接字母、数字或下画线的字符序列,
最多63个字符

 变量名区分字母的大小写。
 标准函数名以及命令名一般用小写字母。

赋值语句两种格式:

 变量=表达式
 表达式

在这里插入图片描述


>> x=sqrt(7)-2i;
>> y=exp(pi/2);
>> z=(5+cosd(47))/(1+abs(x-y))
z =
1.4395

2.预定义变量
预定义变量是在MATLAB工作空间中驻留,由系统本身定义的变量。

 ans是默认赋值变量
 i和j代表虚数单位
 pi代表圆周率
 NaN代表非数

3.变量的管理
(1)内存变量的删除与修改
在这里插入图片描述
who命令与whos命令
在这里插入图片描述
(2)内存变量文件

用于保存MATLAB工作区变量的文件叫做内存变量文件,其扩展名为.mat,也叫MAT文件。
 save命令:创建内存变量文件。
 load命令:装入内存变量文件。


>> save mydata a x
>> load mydata

MATLAB矩阵的表示

 矩阵的建立
 冒号表达式
 结构矩阵和单元矩阵

1.矩阵的建立

(1)利用直接输入法建立矩阵:将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔。

>> A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9

(2)利用已建好的矩阵建立更大的矩阵:
一个大矩阵可以由已经建立好的小矩阵拼接而成

>> A=[1,2,3;4,5,6;7,8,9];
>> B=[-1,-2,-3;-4,-5,-6;-7,-8,-9];
>> C=[A,B;B,A]
C =
1 2 3 -1 -2 -3
4 5 6 -4 -5 -6
7 8 9 -7 -8 -9 -1 -2 -3 1 2 3
-4 -5 -6 4 5 6
-7 -8 -9 7 8 9

可以用实部矩阵和虚部矩阵构成复数矩阵


>>B=[1,2,3;4,5,6];
>>C=[6,7,8;9,10,11];
>>A=B+i*C A =
1.0000 + 6.0000i 2.0000 + 7.0000i 3.0000 + 8.0000i
4.0000 + 9.0000i 5.0000 +10.0000i 6.0000 +11.0000i

2.冒号表达式
在这里插入图片描述

省略步长e2,则步长为1。例如, t=0:5与t=0:1:5等价。


>> t=0:1:5
t =
0 1 2 3 4 5

在这里插入图片描述

当n省略时,自动产生100个
元素。

>> x=linspace(0,pi,6)
x =
0 0.6283 1.2566 1.8850 2.5133 3.1416

3.结构矩阵和单元矩阵

(1)结构矩阵由结构数据构成的矩阵就是结构矩阵,结构矩阵里的每个元素就是结构数据类型。
格式为:
结构矩阵元素.成员名=表达式

>> a(1).x1=10; a(1).x2='liu'; a(1).x3=[11,21;34,78];
>> a(2).x1=12; a(2).x2='wang'; a(2).x3=[34,191;27,578];
>> a(3).x1=14; a(3).x2='cai'; a(3).x3=[13,890;67,231];

(2)单元矩阵
建立单元矩阵和一般矩阵相似,直接输入就可以了,只是单元矩阵元素用大括号括起来。


> >> b= {
    
    10,'liu',[11,21;34,78];12,'wang',[34,191;27,578];...
14,'cai',[13,890;67,231]}
b = 
[10] 'liu' [2x2 double]
[12] 'wang' [2x2 double]
[14] 'cai' [2x2 double]

矩阵元素的引用

 矩阵元素的引用方式
 利用冒号表达式获得子矩阵
 利用空矩阵删除矩阵的元素
 改变矩阵的形状

1.矩阵元素的引用方式

(1) 通过下标来引用矩阵的元素
A(3,2)表示A矩阵第3行第2列的元素。

>> A(3,2)=200

>> A=[1,2,3;4,5,6];
>> A(4,5)=10
A =
1 2 3 0 0
4 5 6 0 0
0 0 0 0 0
0 0 0 0 10

注意:如果给出的行下标或列下标大于原来矩阵的行数和列数,
那么MATLAB将自动扩展原来的矩阵,并将扩展后没有赋值的矩阵元素置为0。

(2)通过序号来引用

 在MATLAB中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后存储第二列元素,…,一直到矩阵的最后一列元素。
 矩阵元素的序号就是矩阵元素在内存中的排列顺序


>> A=[1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> A(3)
ans =2

序号与下标是一一对应的,以m×n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)×m+i

sub2ind函数:将矩阵中指定元素的行、列下标转换成存储的序号。调用格
式为:
在这里插入图片描述
sub2ind函数举例。
在命令窗口输入:

>>  A=[4 7 2 9 8;3 9 1 4 3;1 5 9 6 4;8 3 7 1 0]
A =
     4     7     2     9     8
     3     9     1     4     3
     1     5     9     6     4
     8     3     7     1     0

则A中每个元素对应的索引如下(MATLAB中数据是按列的方式存储的):
1 5 9 13 17
2 6 10 14 18
3 7 11 15 19
4 8 12 16 20

ind=sub2ind(siz,I,J):
siz表示要转换的矩阵的行列数,
I是要转换矩阵的行标,
J是要转换矩阵的列标。
I,J的行列数必须相同。
ind为输出参数,其行列数与I,J相同。
ind即为索引。

在命令窗口中输入:

>> ind=sub2ind(size(A),[1,2;3,4],[1,1;2,2])

则显示

ind =
     1     2
     7     8

从运算结果可以看出,在矩阵A中,下标(1,1)的索引值为1,下标(2,1)的索引值为2,下标(3,2)的索引值为7,下标(4,2)的索引值为8

2.利用冒号表达式获得子矩阵
子矩阵是指由矩阵中的一部分元素构成的矩阵。
2.利用冒号表达式获得子矩阵

A(i,:) 第i行的全部元素
A(:,j) 第j列的全部元素
A(i:i+m,k:k+m) 第i~i+m行内且在第k~k+m列中的所有元素
A(i:i+m,:) 第i~i+m行的全部元素

>> A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
>> A(1:2,:) 
ans =
1 2 3 4 5
6 7 8 9 10
>> A(2:3,1:2:5)
ans =
6 8 10
11 13 15

end运算符:表示某一维的末尾元素下标

>>A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15;16,17,18,19,20];
>>A(end,:)     最后一行end   “:”:所有列
ans =
16 17 18 19 20
>> A([1,4],3:end)    一和四行,第三列到最后一列
ans =
3 4 5
18 19 20

A(end,1:2:end) 的意思是从A中取元素,取得的元素为A的最后一行,从第1列开始每个两个元素取一个
在这里插入图片描述
3.利用空矩阵删除矩阵的元素
空矩阵是指没有任何元素的矩阵。

>> x=[]
x =
[]

X是一个空矩阵。


>> A=[1,2,3,0,0;7,0,9,2,6;1,4,-1,1,8]
A =
1 2 3 0 0
7 0 9 2 6
1 4 -1 1 8
>> A(:,[2,4])=[]
A =
1 3 0
7 9 6
1 -1 8

4.改变矩阵的形状
reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。

注意:reshape函数只是改变原矩阵的行数和列数,但并不改变原矩阵元素个数及其存储顺序。

>> x=[23,45,65,34,65,34,98,45,78,65,43,76]; 
>> y=reshape(x,3,4) 
y 
23 34 98 65
45 65 45 43
65 34 78 76

A(: ) :将矩阵A的每一列元素堆叠起来,成为一个列向量。

>> A =[-45,65,71;27,35,91]
A =
-45 65 71
27 35 91
>> B=A(:)
B =
-45
27
65
35
71
91

A(:)等价于reshape(A,6,1)

MATLAB基本运算

 算术运算
 关系运算
 逻辑运算
1.算术运算

(1)基本算术运算

基本算术运算符:
+(加)、-(减)、*(乘)、/(右除)、(左除)、
^(乘方)。

  • MATLAB的算术运算是在矩阵意义下进行的。
  • 单个数据的算术运算只是矩阵运算的一种特例。

加减运算

 若两矩阵同型,则运算时两矩阵的相应元素相加减。
 若两矩阵不同型,则MATLAB将给出错误信息。
一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的 每一个元素进行加减运算

乘法运算

  •  矩阵A和B进行乘法运算,要求A的列数与B的行数相等,此时则称A、B矩阵是可乘的,或称A和B两矩阵维数和大小相容。
  •  如果两者的维数或大小不相容,则将给出错误信息,提示用户两个矩阵是不可乘的。

除法运算
在MATLAB中,有两种矩阵除法运算:右除/和左除\。
如果A矩阵是非奇异方阵,则B/A等效于B*inv(A),A\B等效于inv(A)*B。

点运算

 点运算符:.*、./、.\和.^。
 两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵同型。

>> A=[1,2,3;4,5,6;7,8,9];
>> B=[-1,0,1;1,-1,0;0,1,1];
>> C=A.*B
C =
-1 0 3
4 -5 0
0 8 9
>> D=A*B
D =
1 1 4
1 1 10
1 1 16

当x=0.1、0.4、0.7、1时,分别求y=sin x cos x的值。


>> x=0.1:0.3:1;
>> y=sin(x).*cos(x);

字符串处理

 字符串的表示  字符串的操作

1.字符串的表示 在MATLAB中,字符串是用单引号括起来的字符序列。


>> xm='Central South University'
>> xm(1:3)   第一到第三个符号
ans =
Cen

若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。

>> 'I''m a teacher.'
ans =
I'm a teacher

建立多行字符串,形成字符串矩阵。

>> ch=['abcdef';'123456'];
>> ch(2,3)
ans = 3

建立一个字符串向量,然后对该向量做如下处理:
① 取第1~5个字符组成的子字符串。
② 将字符串倒过来重新排列。
③ 将字符串中的小写字母变成相应的大写字母,其余字符不变。
④ 统计字符串中小写字母的个数

>> ch='ABc123d4e56Fg9';
>> subch=ch(1:5) 
subch =
ABc12
>> revch=ch(end:-1:1) 
revch =
9gF65e4d321cBA
>> k=find(ch>='a'&ch<='z') 
k =
3 7 9 13
>> ch(k)=ch(k)-('a'-'A') 
ch =
ABC123D4E56FG9
>> length(k) 
ans =4

2.字符串的操作
(1) 字符串的执行
格式: eval(s)

>> t=pi;
>> m='[t,sin(t),cos(t)]';
>> y=eval(m)
y =
3.1416 0.0000 -1.0000

(2)字符串与数值之间的转换
 abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。
 char函数可以把ASCII码矩阵转换为字符串矩阵。

>> s1='MATLAB';
>> a=abs(s1)
a =
77 65 84 76 65 66
>> char(a+32)
ans =
matlab

(3)字符串的比较

字符串的比较有两种方法:利用关系运算符或字符串比较函数。
 关系运算符比较:两个字符串里的每个字符依次按ASCII值大小逐个进行比较,比较的结果是一个数值向量,向量中的元素要么是1,要么是0。

>> 'www0'>='W123'
ans =
1 1 1 0

 字符串比较函数用于判断字符串是否相等,有4种比较方式,函数如下:

  •  strcmp(s1,s2):用来比较字符串s1和s2是否相等,如果相等,返回结果为1,否则 返回0。

  •  strncmp(s1,s2,n):用来比较两个字符串前n个字符是否相等,如果相等,返回1,否则返回0。

  •  strcmpi(s1,s2):在忽略字母大小写前提下,比较字符串s1和s2是否相等,如果相
    等,返回1,否则返回0。

  •  strncmpi(s1,s2,n):在忽略字符串大小写前提下,比较两个字符串前n个字符是否相等,如果相等,返回1,否则返回0。

(4)字符串的查找与替换
 findstr(s1,s2):返回短字符串在长字符串中的开始位置。
 strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为字符
串s3。

>> p=findstr('This is a test!','is')
p =
3 6
>> p=findstr('is','This is a test!')
p =
3 6
>> result=strrep('This is a test!','test','class')
result =
This is a class!

猜你喜欢

转载自blog.csdn.net/weixin_51552144/article/details/113834337