目录
目录
一.数值数据
二.常用数学函数
三.变量及其操作
四.MATLAB的矩阵表示
矩阵的建立
结构矩阵和单元矩阵
五.矩阵元素的引用
引用
sub2ind函数
ind2sub函数
利用冒号表达式获得子矩阵
end运算符
利用空矩阵删除矩阵的元素
改变矩阵的形状
六.MATLAB基本运算
1.算术运算
加减运算:
乘法运算:
除法运算:
乘方运算
点运算
2.关系运算:
关系运算符
3.逻辑运算
优先级
七、字符串处理
字符串的表示
字符串的执行
字符串的比较
字符串比较函数
字符串的查找与替换
matlab的数据类型,数值数据类型表示方式
数值数据类型的分类
整型、浮点型、复数
浮点型,分为单精度(single)和双精度型(double)
复型:实部‘虚部为默认双精度。
format命令的格式,只是影响数据的输出格式,而不影响数据的存储。
exp()函数,求自然指数,e的多少次幂
sin(pi/2) 同 sind(90)
abs()函数,绝对值,复数的模,字符串的ASCII码值。
取整函数
区分字母的大小写,且要以字母开头
函数名、命令名需要用小写字母
预定义变量:是由matlab系统本身自定义的变量。
比如:
ans是默认赋值变量
i和j代表虚数单位
pi代表圆周率
NaN代表非数
x=sqrt(7)-2i;
y=exp(pi/2);
z=(5+cosd(47))/(1+abs(x-y))
变量的管理
工作区窗口中对变量进行操作
who显示变量名字 whos显示变量名字以及详细信息
内存变量文件
.mat 文件,用来保存变量
save命令: 创建内存变量文件
load命令:装入内存变量文件
save mydata a x
load mydata
两种方式:
直接输入,用一个矩阵,建立一个更大的矩阵,即由小矩阵拼接成大矩阵。
可以用实部矩阵和虚部矩阵构成复数矩阵。
>> B=[1,2,3;5,6,9];
>> B
B =
1 2 3
5 6 9
冒号表达式 初始值,步长,终止值。
>> C=[1:3;4:6];
>> C
C =
1 2 3
4 5 6
t = 0:1:5 行向量
或者使用linspace(a,b,n)建立向量。
第一个元素 最后一个元素 元素总数 当n省略时,自动产生100个元素。
结构矩阵
格式为:
结构矩阵元素.成员名=表达式
单元矩阵
建立单元矩阵和一般矩阵相类似,直接输入就可以了,只是单元矩阵元素用大括号括起来。
(1)通过下标来引用矩阵的元素。
>> B(2,2)
ans =
6
如果下标超过现有矩阵的行、列,则会建立新的列和行。
>> B(4,4)=10
B =
1 2 3 0
5 6 9 0
0 0 0 0
0 0 0 10
(2)通过序号来引用
在MATLAB中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后存储第二列元素,......,一直到矩阵的最后一列元素。
矩阵元素的序号就是矩阵元素在内存中的排列顺序。
B =
1 2 3 0
5 6 9 0
0 0 0 0
0 0 0 10
>> B(9)
ans =
3
序号与下标是一一对应的,以m*n矩阵A为例,矩阵元素Aj(i,j)的序号为(j - 1) * m + i 。
矩阵元素的序号与下标可以利用sub2ind 和 ind2sub 函数实现相互转换。
sub2ind函数:将矩阵中指定元素的行、列下标转换成存储的序号。调用格式为:
D = sub2ind(S,I,J) D是序号,也就是(I,J)对应矩阵里面的元素的序号,,当 I 和 J 也是矩阵时,则序号D也用矩阵表示。
序号 S:行数和列数组成的向量 I: 转换矩阵元素的行下标 J:转化矩阵元素的列下标
C =
1 2 3
4 5 6
>> D=sub2ind(size(C),[1,2;2,2],[1,1;3,2])
D =
1 2
6 4
以上调用size()来获取目标的行数和列数来算序号
ind2sub函数:将把矩阵元素的序号转换成对应的下标,调用格式为:
[ I , J ] = ind2sub(S , D)
I :行下标 J : 列下标 S : 行数和列数组成的向量 D : 序号
>> [I,J]=ind2sub([3,3],[1,3,5])
I =
1 3 2
J =
1 1 2
以上,
这个函数相当于是帮助我们把一个固定大小的矩阵的某一个元素的序号转换成下标
[ 3 , 3 ]是该矩阵的大小,说明是3*3的矩阵
I , J 对应元素组合起来就是得到的答案
比如一个3*3矩阵中序号为3的元素的下标就是3 1
子矩阵是由矩阵中的一部分元素构成的矩阵
A(i,:) 第 i 行的全部元素
A(:,j) 第 j 列的全部元素
A(i:i + m, k : k + m)
A(i:i + m,:)
A =
1 2 3
7 8 9
>> A(:,2)
ans =
2
8
end运算符,表示某以维的末尾元素下标。
A =
1 2 3
7 8 9
>> A(end,:)
ans =
7 8 9
空矩阵是指没有任何元素的矩阵
A =
1 2 3
7 8 9
>> A(:,3)=[]
A =
1 2
7 8
reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重排成m*n的二维矩阵。
注意:reshape函数只是改变原矩阵的行数和列数,但并不改变原矩阵元素个数及其存储顺序。
A(:) 将矩阵A的每一列元素堆叠起来,成为一个列矩阵。
都是针对矩阵运算的
基本算术运算:加减乘除,乘方。
MATLAB的算术运算是在矩阵意义下进行的。
单个数据的算术运算只是矩阵运算的一种特例。
若两矩阵同型(矩阵维数和大小相同),则运算时两矩阵的相应元素相加减。
如果两个矩阵不同型,则MATLAB将给出错误信息。
一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一个元素进行加减运算。
矩阵A和B进行乘法运算,要求A的列数与B的行数相等,此时则称A、B矩阵是可乘的,或称A和B两矩阵维数和大小相容。
如果两者的维数或大小不相,则将给出错误信息,提示用户两个矩阵是不可乘的。
右除/ 和 左除\
如果A矩阵式非奇异方阵,则B/A【B 右除以A】等效于B*inv(A) 【A矩阵的逆右乘B矩阵】 ,A/B【B左除以A】等效于
inv(A)*B 【A的逆左乘B矩阵】 。
非奇异矩阵是行列式不为 0 的矩阵,也就是可逆矩阵。
inv(A)为A矩阵的逆
对于矩阵来说,右除和左除表示两种不同的除数矩阵和被除数矩阵
A=[1,2,3;4,2,6;7,4,9];
B=[4,3,2;7,5,1;12,7,92];
C1=B/A
C1 =
-0.1667 -3.3333 2.5000
-0.8333 -7.6667 5.5000
12.8333 63.6667 -36.5000
>> C2=A\B
C2 =
0.5000 -0.5000 44.5000
1.0000 0.0000 46.0000
0.5000 1.1667 -44.8333
>> 3/4
ans =
0.7500
>> 4\3
ans =
0.7500
>> a = [100,25]
a =
100 25
>> a/5
ans =
20 5
>> 5\a
ans =
20 5
只有A和B都是方阵的时候才能有A*B = B * A
一个矩阵的乘方运算可以表示成为A^x,要求A为方阵,x为标量
>> A = [1,2,3;4,5,6;7,8,0];
>>
>> A^2
ans =
30 36 15
66 81 42
39 54 69
点运算符号
.* 点乘
./ 点右除
.\ 点左除
.^ 点乘方
两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵同型。
A =
1 2 3
4 5 6
7 8 0
>> B
B =
4 3 2
7 5 1
12 7 92
>> A.*B
ans =
4 6 6
28 25 6
84 56 0
>> A*B
ans =
54 34 280
123 79 565
84 61 22
例子:当x=0.1、0.4、0.7、1时,分别求y=sinxcosx的值。
>> x=[0.1,0.4;0.7,1]
x =
0.1000 0.4000
0.7000 1.0000
>> y = sin(x).*cos(x)
y =
0.0993 0.3587
0.4927 0.4546
< | 小于 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
== | 等于 |
~= | 不等于 |
当两个比较量是标量时,直接比较两数的大小,关系成立,关系表达式结果为1,否则为0。
当参与比较的量是两个同型的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,最终的关系运算的结果是一个与原型矩阵同型的矩阵,它的元素由0或1组成。
当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。
例子:
A =
1 2 3
4 5 6
7 8 0
>> P = rem(A,2)==1
P =
3×3 logical 数组
1 0 1
0 1 0
1 0 0
& | ~
运算法则,和逻辑电路是一样的。
算术运算 > > >逻辑运算 > 双目运算
当参与逻辑运算的是两个同型矩阵,那么将对矩阵相同位置上的元素按标量规则逐个进行运算,最终运算结果是一个与原矩阵同型的矩阵,其元素由1或0组成。
若参与逻辑运算的是一个标量,一个是矩阵,那么将在标量与矩阵中的每个元素之间按照标量规则逐个进行运算,最终运算结果是一个与原矩阵同型的矩阵,其元素是由1或0组成。
例子:求水仙花数
m = 100:999;
m1 = rem(m,10);
m2 = rem(fix(m/10),10);
m3 = fix(m/100);
k = find(m==m1.*m1.*m1 + m2.*m2.*m2 + m3.*m3.*m3);
k
s = m(k)
k =
54 271 272 308
s =
153 370 371 407
其中
rem()函数为取余函数
fix()函数为向零方向取整,y=fix(x) 函数将x中元素零方向取整,得到y是一个整数数组。对于复数z,分别对实部和虚部取整。
MATLAB中的关于fix函数的描述:
>> help fix
fix Round towards zero.
fix(X) rounds the elements of X to the nearest integers
towards zero.
See also floor, round, ceil.
fix 的参考页
名为 fix 的其他函数
在MATLAB中,字符串是用单引号括起来的字符序列。
>> xm = 'A B C'
xm =
A B C
>> xm(1:2)
ans =
A
若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。
建立多行字符串,形成字符串矩阵。
例子:
>> t = pi
t =
3.1416
>> m='[t,sin(t),cos(t)]';
>> y = eval(m)
y =
3.1416 0.0000 -1.0000
字符串与数值之间的转换
abs和double函数都可以用来获取字符串矩阵所对应的ASCLL码数值矩阵。
char函数可以把ASCLL码转换未字符串矩阵。
>> s1='MATLAB';
>> a=abs(s1)
a =
77 65 84 76 65 66
>> char(z+32)
未定义函数或变量 'z'。
>> char(a+32)
ans =
matlab
字符串的比较有两种方法:利用关系运算符或字符串比较函数。
关系运算符比较:两个字符串里的每个字符依次按ASCLL值大小逐个尽心比较,比较的结果是一个数值向量,向量中的元素要么是1,要么是0。
>> 'wwpo'>'12pW'
ans =
1×4 logical 数组
1 1 0 1
用于判断字符串是否相等,有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
findstr(s1,s2):返回短字符串在长字符串中的开始位置
strrep(s1,s2,s3):将字符串s1中的所有字符串s2替换为字符串s3
来源:
中南大学慕课:B站转:https://www.bilibili.com/video/BV1b441147N8?p=5