概述
函数
- 查询函数(知道函数名): help+函数名
- MATLAB联机帮助: helpwin
- 查询函数(不知道全部函数名,模糊查询): lookfor+函数信息
- 内存变量列表:who
- 内存变量信息:
- 目录中的文件列表: what
- 确定文件位置: which
- 变量检验函数: exist
基础知识
命令
- 指令输入提示符 >>
- 函数格式输入,
- 不能有中文
- 必须符合逻辑
- %为注释
- 加 ;不显示执行的结果
- …为续行号
数据类型
-
整型
-
浮点型 默认双精度 ,用class(single(4))转换为单精度
-
format格式符,输出格式受影响,数据的计算和存储不影响
>>format long >>50/3 ans = 16.666666666666668 >>format >>50/3 ans = 16.6667
常用的数学函数
-
函数的调用格式
函数名(函数自变量的值)
-
应用
-
角度为单位 函数名加d
-
abs函数,求 绝对值,复数的模,ASCII值
-
用于取整的 fix(舍小数)、floor、ceil(up)、round(四舍五入)
-
rem 取余
-
isprime函数 判断是否是素数
-
inv§ 求逆矩阵
-
变量与赋值语句
-
变量名必须以字母开头
-
变量名区分字母的大小写
-
标准函数名以及命令名必须使用小写字母
-
预定义变量
ans 默认赋值变量
NaN代表 非数
-
变量的管理
-
内存变量的修改和删除
who和whos
-
内存变量文件
.mat
save 创建内存变量文件 load命令,装入内存变量文件
>>save mydata a x >>load mydata
-
矩阵的表示
-
矩阵的建立
-
直接输入法
>>A=[1,2,3;4,5,6;7,8,9] A= 1 2 3 4 5 6 7 8 9
-
利用已经建立好的矩阵,建立更大的矩阵
>>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]
-
利用实部矩阵和虚部矩阵构成复数矩阵
>>B=[1,2,3;4,5,6]; >>C=[6,7,8;9,10,11]; >>A=B+i*C A=
-
-
冒号表达式
- 格式:e1:e2:e3 e2=1可省略
>>t=0:1:5 t= 0 1 2 3 4 5
-
linspace函数 产生行向量
格式:linspace(a,b,n) n为元素总数,n省略时,自动产生100个元素
结构矩阵和单元矩阵
- 结构矩阵
- 格式: 结构矩阵元素.成员名=表达式
- 单元矩阵
- 用大括号
矩阵元素的引用方式
-
用下标来引用矩阵的元素
-
用序号 序号和矩阵一一对应
>> A=[1,2,3;4,5,6] A = 1 2 3 4 5 6 >> A(3) ans = 2
-
序号和下标可以利用sub2ind和ind2sub函数实现相互转换
D=sub2ind(S,I,J) S 行数和列数组成的向量
>> A=[1:3;4:6] A = 1 2 3 4 5 6 >> size(A) ans = 2 3 >> D=sub2ind(size(A),[1,2;2,2],[1,1;3,2]) D = 1 2 6 4 %第二种 >> [I,J]=ind2sub([3,3],[1,3,5]) %格式:int2sub(向量,序号) I = 1 3 2 J = 1 1 2
-
利用冒号表达式获得子矩阵
用单个冒号 A(i,:) A(i:i+m,k:k+m)
-
end 运算符:表示某一维的末尾元素下标
-
利用空矩阵删除矩阵的元素
直接置为空矩阵,A(:,[2,4])=[]
-
改变矩阵的形状
reshape(A,m,n)
A(:)把每一列元素堆叠起来成为一个列向量
基本运算
算数运算
-
基本
在矩阵意义下运算
加减运算:同型矩阵
乘法运算:A、B矩阵可乘
除法运算:右除/左除\
乘方运算:A^x A为方阵 x为标量
-
点运算(同型)
A.*B 里面的每个元素一一相乘
关系运算符 不等于 ~=
标量 直接比较
同型矩阵 按照标量关系逐个进行
一个标量 一个矩阵 逐个进行
逻辑运算
逻辑异或 xor 两个操作数为0时,结果卫0,否则为1
any
字符串处理
-
用单引号括起来的字符序列
>> xm='Central South University' >> xm(1:3) ans = 'Cen'
-
若字符串中的字符含有单引号,则该单引号字符要用两个单引号表示
-
建立多行,形成字符串矩阵
>> ch=['abcdef';'123456'] >> ch(2,3) ans = '3'
字符串的操作
-
执行
格式 eval(s)
>> t=pi; >> m='[t,sin(t),cos(t)]'; >> y=eval(m) y = 3.1416 0.0000 -1.0000
-
与数值之间的转换
-
abs和double函数都可以用来获取字符串矩阵所对应的ASCII值数值矩阵
-
char函数可以把ACSII值矩阵转换为字符串矩阵
>> s1='MATLAB' >> a=abs(s1) a = 77 65 84 76 65 66 >> char(a+32) ans = 'matlab'
-
-
字符串的比较
- 关系运算符
比较规则:每个字母按ASCII值大小逐个比较,结果为一个数值向量,1或0
维度必须一致
- 字符串比较函数
- strcmp(s1,s2 ):用于比较字符串s1和s2是否相等
- strncmp(s1,s2,n):比较两个字符串前n个字符是否相等,如果相等,返回1
- strcmpi(s1,s2):在忽略字母大小写的前提下,比较,如相等,返回1
- strncmpi(s1,s2,n):在忽略大小写前提下,比较前n个字符
- 字符串的查找与替换
- findstr(s1,s2):返回短字符串在长字符串中的开始位置
- strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为字符串s3
矩阵处理
特殊矩阵
-
通用性的特殊矩阵
-
zeros函数:零矩阵
zeros(m):m×m
zeros(m,n):m×n
zeros(size(A)):与A同样大小的零矩阵
>> A=fix(10+(99-10+1)*rand(5)) >> B=0.6+sqrt(0.1)*randn(5); >> C=eye(5); >> (A+B)*C==C*A+B*C ans = 5×5 logical 数组 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-
ones函数:全1矩阵,幺矩阵
-
eye函数:对角线为1的矩阵
-
rand函数:产生(0,1)区间均匀分布的随机矩阵
-
randn函数:产生均值为0,方差为1的标准正态分布随机矩阵
-
-
用于专门学科的特殊矩阵
-
魔方矩阵
-
n阶魔方阵由1,2,3,···,n²共n²个整数组成,且每行每列以及主、副对角线上各n个元素之和都相等
-
n阶魔方阵每行每列元素的和为(1+2+3+···+n²)/n=(n+n³)/2
-
只产生一个特定的魔方阵
-
-
范德蒙矩阵
-
对于向量v= [v1,v2,···,vn],范德蒙矩阵的一般形式为:
-
函数vander(V)生成以V为基础的范德蒙矩阵
常用于纠错编码
-
-
希尔伯特矩阵
一般形式:
H(i,j)=1/(i+j-1)
生成n阶希尔伯特矩阵的函数 hilb(n)
-
伴随矩阵
生成伴随矩阵的函数为 compan§,其中p是一个多项式的系数矩阵,高次幂系数排在前,低次幂系数排在后。
>> p=[1,-2,-5,6]; >> A=compan(p) A = 2 5 -6 1 0 0 0 1 0
-
帕斯卡矩阵
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H142UI0H-1611404743488)(E:\学习\图片笔记\帕斯卡矩阵.png)]
>> format rat >> P=pascal(5)
-
矩阵变换
对角阵
对角矩阵:只有对角线上有非零元素
数量矩阵:对角线上的元素相等
单位矩阵:对角线上的元素都为1
-
提取矩阵的对角元素
diag(A):提取矩阵A的主对角线元素,产生一个列向量
diag(A,k):提取矩阵A的第k条对角线元素,产生一个列向量
-
构造对角矩阵
diagV):以向量V为主对角线元素,产生对角矩阵
diag(V,k):以向量V为第K条对角线元素,产生对角矩阵
三角阵
-
上三角阵
triu(A):提取矩阵A的主对角线及以上的元素
triu(A,k):
-
下三角阵:对角线以上的元素都为零
tril(A)
矩阵的转置
- 运算符 .’
- 共轭转置 ‘
矩阵的旋转
- rot90(A,k):将矩阵A逆时针方向旋转90°的K倍,k为1时可省略
矩阵的翻转
fliplr(A):对矩阵A实施左右翻转
flipud(A):上下翻转
矩阵求逆
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LJdhj8mO-1611404743493)(E:\学习\图片笔记\逆矩阵.png)]
inv(A)
矩阵求值
方阵的行列式
det(A)
矩阵的秩
rank(A)
矩阵的迹
对角线元素之和,也等于矩阵的特征值之和
trace(A) sum(diag(A))
向量和矩阵的范数
-
向量的三种范数
- 1范数 向量元素的绝对值之和
- 2范数 向量元素绝对值的平方和的平方根
- ∞范数 所有向量元素绝对值中的最大值
- 函数:
- norm(V) norm(V,2) 2范数
- norm(V,1) 1范数
- norm(V,inf) ∞范数
-
矩阵的范数
- 矩阵的1范数 矩阵列元素绝对值之和的最大值 norm(V,1)
- 矩阵的2范数 AA’矩阵的最大特征值的平方根 norm(V) norm(V,2)
- 矩阵的∞范数 所有矩阵行元素绝对值之和的最大值 norm(V,inf)
矩阵的条件数
- 矩阵A的条件数等于A的范数与A的逆矩阵的范数的乘积
- 条件数越接近于1,矩阵的性能越好,反之,矩阵的性能越差
- 函数
- cond(A,1)
- cond(A) cond(A,2)
- cond(A,inf)
矩阵的特征值与特征向量
Ax=λx
- 格式 E=eig(A) 求A 的全部特征值,构成向量E
- [X,D]=eig(A): 求A的全部特征值,构成对角阵D ,并产生矩阵X,X各列是相应的特征向量
几何意义
>> x=[0,0.5,0.5,3,5.5,5.5,6,6,3,0;0,0,6,0,6,0,0,8,1,8];
>> A=[1,0.5;0,1];
>> y=A*x;
>> subplot(2,2,1);
>> fill(x(1,:),x(2,:),'r');
>> subplot(2,2,2);
>> fill(y(1,:),y(2,:),'r');
稀疏矩阵
矩阵的存储方式
-
完全存储方式
-
稀疏存储方式
只存储矩阵的非零元素的值及其位置,即行号和列号
稀疏存储方式的产生
-
两个之间的转换
-
A=sparse(S):将矩阵S转换为稀疏存储方式的矩阵A
-
S=full(A) :将矩阵A转换为完全存储方式的S
>> A=sparse(eye(5)) A = (1,1) 1 (2,2) 1 (3,3) 1 (4,4) 1 (5,5) 1 >> B=full(A) B = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 >> whos Name Size Bytes Class Attributes A 5x5 128 double sparse B 5x5 200 double
-
直接建立稀疏矩阵
-
sparse(m,n)生成一个m×n的所有元素都是零的稀疏矩阵
-
sparse(u,v,S):其中u,v,s是三个等长的向量,S是要建立的稀疏存储矩阵的非零元素。u(i)、v(i)分别是S(i)的行和列下标
>> A=sparse([1,2,2],[2,1,4],[4,5,-7]) A = (2,1) 5 (1,2) 4 (2,4) -7 >> B=full(A) B = 0 4 0 0 5 0 0 -7
-
spconvert(A) 直接建立
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-isHdkLZI-1611404743496)(E:\学习\图片笔记\稀疏矩阵.png)]
带状稀疏矩阵
- 是指所有非零元素集中在对角线上的矩阵
- [B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d
- A=spdiags(B,d,m,n):产生带状稀疏矩阵的系数存储矩阵A,其中m、n为原袋装稀疏矩阵的行数和列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置
>> A=[11,0,0,12,0,0;0,21 ,0,0,22,0;0,0,31,0,0,32;41 ,0,0,42,0,0;0,51,0,0,52,0]
A =
11 0 0 12 0 0
0 21 0 0 22 0
0 0 31 0 0 32
41 0 0 42 0 0
0 51 0 0 52 0
>> [B,d]=spdiags(A)
B =
0 11 12
0 21 22
0 31 32
41 42 0
51 52 0
d =
-3
0
3
- 带状系数矩阵的系数存储
>> A=spdiags(B,d,5,6)
A =
(1,1) 11
(4,1) 41
(2,2) 21
(5,2) 51
(3,3) 31
(1,4) 12
(4,4) 42
(2,5) 22
(5,5) 52
(3,6) 32
-
单位矩阵的稀疏存储
speye(m,n)返回一个m×n的稀疏存储单位矩阵
0 0
0 21 0 0 22 0
0 0 31 0 0 32
41 0 0 42 0 0
0 51 0 0 52 0
[B,d]=spdiags(A)
B =
0 11 12
0 21 22
0 31 32
41 42 0
51 52 0
d =
-3
0
3
- 带状系数矩阵的系数存储
```matlab
>> A=spdiags(B,d,5,6)
A =
(1,1) 11
(4,1) 41
(2,2) 21
(5,2) 51
(3,3) 31
(1,4) 12
(4,4) 42
(2,5) 22
(5,5) 52
(3,6) 32
-
单位矩阵的稀疏存储
speye(m,n)返回一个m×n的稀疏存储单位矩阵