MATLAB笔记1:MATLAB基础知识
目录
目录
一.数值数据
二.常用数学函数
三.变量及其操作
四.MATLAB的矩阵表示
矩阵的建立
结构矩阵和单元矩阵
五.矩阵元素的引用
引用
sub2ind函数
ind2sub函数
利用冒号表达式获得子矩阵
end运算符
利用空矩阵删除矩阵的元素
改变矩阵的形状
六.MATLAB基本运算
1.算术运算
加减运算:
乘法运算:
除法运算:
乘方运算
点运算
2.关系运算:
关系运算符
3.逻辑运算
优先级
七、字符串处理
字符串的表示
字符串的执行
字符串的比较
字符串比较函数
字符串的查找与替换
一.数值数据
matlab的数据类型,数值数据类型表示方式
数值数据类型的分类
整型、浮点型、复数
浮点型,分为单精度(single)和双精度型(double)
复型:实部‘虚部为默认双精度。
format命令的格式,只是影响数据的输出格式,而不影响数据的存储。
二.常用数学函数
exp()函数,求自然指数,e的多少次幂
sin(pi/2) 同 sind(90)
abs()函数,绝对值,复数的模,字符串的ASCII码值。
取整函数
- Rounding function, rounding to the nearest integer.
- Ceiling function, rounding up.
- Floor function, rounding down.
- Fix function, rounding towards zero.
三.变量及其操作
区分字母的大小写,且要以字母开头
函数名、命令名需要用小写字母
预定义变量:是由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
四.MATLAB的矩阵表示
矩阵的建立
两种方式:
直接输入,用一个矩阵,建立一个更大的矩阵,即由小矩阵拼接成大矩阵。
可以用实部矩阵和虚部矩阵构成复数矩阵。
>> 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函数
sub2ind函数用于将矩阵中的指定元素行列索引转换为存储位置编号。其语法格式如下:
通过调用sub2ind函数可以得到一个标量或矩阵形式的结果D... 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函数
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运算符
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):在不改变矩阵元素总数的前提下,默认将其重塑为一个m×n的二维矩阵。
请注意 reshape 操作仅用于调整矩阵的行维度和列维度的数量,并不会影响其元素总数以及存储排列方式
A(:) 将矩阵A的每一列元素堆叠起来,成为一个列矩阵。
六.MATLAB基本运算
都是针对矩阵运算的
- 算术运算
- 关系运算
- 逻辑运算
1.算术运算
基本算术运算:加减乘除,乘方。
MATLAB的算术运算是在矩阵意义下进行的。
单个数据的算术运算只是矩阵运算的一种特例。
加减运算:
若两矩阵同型(矩阵维数和大小相同),则运算时两矩阵的相应元素相加减。
如果两个矩阵不同型,则MATLAB将给出错误信息。
同样地,在这种情况下,标量与矩阵之间的加减运算实际上是将标量与矩阵中的每个元素执行相应的加减操作。
乘法运算:
当且仅当满足A的列数量与B的行数量一致时,则完成矩阵乘法运算。此时,则这两个矩阵被称为可乘矩阵(即其维数大小符合兼容性条件)。
如果两个矩阵的行数和列数不匹配,则系统会返回一个错误提示信息,并说明这两个矩阵无法进行乘法运算。
除法运算:
右除/ 和 左除\
B 右除以A
B 右除以A
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
代码解读
2.关系运算:
关系运算符
| < | 小于 |
|---|---|
| <= | 小于或等于 |
| > | 大于 |
| >= | 大于或等于 |
| == | 等于 |
| ~= | 不等于 |
当两个比较量都是标量时,在进行数值大小比较后发现关系成立,则该关系表达式的计算结果即为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
代码解读
3.逻辑运算
& | ~
运算法则,和逻辑电路是一样的。
优先级
算术运算 > > >逻辑运算 > 双目运算
假设我们有两个同维度的矩阵参与逻辑运算,则会依次对对应位置的元素按照基本运算规则逐一处理。经过这一系列操作后得到的结果将形成一个与原始矩阵具有相同结构的新矩阵,在该新矩阵中每个元素仅取值为1或0。
当涉及的变量中有一个是标量而另一个是矩阵时,在对这两个数学实体进行逻辑运算的过程中,则需要将该标量值依次作用于该矩阵中的每一个对应元素上。按照相关的计算规则完成这一系列操作后所得到的结果将是一个与原始输入数据保持相同尺寸的新矩阵;这个新生成的结果集合仅包含两个可能取值即数值由0或1构成。
例子:求水仙花数
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()函数为取余函数
该函数用于向零方向取整数值。当执行y = \text{fix}(x)时,该函数对x中的每个元素进行零方向取整操作。对于复数z = a + bi(其中a和b均为实数),\text{fix}()分别对其实部a和虚部b进行处理以获取相应的结果。
MATLAB中的关于fix函数的描述:
assist in fixing
round toward zero.
f(x) rounds each element of x to the nearest integer, rounding toward 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)都可以用于提取字符串矩阵对应的ASCII数值矩阵。
char函数可以把ASCLL码转换未字符串矩阵。
>> s1='MATLAB';
>> a=abs(s1)
a =
77 65 84 76 65 66
>> char(z+32)
未定义函数或变量 'z'。
>> char(a+32)
ans =
matlab
代码解读
字符串的比较
字符串的比较有两种方法:利用关系运算符或字符串比较函数。
关系运算符的比较:通过逐一进行按照ASCII值大小的字符逐一比对的方式,在两个字符串对应的位置上执行操作。其结果形成一个数值向量,在该向量中每个元素都取1或0中的一个值。
>> 'wwpo'>'12pW'
ans =
1×4 logical 数组
1 1 0 1
代码解读
字符串比较函数
用于判断字符串是否相等,有4种比较方式
strcmp(s1 , s2):用来比较字符串s1和s2是否相等,如果相等,返回结果为1,否则返回0.
strncmp(s₁, s₂, n):用于比较字符串s₁和s₂前n个字符是否相同,并根据结果分别返回数值1或数值0
函数strcmpi(s1, s2):忽略字母大小写的前提下判断字符串s1与s2是否相同。若相同,则返回值为1;否则返回0
函数名称用于不区分大小写字母地比较两个字符串的前n个字符的一致性
字符串的查找与替换
findstr(s1,s2):返回短字符串在长字符串中的开始位置
strrep(s1,s2,s3):将字符串s1中的所有字符串s2替换为字符串s3
来源:
