关于MATLAB的学习记录(纯入门用)

其实大二时有修过MATLAB这门课,但最终还是流于应付考试的表面。
今年终于决定试试美赛,于是乎又捡起来这门课,学习内容是按照bilibili上面中南大学的视频讲解,再加上自己编写代码和先前学习的印象做了一份笔记。
就当是存档,方便日后回忆查找。如有侵权,纯属无心,联系删除。

专题一,MATLAB基础知识

一、数据类型:

1整型:带符号和无符号两种
(数值类型转换:int8函数转换为带符号的整型,uint8函数转化为不带符号的整型)
2、浮点型:单精度型和双精度型。(数值型数据默认为双精度)可采用single函数、double函数进行转换。
3、复型数据:包括实部和虚部两部分。(real函数求实部,imag函数求虚部。)

二、数值数据的输出格式

format函数来改变之后数值的输出格式,format long/format(默认是short),只影响输出格式,但不影响储存和计算。
format rat命令:以有理数形式输出。

三、常用的数学函数

函数的调用格式:函数名(自变量值)
函数的应用:
(1)三角函数:sin函数自变量采用弧度制,sind函数自变量采用角度制。例如:sin(pi/2)=sind(90)=1
(2)exp(x):求ex
(3)Abs函数,实数的绝对值,复数的摸,字符串的ASCII值。
(4)用于取整的函数:round函数(四舍五入)ceil函数(向上取整)
floor函数(向下取整)fix函数(向0取整)
(5)求余函数:rem函数:rem(被除数,除数)输出余数,
即:a=rem(345,10)输出a=5
(6)isprime函数:判断变量是否为素数,是返回1,否则返回0.
(7)find函数:查找矩阵变量中的非零向量序号,利用数组输出,例:k=find(A)(查找A矩阵中的非零向量序号),P=X(k)(将X矩阵中与上述查找到的非零向量对应序号的元素输出为P矩阵)

四、变量与赋值语句

变量=内存单元,通过变量名访问内存单元。(MATLAB中,变量名以字母开头,后接字母、数字或下划线等字符。)
① 变量名区分字母的大小写,即A和a表示的是两个变量。
② 内部标准函数名及命令名必须采用小写字母,否则会出错。
赋值语句:变量=表达式,或直接输入表达式,采用系统默认ans。变量结果会在最后显示,若在赋值语句最后加分号(;),则仅赋值,并不显示结果。

五、预定义变量

ans:默认赋值变量。
i和j:表示虚数单位,两者等价。
Pi:代表圆周率
NaN:代表非数
如:在绘图时,如果需要裁减图形,可将其相应坐标设置为NaN。

六、变量管理

Who命令、whose命令:显示驻留变量,前者只给名称,后者会显示名称和具体信息(例如:大小,格式等)
Save命令:创建内存变量文件
load命令:装入内存变量文件

七、矩阵

1)直接输入法:中括号外包,同行元素采用逗号分隔,不同行采用分号分隔。
2)利用已经建立好的矩阵,拼接成大矩阵,例:A、B分别为两个矩阵,可以创建C矩阵,即:C=[A,B;B,A]
3)也可以采用实部矩阵和虚部矩阵构成复数矩阵,例:
4)冒号表达式: 初始值:步长:终止值(默认步长=1)
5)linspace函数:生成等差数列行向量
linspace(第一个元素,最后一个元素,元素总数),总数省略时默认为100个元素。
6)结构矩阵:数据类型不同但逻辑相关的数据组成整体,结构矩阵内的元素均是结构数据类型。
格式:结构矩阵元素.成员名=表达式

7)单元矩阵:采用大括号包括,元素类型可以不限于数值。

八、矩阵元素的引用方式

(1)通过下标来引用元素:A(行,列),如果引用元素行列下标超过原引用矩阵的行列数,则MATLAB会自动对其进行扩展,并将之前不存在的行列中元素赋值为0。
(2)通过序号引用:元素存储是按列进行存储,故排序也是按列排序。序号与下标是一一对应的,例:m(行)×n(列)矩阵,元素A(i,j)序号为(j-1)×m+i
sub2ind函数:将矩阵中指定元素的行列下标转换为存储序号,例:D=sub2ind(行列数组成的向量,行,列)9
可采用size函数获取行列数组成的向量。

ind2sub函数:将矩阵元素的序号转换为对应的下标。
[I,J]=ind2sub(S,D)(行数和列数组成的向量,序号)
(3)利用冒号表达式获得子矩阵:
A(i,:)第i行全部元素
A(:,J)第j列全部元素
A(i:i+m,k:k+m)第ii+m行,第kk+m列的全部元素
(4)end运算符:表示某一维的末尾元素。
(5)利用空矩阵删除矩阵中的元素:即使相应位置的元素为空,使矩阵相应的发生改变。
(6)reshape函数:改变矩阵的形状,在矩阵总元素保持不变的前提下,将矩阵A重新排列为m×n的二维矩阵,例reshape(A,m,n)。只改变行列数,即结构,但不改变元素本身、个数、储存顺序。
(7)A(:):将矩阵A每一列元素堆叠起来,形成一个列向量。

九、算术运算

基本算术运算:加、减、乘、右除/、左除\、乘方^
① 加减运算:要求矩阵同型,即行列数要相同,若维数不同则出现错误。标量和矩阵也可以相运算,可看做矩阵每一个元素都与该标量进行一次运算。
② 乘法运算:A与B相乘,要求A的列数与B的行数相等,否则错误。称为A、B可乘,或两矩阵维数和大小相容。
③ 左除\和右除/:如果A为非奇异矩阵则B(右除)/A,则等于B*inv(A)(即B乘以A的逆矩阵)
④ 乘方运算:A^x,要求A为方阵,x为标量。
点运算:量矩阵的对应元素进行相关运算,要求进行运算的两矩阵同型。
关系运算符:
小于 <,小于或等于 <=,大于 >,大于或等于 >=,等于 ==,不等于 ~=
标量比较:直接比较,成立为1,不成立为0。
矩阵比较:同型基础上,相同位置元素按标量比较,输出结果以矩阵呈现,由0、1组成。
标量与矩阵比较:将标量与矩阵内每个元素进行比较,输出为矩阵,由0、1组成。
逻辑运算:与 & ,或 | 、非 ~
标量:
a&b 只有当ab全为0时,运算结果为1,否则为0。
a|b a、b任一为非零时,结果为1。
~a 当a为0时,运算结果为1。
矩阵:同型矩阵对应元素比较,输出由0、1组成的矩阵为结果。

十、字符串的运用处理

字符串的表示:用单引号括起来的字符序列。
字符串中的单引号作为字符本身需要用两个单引号表示。
将字符串A中的字符重新排列m=A(end:-1:1)
字符串的执行:
eval函数:eval(字符串),将字符串的内容作为MATLAB中相应的函数进行执行。
字符串与数值间的转换:
① abs和double函数都可以用于获取字符串矩阵所对应的ASCII码数值矩阵。
② char函数可以把ASCII码矩阵转换为字符串矩阵。同一个字符到小写ASCII的值相差32。
字符串的比较:一一对应相比较ASCII码的大小。
strcmp函数:strcmp(s1,s2)用于比较两字符串是否相等。相等返回1,不等返回0.
strcmpi函数:忽略字符中的大小写问题进行比较,是否相等。
strncmp函数:strncmp(s1,s2,n)用于比较两字符串前n个字符是否相等。
strncmpi函数:忽略大小写对函数前n项进行比较。
字符串的查找与替换:
findstr(s1,s2):返回短字符串在长字符串中的开始位置。
strrep(s1,s2,s3):将字符串s1中所有子字符s2换为字符串s3.

专题二,MATLAB矩阵处理

一、特殊矩阵

1.通用特殊矩阵
①zero函数:产生全0矩阵,即0矩阵。
zero(m):产生m行m列矩阵;
zero(m,n):产生m行n列矩阵
zero(size(A)):产生与A矩阵同大小的0矩阵。
②ones函数:产生全1矩阵。
③eye函数:产生对角线为1的矩阵。当矩阵为方阵时,得到一个单位矩阵。
④rand函数:产生(0,1)区间均匀分布的随机矩阵。
要得到(a,b)区间上均匀分布的随机矩阵,可用:
fix(a+(b-a+1)*rand(x))
⑤randn函数:产生均值为0,方差为1的标准正态分布随机矩阵。
要得到均值为a,方差为b的正态分布随机矩阵,可用:
a+sqrt(b)*randn(x)
2.专用特殊矩阵
①魔方矩阵:n阶魔方阵由1,2,3…n2共n2个整数组成,且每行、每列以及主副对角线上各n个元素之和都相等 ;每行每列的元素之和均为(n+n3)/2;可由magic函数产生(n大于2时有很多不同的魔方阵,但magic函数只产生一种特定的魔方阵)。
②范德蒙矩阵:最后一列全为1,前一列为基础数,各列均以该列为底数,以其次方产生相应元素。
vander(V),产生以V为基础的范德蒙矩阵。
③希尔伯特矩阵:著名的病态矩阵,即任何一个元素发生较小的变化,矩阵的值和逆矩阵都会产生较大的变化,其病态程度与其的阶数有关,越高越病态。
hilb函数,例hilb(n),生产n阶希尔伯特矩阵。

④伴随矩阵:采用compan(p),生成伴随矩阵,p为多项式系数向量,高次幂系数排在前,低次在后。
伴随矩阵的特征值(即伴随矩阵第一行的值),为多项式方程的根。
⑤帕斯卡矩阵:根据二项式定理,(x+y)n展开后的系数随着n的增大组成一个三角形表,这个三角形称为杨辉三角形。
把二项式系数依次填写在矩阵的左侧对角线上,然后提取左侧的n行n列元素,即为n阶帕斯卡矩阵。

二、矩阵变换

1.矩阵举例
1.对角矩阵:只有对角线上有非零元素的矩阵。
①提取矩阵的对角线元素:
diag(A):提取矩阵A主对角线(k=0)元素,产生一个列向量。
diag(A,k):提取矩阵A第k条对角线的元素,产生一个列向量。
②构造对角阵矩阵:
diag(1:5):建立对角线元素为1,2,3,4,5的对角阵。
③使矩阵D各行元素乘以A的对角线元素:当对角矩阵A左乘一个矩阵D,即A*D,相当于让对角线上元素A1,1乘以D矩阵第一行每一个元素;同理相当于让An,n乘以矩阵D第n行每一个元素。
同理,要将D的各列元素乘以A的对角线元素,即采用右乘对角阵。
2.三角矩阵:
①上三角阵:矩阵的对角线以下的元素全为0的矩阵。
triu(A):提取矩阵A主对角线(k=0)及以上的元素。
triu(A,k)提取矩阵A第k条对角线及以上的元素。
②下三角阵:矩阵的对角线以上的元素全为0的矩阵,采用tril函数,用法同上述triu函数。
3.数量矩阵:对角线上的元素相等的对角矩阵。
4.单位矩阵:对角线上的元素为1的对角矩阵。
2.矩阵的转置
转置即将行元素变为列元素,运算符号我小数点后接单引号(.’);
若为共轭转置,其运算符是单引号(’),它在转置的基础上还要取每个数的复共轭(共轭是针对于复数而言:即实部不变,虚部前面加负号。)
3.矩阵的旋转
rot90(A,k):将矩阵逆时针旋转90°的k倍,当k为1时可以省略。
fliplr(A):对矩阵A实施左右翻转。
flipud(A):对矩阵A实施上线翻转。
4.矩阵的求逆
inv(A):求矩阵的逆,可利用逆矩阵求解线性方程组。

三、矩阵求值

1.行列式值
把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为方阵所对应的行列式的值。
det(A):求方阵A所对应的行列式值。
2.矩阵的秩
线性无关的行数或列数,用rank函数求解。例:
矩阵的迹:等于矩阵对角线元素之和,也等于矩阵的特征值之和。
可用函数trace(A)求解。
3.矩阵和向量的范数
用于度量矩阵或向量在某种意义下的长度。
(1)向量的3种常用范数:
①向量1-范数:向量元素的绝对值之和,例:可用norm(V,1)计算向量V的范数。
②向量2-范数:向量元素平方和的平方根,norm(V)或norm(V,2)。
③向量∞-范数:所有向量元素绝对值中的最大值,norm(V,inf)。
(2)矩阵的3种常用范数:(计算和调用函数与向量相同。)
①矩阵A的1-范数:所有矩阵列元素绝对值之和的最大值。
②矩阵A的2-范数:矩阵A的转置与矩阵A的乘积矩阵(A’A)的最大特征值的平方根。
③矩阵A的∞-范数:所有矩阵行元素绝对值之和的最大值。
4.矩阵的条件数
矩阵A的条件数等于A的范数与A的逆矩阵的范数的乘积。条件数越接近1矩阵的性能越好(矩阵微变产生的误差较小),反之矩阵的性能越差。(应用:可以用来判断迭代的病态程度)
①cond(A,1)
②cond(A)或cond(A,2)
③cond(A,inf)

四、矩阵的特征值与特征向量

设A为n阶方阵,如果存在常数λ和n维非零列向量x,使得等式Ax=λx成立,则称λ为A的特征值,相应的x即为特征向量。
E=eig(A):求矩阵A的全部特征值,构成向量E。
[X,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并产生矩阵X,X各列是相应的特征向量。
同一特征值的特征向量的非零线性组合仍是这个特征值的特征向量。
eigshow函数可以绘制单位圆上向量x和Ax之间的关系,运行如下图;在变化过程中,x和Ax共线的方向,即成为特征方向,此时有Ax=λx。

五、稀疏矩阵

是指零元素个数远远多于非零元素个数的矩阵。
1.矩阵的存储方式
完全存储方式:将矩阵的全部元素按列存储。
稀疏存储:只存储矩阵的非零元素的值及其位置,即行号和列号。
2.稀疏存储方式的产生
①完全存储方式与稀疏存储方式的转换:
sparse函数:将矩阵转化为稀疏方式存储。
full函数:将矩阵按完全方式存储。
②直接建立稀疏矩阵存储:
sparse(m,n):生成一个m×n的所有元素都是零的稀疏矩阵。
sparse(u,v,S):其中u、v、S是三个等长的向量。s是要建立的稀疏存储矩阵的非零元素,u(i)、v(i)分别是S(i)的行和列下标。
spconvert(A):A为一个三列或四列矩阵,每行表示一个非零元素。A的第一列表示非零元素所在行号,第二列表示列号,第三列为非零元素实部,第四列为虚部。
③带状稀疏矩阵的存储:稀疏矩阵有两种基本类型(无规则结构的稀疏矩阵与有规则结构的稀疏矩阵)。而带状稀疏矩阵是指所有非零元素集中在对角线上的矩阵。例:
[B,d]=spdiags(A):从带状稀疏矩阵中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d。
A=spdiags(A):产生带状稀疏矩阵的稀疏存储矩阵A,其中m、n为原带状稀疏矩阵的行列数,B矩阵的第i列为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置。

专题三,程序流程控制

脚本文件:可在命令行窗口直接执行的文件,也称命令文件。M文件。
函数文件:定义一个函数,不能直接执行,而必须以函数调用的方式来调用它。利用function建立,例: function C = f2(A,B),C为输出量,A、B为输入量,f2必须与文件名相同。建立后可在窗口或其他M文件中调用。

一、顺序结构

(1)数据的输入:input函数,A=input(‘提示信息’)
(2)数据的输出:disp(输出项)
(3)程序的暂停:pause(延迟秒数),若在执行过程中强行终止程序,可以采用ctrl+c。
(4)步骤:
输入原始数据
对原始数据进行处理
输出处理结果

二、选择结构

1.if语句
语句格式: if 条件(关系运算或逻辑运算,用以判断)
语句组
end
单分支if语句:当条件结果为标量时,非零表示条件成立,零表示条件不成立;
当条件结果为矩阵时,如果矩阵为非空,且不包含零元素,则条件成立,否则不成立。
双分支if语句: if 条件
语句组
else
语句组
End

2.switch语句
switch 表达式
case 结果表1
语句组1
case 结果表2
语句组2

case 结果表m
语句组m
otherwise
语句组n
end

注意事项:
①整个switch语句只会执行一个语句组,当多个条件均满足时,只执行第一个遇见的条件,执行后直接执行switch语句之后的命令。
②采用switch进行选择,其值应该是一个可列举的表达式。
③case结果表为switch的取值,当取多个时,用单元数据表示。

三、循环结构

1.for语句
格式:
for 循环变量 = 初值 :步长 :终值(不写步长时,默认步长为1)
循环体语句
End
说明:
①for语句针对向量的每一个元素执行一次循环体。
②退出循环之后,循环变量的值就是向量中最后的元素值。
③向量为空时,循环体一次也不执行。例:for i = 3: 1: 1。
蒙特卡洛法:以投点投入正切于正方形内的单位圆的概率与投入正方形内的概率之比作为π值。
for语句的循环变量也可以是一个列向量,格式:
for 循环变量 = 矩阵表达式(依次将各列元素赋给变量)
循环体语句
end
2.while语句
while 条件
循环体语句
end
while语句多用于循环次数不确定的情况,而对于循环次数确定的情况,使用for语句更方便。在一定程度上,两种语句可以相互替代。
流程转向语句:
break语句:跳出循环,继续执行循环语句之后的程序,用于终值整个循环。
continue语句:结束本次循环,开始下一次循环。

四、函数文件的定义与调用

function 输出形参表 = 函数名(输入形参表)
%%注释说明(可写,可不写)
函数体语句
注意事项:
①有多个形参时,形参直接采用逗号分隔,组成形参表。当输出形参多余一个时,应用方括号括起来,构成一个输出矩阵。
②函数文件名(m文件名)最好与函数名相同,方便调用和存储。不相同时,MATLAB会忽略函数名,调用时采用函数文件名。
③return语句:结束执行函数文件。
调用格式:
[输出实参表(相当于将结果赋给相应的变量)] = 函数名(输入实参表:相当于对变量赋值)
函数在调用时,函数实际输入输出的参数称为实际参数,简称实参。
注意事项:
①实参的个数,顺序,格式等,应与函数在定义时相应的形参一致
匿名函数:(用以定义函数)
函数句柄变量 = @{匿名函数输入参数}匿名函数表达式(多个输入参数时,逗号分隔)
函数句柄变量 = @函数名

五、函数的递归调用

一个函数调用它自身称为递归调用(套娃)。
(1)直接递归调用
(2)间接递归调用
对要进行递归的分段函数利用if语句进行判断,并且利用递归进行循环求解。
text函数:进行验证
六、函数参数与变量的作用域
nargin函数:输入实参的个数
nargout函数:输出实参的个数
可以使一个函数,完成不同的操作。
局部变量:在程序中只在特定过程或函数中可以访问的变量。
全局变量:在MATLAB中全程有效,所有函数都可以对其调用。
定义格式:global 变量名

专题四,MATLAB绘图

一、二维曲线

1.plot函数
用于绘制平面上的线性坐标曲线,用线段将各数据点连接起来。
调用格式:
plot(x,y):x,y分别为对应坐标组成的向量。
x为向量,y为矩阵时,需分情况:
①y的列数=x长度,则以x为横坐标,y的每个行向量为纵坐标绘制曲线,曲线数与y的行数相等。
②y的行数=x长度,则以x为横坐标,y的每个列向量为纵坐标绘制曲线,曲线数与y的列数相等。
③x、y为同型矩阵,以x、y对应列元素分别绘制曲线,曲线条数对于列数。
plot(x1,y1,x2,y2…,xn,yn)其中每一向量对构成一组数据点的横、纵坐标,绘制n条曲线。
plot(x):当x为实向量时,则以元素的下标为横坐标,元素的值为纵坐标;当x为复数向量,实部为横坐标,虚部为纵坐标。(complex函数可用于构建虚数,complex(x,y))
Plot(x,y,选项):用以确定线型、颜色、数据点标记。(具体设置:课本P120)
2.fplot函数
fplot(f,lims,选项):其中f代表一个函数,通常采用函数句柄形式;lims为x轴取值范围(可以看做定义域),用[xmin,xmax]描述,默认值为[-5,5]。选项与plot函数定义相同。
fplot(funx,funy,tlims,选项):funx、funy表示函数,通常采用函数句柄的的形式(参照隐匿函数)。tlims为参数的自变量取值范围,[tmin,tmax]表述。
(可以用于绘制隐函数图像,例:x、y均为t的函数,则上式中funx、funy为相应的x、y关于t的表达式,tlims就是t的取值范围。)

二、绘制图形的辅助操作

1.图形标注
①title:图形标题。
title(‘标题内容’):默认位置是图形上方中央;
title({‘第一行内容’,’第二行内容’}):要显示两行标题时,两行内容用大括号包括,中间逗号分隔。
使用LaTeX格式控制符输出希腊字母等,详情可以参见课本P125。
title(图形标题,属性名,属性值):color属性,设置颜色,取值与plot函数相同,默认为黑色;fontsize属性,设置标题字号,默认字号为11。
②xlabel:x轴说明;ylabel:y轴说明
③text:x、y图形说明
Text(x,y,说明):在坐标(x,y)处输出相应的说明。
gtext(说明):文本随鼠标移动,单击放置文本在该处。
④legend:图例;legend(图例1,图例2,图例3…,’location’,’eastoutside’),图例间用逗号隔开,图例顺序要与plot函数绘制顺序一致。location函数可以用于指定整个图例框的位置。
2.坐标控制
①axis函数
axis([xmin,xmax,ymin,ymax,zmin,zmax])
axis equal:纵、横坐标轴采用等长刻度。
axis square:产生正方形坐标系。(默认是矩形)
axis auto:使用坐标轴的默认设置。
axis off:取消坐标轴,即不显示。
axis on:显示坐标轴。
②grid函数:给坐标系加网格线。
grid on:显示网格线。
grid off:隐藏网格线。
grid:用于切换现在网格线的状态。
③box函数:给坐标系加边框。(默认有边框线)
box on:显示边框。
box off:隐匿边框。
box:切换现在边框的状态。
3.图形保持
hold on:保持图形不被刷新。
hold off:控制刷新图形窗口。
hold:控制在两种状态间切换。
4.图形窗口的分隔
subplot函数:subplot(m,n,p),其中m和n指定将图形窗口分成m行×n列个绘图区,p指定当前活动区,区号按行优先变化。后续的绘图、更改坐标系数据等命令仅作用于上述活动区。(可不限于等分,可以任意分隔)

绘图可增强数据的可视化效果。

三、 其他形式的二维图形

1.对数坐标图
semilogx(x1,y1,选项1x2,y2,选项2,…):x为对数坐标,y为线性坐标。
semilogy(x1,y1,选项1,x2,y2,选项2,…):y为对数坐标,x为线性坐标R。
loglog(x1,y1,选项1,x2,y2,选项2,…):采用全对数坐标,即x、y均为对数坐标。
2.极坐标图
polar(theta,rho,,选项):theta为极角,rho为极径
3.统计图
①条形图:bar函数(垂直条形图);barh函数(水平条形图),两者用法相同。
bar(y,style),其中y为数据,(若y为向量,则以元素的值作为矩形条的高度,对于的下标作为横坐标;若y为矩阵,则以y的每一行元素组成一组,用行号作为横坐标,分组绘制矩形条。)
选项style用于指定分组排列模式(‘grouped’,簇状分组,默认形式;’stacked’,堆积分组)。

②直方图:hist函数(直角坐标系下的直方图),rose函数(极坐标系下的直方图)。
hist(y),参数y为向量,绘图时将y中最大值和最小值的数值区间等分,并统计落在每个区间的元素个数,以元素个数为高度绘制直方图。
hist(y,x),x用于设置区间的划分方式。若x为标量,则统计参数划分为x个小区间;若x为向量,则向量x中的每个数指定分组的中心值,x中元素的个数为数据分组数。x缺省时,默认按10个等分区间进行统计。
rose(theta,x),其中向量theta用于确定每一区间与原点的角度,x用于指定区间划分方式。x缺省时,默认按20个等分区间进行统计。
③面积类图形
pie(x,explode),参数x存储待统计数据(通常x为向量,x的每一个元素对于一个扇形,每个扇形的覆盖角度,反应相对应的x在总体中占的比重。),选项explode控制图块的显示模式(与explode的非零值对应的部分,将从图形中分离出来,explode为与x同大小的向量,省略explode参数时,图形为一个完整的圆)。
area函数:绘制面积图,反应多个数据系列累计变化的趋势,使用方法同plot函数相同,只是将所得曲线的下方区域填充颜色。
④散点类图形
scatter函数:散点图。
stairs函数:阶梯图。
stem函数:杆图。
三者用法与plot函数相似,且三者相似,故选择以scatter函数为例:
scatter(x,y,选项,’filled’),x、y用于定位数据点,选项用于指定线型、颜色、数据点标记,省略时数据点为空心点。
⑤矢量类图形
compass函数:罗盘图。
feather函数:羽毛图。
quiver函数:箭头图,常用于绘制矢量场,箭头方向为矢量方向,长短表征矢量大小。
三者用法与plot函数相似,且三者相似,以quiver函数为例:
quiver(x,y,u,v),其中(x,y)为矢量起点,(u,v)为矢量终点。

四、三维曲线

1.plot3函数
plot3(x,y,z),其中参数x、y、z组成一组曲线的坐标。

x、y、z一般为长度相等的向量;
当为同型矩阵时,则以x、y、z对应列元素绘制曲线,曲线条数=矩阵列数。
当参数中既有向量又有矩阵时,向量的长度应与矩阵相符(行向量的长度应与矩阵列数相同,列向量的长度应与矩阵行数相同。)
plot3(x1,y1,z1,x2,y2,z2…,xn,yn,zn),每一组x、y、z向量构成一组数据坐标,绘制一条曲线,共绘制n条曲线。
plot3(x,y,z,选项),用于指定线型,颜色,标记等。
2.fplot3函数
fplot3(funx,funy,funz,tilms)。
其中funx、funy、funz表示定义曲线x、y、z坐标的函数,通常采用函数句柄的形式。
tlims为参数函数自变量的取值范围,用二元向量[tmin,tmax]描述,默认范围为[-5,5]。

五、三维曲面

绘制前需要先生成网格数据,再调用相应的(f)mesh函数和(f)surf函数绘制。
1.平面网格数据的生成
1)利用矩阵运算生成
x = 2:6;
y = (3:8)’
X = ones(size(y))x;
Y = y
ones(size(x));
ones(size(A)):生成一个与A同大小的全1矩阵
2)利用meshgrid函数生成
[X,Y] = meshgrid(x,y):其中参数x,y为向量,存储网格点坐标的X,Y为矩阵。
x = 2:6;
y = (3:8)’
[X,Y] = meshgrid(x,y);
Z = randn(size(X));
plot3(X,Y,Z); %绘图命令
grid on %显示网格线
2.绘制三维曲面的函数
mesh(x,y,z,c):用于绘制三维网格图
surf(x,y,z,c):用于绘制三维曲面图,各线条间的补面,有颜色填充。
1)x,y,z为同型矩阵,其中x、y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的曲面颜色。c省略时,默认为定,即颜色的选择正比于z坐标。
2)当参赛x,y省略时,z矩阵的第二维(列)下标当做x轴坐标,第一维(行)下标当做y轴坐标。
meshc函数:带等高线的三维网格曲面函数。(底面为等高线图)
meshz函数:带底座的三维网格线曲面函数。(底面投影与上方曲面一一相连)
surfc函数:具有等高线的曲面函数。
surfl函数:具有光照效果的曲面函数。
绘制标准三维曲面:sphere函数、cylinder函数
[x,y,z] = sphere(n):产生三个n+1阶的矩阵,可以生产,圆心在原点,半径为1的球体,若,不带输出参数,则直接绘制球面,输入参数n决定了球面的圆滑程度,默认值为20,越大越圆滑。
[x,y,z] = cylinder(R,n):R为存放柱面各个等间隔高度上的半径,n表示,在圆柱圆周上的间隔点数,默认为20个。当R为标量时,则生产圆柱面。
peaks函数:可以用来生成绘图数据矩阵,矩阵元素是按照多峰函数生成。在所考虑的区间中有多个局部极大值(峰值)的实值函数。调用:

peaks(n):参数为标量n时,生成n阶方阵
peaks(V):参数为向量时,带入上述式子求z坐标。
peaks(x,y):参数为网格坐标矩阵时,带入上述式子求z坐标。
peaks:默认等分数为48,即生成49阶的多峰函数,并直接绘制多峰函数曲面图。
当自变量有两个时:u,v,fsurf函数和fmesh函数,绘制三维曲面:
fsurf(funx,funy,funz,uvlims)
fmesh(funx,funy,funz,uvlims)
其中,funx,funy,funz代表定义球面的坐标函数,常用句柄形势调用(参照隐匿函数)。uvlims为自变量的取值范围,用四元向量[umin,umax,vmin,vmax]描述,默认值为[-5,5,-5,5]。

六、图形的修饰处理

1.视点处理
方位角:又称旋转角,是视点与原点连线在平面上的投影,与y轴负方向的夹角。正值表示逆时针,负值表示顺时针。
(默认值为-37.5°)
仰角:又称视角,是视点与原点连线,与xoy平面的夹角,正值表示视点在xoy平面上方,负值表示在下方。(默认值为30°)
view(az,el):设置视点的函数,其中,az为方位角,el为仰角。
view(x,y,z):设置视点在笛卡尔坐标系中的位置。
view(2):设置从二维平面观察图形,方位角为0°,仰角为90°。
view(3):设置从三维空间观察图形,均为默认值。
2.色彩处理
1)颜色的向量表示:[R G B]
[0 0 1]蓝色 [1 0 0]红色 [0 1 0]绿色 [1 1 1]白色 [0 0 0]黑色
2)色图(colormap)
为m行三列的矩阵,每一行都是R G B三元组,定义了一个包含m种颜色的色表。
内建色图为64行三列,默认为parule色图。
指定使用色图: colormap 色图名(例如hot)
也可以自定义色图矩阵:

3)三维图形表面着色,可以用shading函数改变着色方式,调用格式:
shading faceted:将每个网格片用其高度对应的颜色进行着色,网格线为黑色,这是系统默认的着色方式。
shading flat:将每个网格片用同一个颜色进行着色,且网格线也用相应的颜色。
shading interp:在网格片内采用颜色插值处理,得出的表面图显得最光滑。
3.图形的剪裁处理
将图形中需要剪裁部分的函数值设置为NaN,这样在绘制时该部分就不会显示出来,从而达到剪裁的目的。

七、交互式绘图工具

1.“绘图”选项卡

在工作区选定变量后,即可根据系统识别绘制图形。
若选中多个变量,以先选中的变量作为横坐标,后选中的变量作为纵坐标。(也可以根据切换变量顺序按钮进行切换)
2.绘图工具
①可以单击绘图窗口的“显示绘图工具和停靠图形”按钮
②也可以在命令行中输入命令:plottools

1)图形选项板:用于在图形窗口中添加和排列子图,观察和选择绘图数据,以及添加标注和注释。
2)绘图浏览器:以图例的方式列出了图形中的元素。
3)属性编辑器:用于观测和设置所选对象的名称,颜色填充,标记形状等。

专题五,数据分析与多项式计算

一、数据统计分析

1.求矩阵的最大元素与最小元素
max函数:求向量或矩阵的最大元素。
min函数:求向量或矩阵的最小元素。
两函数的调用格式相同,以max函数为例:
①当参数为向量时:
y=max(X):返回向量X的最大值赋给y,如果X中包含复数,则按模最大取。
[y,k]=max(X):返回向量X的最大值赋给y,最大值元素序号存入k,如果X中包含复数,则按模最大取。
②当参数为矩阵时:
B=max(A):返回一个行向量B,向量的第i个元素,是矩阵A第i列的最大值。
[Y,U]=max(A):返回行向量Y和U,Y向量记录A的每列的最大值,U向量记录每列最大元素的行号。
max(A,[],dim):dim=1,作用同max(A);当dim=2时,按行取最大值,返回一个列向量,第i个元素,是矩阵A第i行的最大值。
max(max(A)):连续调用两次max函数即可获得矩阵的最大值元素。
2.求矩阵的平均值和中值
平均值容易受极端数据影响,在某些情况下,中值更能反应平均水平。
mean函数:求算数平均值。 median:求中值。 (调用同max函数)
3.求和与求积
sum函数:求和; prod函数:求积。(相当于求阶乘)
Cumsum:求累加和; cumprod:求累乘积。(相当于求阶乘向量)
(调用格式同max函数)

4.标准差与相关系数
①样本标准差: 总体标准差:
std函数:计算标准差,调用格式如下:
std(X):计算向量X的标准差。
std(A):计算矩阵A各列的标准差。
std(A,flag,dim):flag=0时,计算样本标准差;当flag=1时,计算总体标准差。dim=1,按列计算;dim=2,按行计算。默认:flag=0,dim=1。
②相关系数:,取值范围:[-1,1],绝对值越接近于1数据相关性越高,越接近于0,相关性越差。
corrcoef函数:求相关系数,调用格式如下:
corrcoef(A):返回由矩阵A所形成的一个系相关系数矩阵,其中第i行第j列的元素表示矩阵A中第i列和第j列的相关系数。
corrcoef(X,Y):X、Y为向量,与corrcoef([X,Y])作用相同,用于求X、Y向量间的相关系数。
(应用举例:销售数据与分配方案的相关系数越接近于1.则方案越合理。)
5.排序
sort函数:用于排序,调用格式如下:
sort(X):对向量X按升序排列。
[Y,L]=sort(A,dim,mode):dim是指按行排序还是按列。mode分为两种,ascend,则按升序排序;descend,则按降序排序。默认升序,输出参数中,Y为排序后矩阵,而L中记录Y中相应元素在A 中的位置。

二、多项式计算

1.多项式的表示
多项式以变量前的常数组成向量表示,向量的排序是按次数的从高到低,若缺少该次项,则向量中相应位置元素为0,不可省略,且要记录常数项。
2.多项式的四则运算
conv(P1,P2):两多项式相乘。
[Q,r]=deconv(P1,P2):两多项式相除,Q返回P1除以P2 的商式,r返回余式。
(在多项式除法P(x)/Q(x)运算中,如果P(x)可以表示成Q(x)*S(x)+R(x)的形式(其中S(x)、R(x)为整式),那么S(x)叫该除法式中的商式;R(x)就是余式。)
则有:P1 = conv(Q,P2)+ r成立
3.多项式的求导
polyder函数:多项式求导函数,调用格式如下:
p = polyder(P):求多项式P的导函数。
p = polyder(P,Q):求P·Q的导函数。
[p,q] = polyder(P,Q):求 P/Q的导函数,导函数分子存入P,分母存入q。
4.多项式的求值
polyval(p,x):p为多项式,x为多项式的自变量取值。x为标量时,求得p在该点的值;x为向量或矩阵时,则多向量或矩阵中每个元素求p对应的值。
ployvalm(p,x):函数要求x为方阵,以方阵为自变量(即以整体为自变量,变为矩阵运算,不再按矩阵内单个元素一一计算,与上式并不同)求多项式值。
5.多项式求根
roots(p):求多项式的根系数向量p。
p=poly(x):在已知全部根的条件下,可以反求多项式。
求两多项式交点:p = p1 - p2,roots(p)

三、数据插值

interp1函数:一维插值函数,调用:y1 = interp1(x,y,x1,method),即根据x、y的值,计算含税在x1处的值,赋给y1。X1是一个向量或标量,表示要插值的点。
其中,method的4种方法:
①linear:线性插值,也是默认方法。将与插值点相近的两数据点用直线连接,然后再直线上选取对应的插值点数据。
②nearest:最近点插值。选择最近样本点的值作为插值数据。
③pchip:分段3次埃尔米特插值。采用分段三次多项式,除满足插值条件,还需满足在若干节点处相邻段插值函数的一阶导数相等,使得曲线光滑的同时,还具有保型性。
④spline:3次样条插值。每个分段内构造一个三次多项式,使插值函数除满足插值条件外,还要求在各节点处有连续一阶二阶导数。即进一步提高曲线的光滑性。

四、曲线拟合

功能:数据估算,趋势预测,规律总结。拟合前要三性审查,必要时可分段拟合。
polyfit函数:求得最小二乘拟合多项式系数,进一步得到拟合函数。调用如下:
P=polyfit(X,Y,m)
[P,S] = polyfit(X,Y,m)
[P,S,mu] = polyfit(X,Y,m)
根据样本数据X、Y,产生一个m次多项式P及其采样点误差数据S,mu是一个二元向量,mu(1)= mean(X),mu(2)= std(X)。
样本数据为精确数据,适用于插值;样本为统计数据误差较大,适用于曲线拟合。

专题六,数值微积分与方程求解

一、数值微分与数值积分

1.数值微分
①数值差分与差商
极限:
以h为步长的差分:

当步长h充分小时,得到f(x)在x0点处以h为步长的差商:

②数值微分的实现
diff函数:求向前差分,调用如下:
dx = diff(x):计算向量x的一阶向前差分,dx(i)= x(i+1)- x(i),i=1,2,3…,n-1。
dx = diff(x,n):计算向量的n阶向前差分,例:diff(x,2)=diff(diff(x))
dx = diff(A,n,dim):计算矩阵A的n阶差分。dim=1,按列;dim=2,按行。计算的是向量元素间的差分,故最后的结果向量元素,比原向量少1(个/行/列)。
计算差分之后,可以用f(x)在某点处的差商,作为其导数的近似值。

2.数值积分
①基于自适应辛普森法:
[l,n] = quad(filename,a,b,tol,trace)
②基于自适应Gauss-Lobatto法:
[l,n] = quadl(filename,a,b,tol,trace)
其中:filename是被积函数名;a,b为定积分的上下限,积分限[a,b]必须是有限的,不能为无穷大(inf);tol用于控制积分精度,默认值为10-6;trace控制是否展现积分过程,非0展现,0则不展现,默认trace = 0;返回参数l为定积分的值,n为被积函数的调用次数。
③基于全局自适应积分法:
l = integral(filename,a,b)
其中l是计算得到的积分值,a、b为上下限,可以是inf(无穷大)。
④基于高斯-克朗罗德法:
[l,err] = quadgk(filename,a,b)
其中,err返回近似误差范围,其他参数的含义和用法与quad函数相同。积分上下限可以是无穷大(inf),也可以是复数。当积分上下限为复数时,quadgk函数在复平面上求积分。
⑤基于梯形积分法:
应用于在函数关系表达式未知,仅由一组测定的样本点数据值时
l = trapz(x,y),其中(xi,yi)(i=1,2,3…,n),且a=x1<x2<…<xn=b,且y=f(x)
⑥求高阶积分:
I = quad2d(filename,a1,b1,a2,b2)
I = integral3(filename,a1,b1,a2,b2,a3,b3)

二、线性方程组求解

1.直接法
在不考虑舍入误差的情况下,通过有限步的矩阵初等运算,求得方程组精确解。
①列主元消去法:利用左除运算符计算,,但若矩阵为奇异或接近奇异时(即,行列式值为0),则MATLAB会出错。
②矩阵分解求解线性:方程组:将给定矩阵分解为若干特殊矩阵的乘积。
[L,U] = lu(A):产生一个上三角矩阵U和变换形式的下三角阵L,使之满足A=LU。这里的A必须是方阵。
[L,U,P] = lu(A):产生上、下三角阵U、L,以及一个置换矩阵P,使PA=LU成立,且A为方阵。
2.迭代法
给定一个解的初始值,然后按照一定的迭代算法,进行逐步逼近,求出精确解。
(需要考虑算法的收敛性)
①雅克比迭代法
②高斯-赛德尔迭代法

三、非线性方程求解与极值计算

函数极值计算实际上是一个最优化问题计算,如:路径最短,能量最小等。
1.非线性方程数值求解
(1)单变量非线性方程,调用格式:
X = fzero(filename,x0):其中filename是待求根方程左端的函数表达式,x0是迭代初值。(初值的选取在一定程度上决定了结果的正确性,fzero执行的是一个数值搜索过程,搜索的结果依赖于函数特性和指定的初值)
(2)非线性方程组的求解,调用格式:
X = fsolve(filename,x0,option):其中,X为返回近似解,其中filename是待求根方程左端的函数表达式,x0是初值,option用于设置优化工具箱的优化参数,可以调用optimset函数来完成。
多角度选择和分析是很有必要的。
2.函数极值计算
MATLAB中只求极小值,若要求f(x)极大值,可以通过求-f(x)的极小值得到。
求线性函数极小值问题属于最优化问题,进而分为有无约束情况。
(1)无约束最优化问题
[xmin,fmin] = fminbnd(filename,x1,x2,option):求一元函数在x1到x2的开区间内的极小值点xmin,和最小值fmin;x1,x2表征被研究区域的左右边界。
[xmin,fmin] = fminsearch(filename,x0,option):基于单纯形算法,求多元函数的极小值点xmin,和最小值fmin;x0是一个向量,表示极值点的初值。
[xmin,fmin] = fminunc(filename,x0,option):基于拟牛顿法求多元函数的极小值点xmin,和最小值fmin;x0是一个向量,表示极值点的初值。
Option为优化参数,可以通过optimset函数来设置。
例:option=optimset(‘Display’,’off’)
(2)有约束的最优化问题
约束条件细化为:①线性不等式约束②线性等式约束③非线性不等式约束④非线性等式约束⑤x的上界和下界
[xmin,fmin] = fmincon(filename,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option)
前部与先前函数相同部分意义和用法相同,后部为不同种约束条件,当约束不存在时,用空矩阵表示。

四、常微分方程数值求解

求解常微分方程初值问题就是寻找函数y(t)使之满足如下方程:

数值解法,就是求y(t)在离散节点tn处的函数近似值yn的方法,yn≈y(xn)。这些近似值称为常微分方程的数值解,相邻两个节点之间的距离,称为步长。
单步法:在计算yn+1时,只用到前一步的yn,因此在有了初值之后,就可以逐步往下计算,其代表是龙格-库塔法。
多步法:在计算yn+1时,除用到前一步的yn值外,还要用到yn-p(p=1,2,…,k,k>0)的值,即前面的k步,其代表是亚当斯法。
[t,y] = solver(filename,tspan,y0,option)
其中,t、y分别给出时间向量和相应的数值解;solver为求常微分方程数值解的函数;filename是定义f(t,y)的函数名,该函数必须返回一个列向量;tapan形式为[t0,t1]表示求解区间;y0是初始状态向量;option是可选参数,应用与设置求解属性,常用属性为相对误差值,默认值为10-3;绝对误差值,默认值为10-6。

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值