此帖是根据期末考试复习重点补充完成,
由于使用word编辑引用图片和链接略有不便,
所以开此贴供复习及学习使用。侵删
复习要点
第一章
Matlab的基本概念,名称的来源,基本功能,帮助的使用方法
1.基本概念和名称来源:MATLAB [1] 是美国MathWorks公司出品的商业数学软件,
用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)
2.基本功能:
2.1数值计算和符号计算功能
MATLAB以矩阵作为数据操作的基本单位,还提供了十分丰富的数值计算函数。
2.2绘图功能,matlab提供了两个层次的绘图操作。一种是对图形句柄,进行底层绘图操作。另一种是建立在低层绘图操作之上的高层绘图操作。
2.3编程语言
MATLAB具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高
2.4MATLAB工具箱
MATLAB包含两部分内容:基本部分和各种可选的工具箱。
MATLAB工具箱分为两大类:功能性工具箱和学科性工具箱。
3.帮助的使用方法
3.1 帮助命令
MATLAB帮助命令包括help命令和lookfor命令。
3.1.1 help命令
在MATLAB 命令窗口中直接输入help命令将会显示当前帮助系统中所包含的所有项目,即搜索路径中所有的目录名称。同样,可以通过help加函数名来显示该函数的帮助说明。
3.1.2 lookfor命令
help命令只搜索出那些关键字完全匹配的结果,lookfor命令对搜索范围内的M文件进行关键字搜索,条件比较宽松。
lookfor命令只对M文件的第一行进行关键字搜索。若在lookfor命令加上-all选项,则可对M文件进行全文搜索。
3.2 帮助窗口
进入帮助窗口可以通过以下3种方法:
3.2.1 单击MATLAB主窗口工具栏中的Help按钮。
3.2.2 在命令窗口中输入helpwin、helpdesk或doc。
3.2.3 选择Help菜单中的“MATLAB Help”选项。
第二章
1.变量的命名规则(也是函数和文件的命名规则)
2.预定义变量:pi,ans,lasterr等等
Pi 圆周率π
Ans 最新计算结果的默认变量名
3.内存变量的管理:who,whos
直接在command window里面打whos这个命令。就会把workspace里面所有变量的 Name(变量名), Size(维数), Bytes(占用字节数), Class(类别),都列出来。 具体看附图。
图转:https://www.cnblogs.com/ky027wh-sx/p/5956588.html
4.内存变量的保存和恢复:
4.1变量保存
用save可以保存变量。
save data1 表示保存工作空间所有的变量到data1.mat中
save data2 m 表将工作空间的m变量保存到data2.mat中,如果工作空间没有m会报错。
save data3 m n p v 表示将工作空间中的 m n p v 四个变量保存到data3.mat中,如果工作空间没有这四个变量中的一个也会报错。
4.2变量恢复
Load data3.mat 读取环境变量,恢复变量。
5.矩阵的建立方法,定界符[ ],分隔符:空格或者逗号分隔同一行元素,分号分或回车隔不同行
Eg:
或
Eg:
6.利用已有矩阵建立大矩阵
6.1横向拼接
6.2纵向拼接
7.冒号表达式和linspace函数
8.矩阵元素的引用:单元素,多元素(要使用冒号表达式,本质是用矩阵做下标)
Matlab中数组元素引用有三种方法
1
.下标法(subscripts)
2
.索引法(index)
3
.布尔法(Boolean)
A=
8
1
6
3
5
7
4
9
2
大家对下标估计比较熟悉,由于在C语言中接触过,但是我这里需要强调的是,Matlab的下标是可以多行多列同时引用的,而像C语言等一次只能引用一个,比如
A(
2
:
3
,
3
:-
1
:
1
)表示引用数组中的
2
~
3
行,
3
~
1
列对应的元素
A(:,end)表示引用最后一列元素,“:”表示所有列或行,“end”表示最后一列或列,“end-n”表示倒数第n行或列
A(
1
,end-
1
)表示引用第
1
行倒数第
2
个元素
A([
2
1
3
3
],[
1
1
2
2
1
])表示引用按两个向量引用指定的元素,即A中的第
2
,
1
,
3
,
3
行和第
1
,
1
,
2
,
2
,
1
列对应的元素
>>A=magic(
3
)
A =
8
1
6
3
5
7
4
9
2
>>A(
2
:
3
,
3
:-
1
:
1
)
ans =
7
5
3
2
9
4
>>A(:,end)
ans =
6
7
2
>>A(
1
,end-
1
)
ans =
1
>>A([
2
1
3
3
],[
1
1
2
2
1
])
ans =
3
3
5
5
3
8
8
1
1
8
4
4
9
9
4
4
4
9
9
4
 A(index):index可以是任意的数组,index的元素必须是正整数,且不大于numel(A),返回的是一个尺寸与index一样的数组
下标和索引之间可以通过ind2sub和sub2ind函数相互转换,具体可以看帮助,很简单
[I,J] = ind2sub(siz,IND)
IND = sub2ind(siz,I,J)
还有使用A(:)就可以将数组A转换为列向量
A(8):表示引用A的第8个元素
B=A([1 10 5 2 2 1 3]):表示依次引用A的第1,10,5,2,2,1,3个元素,返回与index尺寸相同的数组,也就是说size(B)=size(index)
A([2 5 9;1 1 1;8 5 6]):返回的时侯是一个3*3的矩阵
>>A=magic(
5
)%括号中为索引值
A =
17
(
1
)
24
(
6
)
1
(
11
)
8
(
16
)
15
(
21
)
23
(
2
)
5
(
7
)
7
(
12
)
14
(
17
)
16
(
22
)
4
(
3
)
6
(
8
)
13
(
13
)
20
(
18
)
22
(
23
)
10
(
4
)
12
(
9
)
19
(
14
)
21
(
19
)
3
(
24
)
11
(
5
)
18
(
10
)
25
(
15
)
2
(
20
)
9
(
25
)
>>A(
8
)
ans =
6
>>A([
1
10
5
2
2
1
3
])
ans =
17
18
11
23
23
17
4
>>A([
2
5
9
;
1
1
1
;
8
5
6
])
ans =
23
11
12
17
17
17
6
11
24
A(X):X是一个有0和1组成布尔型数据,且size(A)=size(X),对应位置为1则留下该数据,0则去掉,最后按A中的存储顺序,返回一个列向量
假如说A是3*3的数组
A(logical([1 0 0;0 1 0;0 0 1])):表示引用了数组A的对角线元素,注意必须使用logical将0/1数组转换为布尔型
>>A=magic(
3
)%生成一个
3
*
3
的数组
A=
8
1
6
3
5
7
4
9
2
>>x=logical([
1
1
0
;
0
1
1
;
1
0
1
])%将
double
转化为
boolean
型数据
x =
1
1
0
0
1
1
1
0
1
>>A(x)%引用对应位置为
1
的数据,返回列向量
ans =
8
4
1
5
7
2
>>x=A>
5
%是有了比较语句,返回布尔型数据,对应位置数据大于
5
的为
1
,否则为
0
x =
1
0
1
0
0
1
0
1
0
>>A(x)%返回大于A中大于
5
的元素,其实该命令可以一次性执行A(A>
5
)或者find(A>
5
),前者返回具体元素,后者返回大于
5
的数据的索引值
ans =
8
9
6
7
>>A(A>
5
)%一次性执行上面的命令
ans =
8
9
6
7
>>indx=find(A>
5
)%查找A中对于
5
的元素,返回它们的索引(index)值,此时我们可以通过A(index)返回具体的元素
index =
1
6
7
8
参考 https://blog.****.net/love_wanling/article/details/77103708
9.矩阵的运算:
矩阵运算可参考ppt,或通过检索查找(以下为笔者举出的两例,但不仅限):
https://jingyan.baidu.com/article/3c343ff7c867a50d36796360.html
https://jingyan.baidu.com/article/6766299799a99654d51b84a8.html
+-.*./ 同维矩阵对应元素比较
*/矩阵维数必须相容 注意左除和右除,谁在斜线下方谁求逆
1/1
10.运算优先级
优先级从高到低:
1. 圆括号()
2. 转置(.')、共轭转置(’)、乘方(.^)、矩阵乘方(^)
3. 一元加法(+)、一元减法(-)、取反(~)
4. 乘法(.*)、矩阵乘法(*)、右除(./)、 左除(.\)、 矩阵右除(/)、矩阵 左除(\)
5. 加法(+)、减法(-)、逻辑非(~)
6. 冒号运算符(:)
7. 小于、小于等于、大于、大于等于、等于、不等于
8. 逐逻辑运算与(&)
9. 逐逻辑运算或(|)
10. "避绕式"逻辑与(&&)
11. "避绕式"逻辑与(||)
11.常用函数length,sum,find
11.1size
获取数组的行数和列数
11.2length
数组长度,即行数和列数中的较大值,相当于max(size(a))
11.3numel
返回元素总数
11.4 sum
a=sum(x);%列求和
a=sum(x,2);%行求和
a=sum(x(:));%矩阵求和
11.5 find
11.5.1 b=find(a),a是一个矩阵,查询非零元素的位置,如果X是一个行向量,则返回一个行向量,
否则,返回一个列向量。如果X全是零元素或者是空数组,
则返回一个空数组,例子如下所示,也可以用b=find(a>2),这句的意思是在a中找到比较2大的元素
11.5.2:
b=find(a,2),找出a中最先出现的2个不为零的数,a是你所要找的矩阵,2参数是指数量所下图
11.5.3 c=find(a,2,'last') 这句的意思是从最后一个非零元素起,找2个不为零的元素
其他等find函数用法,本贴不再介绍。具体可以参考https://jingyan.baidu.com/article/3c343ff71444890d3679635d.html
12. 4个取整函数的区别要会使用
12.1 Fix() (向零方向取整)
12.2 Round()(四舍五入,向最大的方向取整)
12.3 Floor() (向负无穷小取整)
12.4 Ceil (向正无穷大取整)
13. 关系运算和运算符,注意和c语言的区别(不等于~=而非!=),另外,MATLAB中关系或逻辑运算的参与方有矩阵时,表现为矩阵中对应元素比较或者矩阵中每个元素与标量比较,其运算结果为矩阵
逻辑运算的的运算符,注意和c语言的区别(取反为~),当矩阵参与到逻辑运算时,只有矩阵元素全为一才为真
第三章
3.1特殊矩阵:zeros,ones,eye,rand,randn,注意怎样生成任意区间的均匀分布和指定均值和方差的正态分布,小心正态分布的方差是个平方值,在公式中使用时要开方才能作为参数。
3.1 通用的特殊矩阵常用的产生通用特殊矩阵的函数有:
zeros:产生全0矩阵(零矩阵)。
ones:产生全1矩阵(幺矩阵)。
eye:产生单位矩阵。
rand:产生0~1间均匀分布的随机矩阵。
randn:产生均值为0,方差为1的标准正态分布随机矩阵。
例3.1.1 分别建立×3、3×2和与矩阵A同样大小的零矩阵。
(1) 建立一个3×3零矩阵。
zeros(3)
(2) 建立一个3×2零矩阵。
zeros(3,2)
(3) 设A为2×3矩阵,则可以用zeros(size(A))建立一个与矩阵A同样大小零矩阵。
A=[1 2 3;4 5 6]; %产生一个2×3阶矩阵A
zeros(size(A)) %产生一个与矩阵A同样大小的零矩阵
例3.1.2 建立随机矩阵:
(1) 在区间[20,50]内均匀分布的5阶随机矩阵。
(2) 均值为0.6、方差为0.1的5阶正态分布随机矩阵。
命令如下:
x=20+(50-20)*rand(5)
y=0.6+sqrt(0.1)*randn(5)
此外,常用的函数还有reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。
3.2 专门矩阵:幻方阵,范德蒙阵,希尔伯特阵,伴随阵,帕斯卡阵等
3.2.1 魔方矩阵
魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。对于n阶魔方阵,其元素由1,2,3,…,n2共n2个整数组成。MATLAB提供了求魔方矩阵的函数magic(n),其功能是生成一个n阶魔方阵。
例3.2.1 将101~125等25个数填入一个5行5列的表格中,使其每行每列及对角线的和均为565。
M=100+magic(5)
3.2.2 范得蒙矩阵
范得蒙(Vandermonde)矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。可以用一个指定向量生成一个范得蒙矩阵。在MATLAB中,函数vander(V)生成以向量V为基础向量的范得蒙矩阵。例如,A=vander([1;2;3;5])即可得到上述范得蒙矩阵。
3.2.3 希尔伯特矩阵
在MATLAB中,生成希尔伯特矩阵的函数是hilb(n)。
使用一般方法求逆会因为原始数据的微小扰动而产生不可靠的计算结果。MATLAB中,有一个专门求希尔伯特矩阵的逆的函数invhilb(n),其功能是求n阶的希尔伯特矩阵的逆矩阵。
例3.2.3 求4阶希尔伯特矩阵及其逆矩阵。
命令如下:
format rat %以有理形式输出
H=hilb(4)
H=invhilb(4)
3.2.4 托普利兹矩阵
托普利兹(Toeplitz)矩阵除第一行第一列外,其他每个元素都与左上角的元素相同。生成托普利兹矩阵的函数是toeplitz(x,y),它生成一个以x为第一列,y为第一行的托普利兹矩阵。这里x, y均为向量,两者不必等长。toeplitz(x)用向量x生成一个对称的托普利兹矩阵。
3.2.4例
T=toeplitz(1:6)
3.2.5伴随矩阵
MATLAB生成伴随矩阵的函数是compan(p),其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。例如,为了求多项式的x3-7x+6的伴随矩阵,可使用命令:
p=[1,0,-7,6];
compan(p)
3.2.6帕斯卡矩阵
我们知道,二次项(x+y)n展开后的系数随n的增大组成一个三角形表,称为杨辉三角形。由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵。
函数pascal(n)生成一个n阶帕斯卡矩阵。
例3.2.6 求(x+y)5的展开式。
在MATLAB命令窗口,输入命令:
pascal(6)
矩阵次对角线上的元素1,5,10,10,5,1即为展开式的系数。
3.3三角阵的生成和从已知矩阵中提取三角阵和对角阵
1.对角阵
只有对角线上有非0元素的矩阵称为对角矩阵,对角线上的元素相等的对角矩阵称为数量矩阵,对角线上的元素都为1的对角矩阵称为单位矩阵。
(1) 提取矩阵的对角线元素
设A为m×n矩阵,diag(A)函数用于提取矩阵A主对角线元素,产生一个具有min(m,n)个元素的列向量。
diag(A)函数还有一种形式diag(A,k),其功能是提取第k条对角线的元素。
(2) 构造对角矩阵
设V为具有m个元素的向量,diag(V)将产生一个m×m对角矩阵,其主对角线元素即为向量V的元素。
diag(V)函数也有另一种形式diag(V,k),其功能是产生一个n×n(n=m+|k|)对角阵,其第k条对角线的元素即为向量V的元素。
2.三角阵
三角阵又进一步分为上三角阵和下三角阵,所谓上三角阵,即矩阵的对角线以下的元素全为0的一种矩阵,而下三角阵则是对角线以上的元素全为0的一种矩阵。
(1) 上三角矩阵
求矩阵A的上三角阵的MATLAB函数是triu(A)。
triu(A)函数也有另一种形式triu(A,k),其功能是求矩阵A的第k条对角线以上的元素。例如,提取矩阵A的第2条对角线以上的元素,形成新的矩阵B。
(2) 下三角矩阵
在MATLAB中,提取矩阵A的下三角矩阵的函数是tril(A)和tril(A,k),其用法与提取上三角矩阵的函数triu(A)和triu(A,k)完全相同。
3.4矩阵的旋转,转置是旋转的特例
1.矩阵的转置
转置运算符是单撇号(’)。
2.矩阵的旋转
利用函数rot90(A,k)将矩阵A旋转90º的k倍,当k为1时可省略。
3.矩阵的左右翻转
对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,…,
依次类推。MATLAB对矩阵A实施左右翻转的函数是fliplr(A)。
4.矩阵的上下翻转
MATLAB对矩阵A实施上下翻转的函数是flipud(A)。
3.5矩阵求逆及其应用(解方程组)
3.5.1 矩阵的逆与伪逆
对于一个方阵A,如果存在一个与其同阶的方阵B,使得:
A·B=B·A=I (I为单位矩阵)
则称B为A的逆矩阵,当然,A也是B的逆矩阵。
求一个矩阵的逆是一件非常烦琐的工作,容易出错,但在MATLAB中,求一个矩阵的逆非常容易。求方阵A的逆矩阵可调用函数inv(A)。
在线性方程组Ax=b两边各左乘A-1,有
A-1Ax=A-1b
由于A-1A=I,故得
x=A-1b
例 用求逆矩阵的方法解线性方程组。
命令如下:
A=[1,2,3;1,4,9;1,8,27];
b=[5,-2,6]';
x=inv(A)*b
也可以运用左除运算符“\”求解线性代数方程组
3.6 矩阵的秩与迹
1.矩阵的秩
矩阵线性无关的行数与列数称为矩阵的秩。在MATLAB中,求矩阵秩的函数是rank(A)。
2.矩阵的迹
矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。在MATLAB中,求矩阵的迹的函数是trace(A)。
3.7矩阵的特征值和特征向量及其应用(求解高阶方程)
在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种:
(1) E=eig(A):求矩阵A的全部特征值,构成向量E。
第四章
4.1M文件的分类和区别
用MATLAB语言编写的程序,称为M文件。
M文件可以根据调用方式的不同分为两类:
命令文件(Script File)和函数文件(Function File)。
例4.1 建立一个命令文件将变量a,b的值互换,然后运行该命令文件。
程序1:
首先建立命令文件并以文件名exch.m存盘:
clear;
a=1:10;
b=[11,12,13,14;15,16,17,18];
c=a;a=b;b=c;
a
b
然后在MATLAB的命令窗口中输入exch,将会执行该命令文件。
程序2:
首先建立函数文件fexch.m:
function [a,b]=exch(a,b)
c=a;a=b;b=c;
然后在MATLAB的命令窗口调用该函数文件:
clear;
x=1:10;
y=[11,12,13,14;15,16,17,18];
[x,y]=fexch(x,y)
4.2输入输出语句
如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:
xm=input('What''s your name?','s');
MATLAB提供的命令窗口输出函数主要有disp函数,其调用格式为
disp(输出项)
4.3控制不输出和注释
注释%%
4.4选择结构:单分支,多分支,注意end的使用,switch中case语句里面如果使用多个数做一个条件应将其写成{n1,n2,n3……,n5}的形式,如果用冒号表达式生产n1~n5,需要用num2cell进行转换,不能用case {n1:n5}的形式,应该是:case num2cell(n1:n5)
4.4.1if语句
在MATLAB中,if语句有3种格式。
(1) 单分支if语句:
if 条件
语句组
end
(2) 双分支if语句:
if 条件
语句组1
else
语句组2
end
当条件成立时,执行语句组1,否则执行语句组2,语句组1或语句组2执行后,再执行if语句的后继语句。
例如:x=input('请输入x的值:');
if x==10
y=cos(x+1)+sqrt(x*x+1);
else
y=x*sqrt(x+sqrt(x));
end
y
注意条件的边界
商品打折,百分五分转换
分段函数的两种构造:一种利用逻辑表达式和点运算构造,一种利用矩阵增长实现
Try catch条件语句的应用
循环结构,注意for常用冒号表达式做循环条件控制
For循环和向量点运算的区别和联系
While循环和break continue语句
函数的定义
形参实参怎样传递数据,怎样返回值,怎样返回多个值,输入参数的数量和输出参数的数量nargin,nargout
全局变量的使用
第五章
基本绘图plot(x,y)
用plot绘制多个图
矩阵绘图
用多条plot语句绘图,要使用hold on使多个图同时出现在画面上
Plotyy,在同一坐标绘制双图,其优势,颜色,线性,坐标轴,
绘图选项,图注和坐标控制
Loglog,bar,stem,stairs
所有的实验