导图社区 MATLAB
这是关于MATLAB的思维导图,这是一学期整本书的详细整理,其中涉及的内容是数据分析统计和数据分析与多项式计算。
编辑于2021-07-14 19:18:07matlab
第二章 数据及其运算
1||| 数值数据
1.1. 分类
1. 整型(不带小数点)
带符号
带符号8位整形数据的最大值是127
int8函数转换时只输出最大值
无符号
2. 浮点型
单精度(4个字节)
single
双精度(8个字节)
默认double
single函数可以将其他类型的数据转换为单精度型,double函数可以将其他类型的数据转换为双精度型。
3. 复型
实部
虚部
用i或j表示
都是双精度
如果构成一个复数的实部或虚部不是常量,则使用complex(x,y)函数生成复数
运算
实部
real
虚部
imag
求模
abs
幅角
angle
共轭复数
conj
1.2. 输出格式(format)
1. 一般情况下都是双精度存储
2. 数据输出时用户可以用format命令设置或改变数据输出格式
3. 只影响数据输出格式,不影响数据的计算和存储
4. 默认的输出格式是short
2||| 矩阵的表示
1. 矩阵的建立
直接输入
拼接矩阵
2. 冒号表达式
e1:e2:e3其中e1为初始值,e2为步长,e3为终止值
用linspace函数产生行向量。其调用格式为:linspace(a,b,n)
其中a和b是生成向量的第一个和最后一个元素,n是元素总数
n省略时取100
3. 矩阵元素的引用
1.矩阵元素的引用方式
可以通过下标表示元素
序号(Index)与下标(Subscript )是一一对应的
D=sub2ind(S,I,J):将下标转换为序号
S表示要转换的矩阵的行数和列数,是行数和列数组成的向量,通常用size函数获取
I是要转换矩阵的行下标,J是列标,I、J的行列数必须相同
D为对应下标的序号,与I、J相同
[I,J]=ind2sub[S,D]:将序号转换为下标
I是要转换矩阵的行下标,J是列标,I、J的行列数必须相同
D为对应下标的序号,与I、J相同
求矩阵大小的函数
矩阵的最长维度的长度:length
维数:ndims
元素个数:numel
2. 利用冒号表达式获得子矩阵
A(:,j)表示取A矩阵的第j列全部元素;
A(i,j)表示取A矩阵第i行、第j列的元素。
A(i,:)表示A矩阵第i行的全部元素;
A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素;
A(:,k:k+m)表示取A矩阵第k~k+m列的全部元素,
A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素
A(:)将矩阵A每一列元素堆叠起来,成为一个列向量,而这也是MATLAB变量的内部储存方式。
3.利用空矩阵删除矩阵的元素
在MATLAB中,定义[]为空矩阵。给变量X赋空矩阵的语句为X=[]。
注意,X=[]与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是没有元素
4.改变矩阵形状:reshape(A,m,n)
改变逻辑结构,不改变元素个数及其存储顺序
A(:):将每一列堆叠起来
3||| 变量及其操作
1. 变量与赋值语句
变量名以字母开头,后接字母数字下划线最多63个
变量名区分大小写
2. 预定义变量
虚数单位:i、j
用pi表示圆周率π的近似值
预定义变量有特定的含义,在使用时,应尽量避免对这些变量重新赋值
3. 变量的管理
删除与修改
who和whos这两个命令用于显示在MATLAB工作空间中已经驻留的变量名清单。
clear命令用于删除MATLAB工作空间中的变量。
内存变量文件
save 文件名 [变量名表] [-append][-ascii]
load 文件名 [变量名表] [-ascii]
4||| 常用内部函数
4.1. 数学函数
1. 求余:rem(a,b)
fix
2. 求模:mod(a,b)
floor
①如果a、b符号相同那么相等②符号不相同rem与a相同,mod与b相同
3. 判断是否为素数:isprime
4. 向零方向取整:fix
5. 向下取整:floor
6. 向上取整:ceil
7. 绝对值函数:abs
实数绝对值
复数的模
字符串的ASCII码
4.2. 矩阵的超越函数
1. 矩阵平方根:sqrtm(A)
2. 矩阵对数:logm(A)
3. 矩阵指数:expm(A)
4. 普通矩阵函数
funm(A,@fun)对方阵A计算由fun定义的函数的矩阵函数值
当fun取exp时,funm(A,@exp)可以计算矩阵A的指数,与expm(A)的计算结果一样
5||| 运算
1. 算术运算
基本运算
加减
若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减
乘法
假定有两个矩阵A和B,若A为m×n矩阵,B为n×p矩阵,则C=A*B为m×p矩阵
除法(非奇异方程)
左除:A\B=A^-1*B
A\B等效于A的逆左乘B矩阵,也就是inv(A)*B
右除:B\A=B^-1*A
而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)
对于含有标量的运算,两种除法运算的结果相同,如3/4和4\3有相同的值
乘方A^2
开方:A^0.1
点运算
它们的对应元素进行相关运算,要求两矩阵的维参数相同
2. 关系运算
六种运算符
<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)
六种运算符对应的函数
函数
查找非零元素位置,用相应元素序号来表示:find
3. 逻辑运算
与:and(a,b)
或:or(a,b)
非:not(a)
异:xor(a,b)
异的时候结果为1,同的时候结果为0
4. 优先级:算术>关系>逻辑运算
6||| 字符串
1||| 表示:用单引号括起来看作行向量
处理
取字符串:subch=A(1;3)
字符串倒排
找小写字母的位置
2||| 操作
执行:eval
把字符串的内容作为对应的MATLAB命令来执行
查找和替换
findstr(s1,s2):返回短字符在长字符中开始的位置
strrep(s1,s2,s3):将1中的所有2换成3
3||| 字符串与数值之间的转换
数字字符串→数值
str2num
str2double
ASCII→字符
setstr
数值→字符串
str = num2str(A) ;
str = num2str(A, precision)保留的数字位数
整数→字符串
int2str
4||| 字符串的连接
1. 字符串向量
2. strcat函数
5||| 字符串的比较
是否相等
① 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
7||| 结构数据和单元数据
1. 结构数据
1. 结构矩阵的建立和引用
2. 结构成员的修改
删除成员x4:a=rmfield(a,‘x4’);
增加一个成员x4
a(1).x4=‘410075’
2. 单元数据
单元矩阵的元素可以是结构或单元数据。
建立单元矩阵和一般矩阵相似,只是矩阵元素用大括号括起来
显示整个单元矩阵
celldisp(b)
第6章 MATLAB数据分析与多项式计算
6.1 数据统计分析
6.1.1 最大值和最小值
1.求向量的最大值和最小值
求向量X的最大值的函数有两种调用格式,分别是:
① y=max(X):返回向量X的最大值,并存入y。如果X中包含复数元素,则按模取最大值。
② [y,k]=max(X):返回向量X的最大值,并存入y,最大值的序号存入k。如果X中包含复数元素,则按模取最大值。
求向量X的最小值的函数是min(X),用法和max(X)相同。
2.求矩阵的最大值和最小值
求矩阵A的最大值的函数:
① max(A):每列的最大值
② [Y,U]=max(A):返回行向量Y和U,Y每列的最大值,U最大值的行号
③ max(A,[],dim):dim取1或2。dim取1时,该函数和max(A)等价;dim取2时,取每行最大值
④ [Y,U]=max(A,[],2):返回行向量Y和U,Y每行的最大值,U最大值的列号
求矩阵最小值的函数是min,其用法和max函数相同。
3.两个向量或矩阵对应元素的比较
函数max和min还能对两个同型的向量或矩阵进行比较,调用格式为:
① U=max(A,B):A、B是两个同型的向量或矩阵,结果U是与A、B同型的向量或矩阵,U的每个元素等于A、B对应元素的较大者。
② U=max(A,n):n是一个标量,结果U是与A同型的向量或矩阵,U的每个元素等于A对应元素和n中的较大者。
min函数的用法和max函数相同。
6.1.2 求和与求积
数据序列求和用sum函数。设X是一个向量,A是一个矩阵,sum函数的调用格式为:
① sum(X):返回向量X各元素的和。
③ sum(A):返回一个行向量,各列元素之和
⑤ sum(A,2):返回一个列向量,各行元素之和
数据序列求积用prod函数
② prod(X):返回向量X各元素的乘积。
④ prod(A):返回一个行向量,各列元素之积
⑥ prod(A,2):返回一个列向量,各行元素之积
6.1.3 平均值和中值
求矩阵和向量元素的平均值的函数是mean。设X是一个向量,A是一个矩阵,函数的调用格式为:
① mean(X):返回向量X的算术平均值。
② mean(A):返回一个行向量,其第i个元素是A的第i列的算术平均值。
③ mean(A,dim):当dim为1时,该函数等同于mean(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的算术平均值。
求中值的函数是median
6.1.4 累加和与累乘积
在MATLAB中,使用cumsum和cumprod函数能方便地求得向量和矩阵元素的累加和与累乘积向量,它们的调用格式相同,其中cumsum函数的调用格式为:
① cumsum(X):返回向量X累加和向量。
② cumsum(A):返回一个矩阵,其第i列是A的第i列的累加和向量。
③ cumsum(A,dim):当dim为1时,该函数等同于cumsum(A);当dim为2时,返回一个矩阵,其第i行是A的第i行的累加和向量。
6.1.5 标准差与相关系数
1.标准差
对于矩阵A,std(A)返回一个行向量,它的各个元素便是矩阵A各列或各行的标准方差
Y=std(A,flag,dim)
①当dim=1时,求各列元素的标准差;当dim=2时,则求各行元素的标准差。
②当flag=0时,按S1所列公式计算标准差;当flag=1时,按S2所列公式计算标准差。
默认取flag=0,dim=1。
对于向量X,std(X)返回一个标准差。
2.相关系数
对于两组数据序列xi、yi(i=1,2,…,n),可以由下式计算出两组数据的相关系数:
① corrcoef(X,Y)
其中,X、Y是向量。得到的结果是一个2×2矩阵,其中对角线上的元素分别表示X和Y的自相关系数,非对角线上的元素分别表示X与Y的相关系数和Y与X的相关系数,两个是相等的。corrcoef(X,Y)与corrcoef([X,Y])等价。
② corrcoef(X)
对于一般的矩阵X,corrcoef(X)返回从矩阵X形成的一个相关系数矩阵。此相关系数矩阵的大小与矩阵X一样。系数矩阵中第i行第j列的元素代表原矩阵X中第i个列向量和第j个列向量的相关系数。
协方差
cov(A,B)
6.1.6 排序
对向量元素进行排序是一个经常性的操作,MATLAB中对向量X进行排序的函数是sort(X),函数返回一个对X中的元素按升序排列的向量。
sort函数也可以对矩阵A的各列或各行重新排序,其调用格式为:
[Y,I]=sort(A,dim,mode)
其中,Y是排序后的矩阵,而I记录Y中的元素在A中的位置。
dim指明对A的列还是行进行排序,若dim=1,则按列排;若dim=2,则按行排。dim默认取1。
mode指明按升序还是按降序排序,'ascend'按升序,'descend'按降序。mode默认取'ascend'。
6.2 多项式计算
6.2.1 多项式的四则运算
1.多项式的加减运算
c=a+b
2.多项式乘法运算
conv(P1,P2)
3.多项式除法
[Q,r]=deconv(P1,P2)
其中,Q返回商式,r返回余式。Q和r仍是多项式系数向量。
deconv是conv的逆函数,即有P1=conv(P2,Q)+r。
6.2.2 多项式的导函数
① p=polyder(P):求多项式P的导函数。
② p=polyder(P,Q):求P·Q的导函数。
③ [p,q]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q。
上述函数调用中,参数P、Q是多项式的向量表示,结果p、q也是多项式的向量表示。
6.2.3 多项式的求值
1.代数多项式求值
Y=polyval(P,x)
若x为一数值,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。
2.矩阵多项式求值
Y=polyvalm(P,x)
polyvalm函数要求x为方阵,它以方阵为自变量求多项式的值。设A为方阵,P代表多项式x3-5x2+8,那么polyvalm(P,A)的含义是:
A*A*A-5*A*A+8*eye(size(A))
而polyval(P,A)的含义是:
A.*A.*A-5*A.*A+8*ones(size(A))
6.2.4 多项式求根
x=roots(P)
其中,P为多项式的系数向量,求得的根赋给向量x,即x(1)、x(2)、…、x(n)分别代表多项式的n个根。
若已知多项式的全部根,则可以用poly函数建立起该多项式,其调用格式为:
P=poly(x)
若x为具有n个元素的向量,则poly(x)建立以x为其根的多项式,且将该多项式的系数赋给向量P。
6.3 数据插值
6.3.1 一维数据插值
如果被插值函数是一个单变量函数,则数据插值问题称为一维插值。一维插值采用的方法有线性方法、最近方法、3次多项式和3次样条插值。在MATLAB中,实现这些插值的函数是interp1,其调用格式为:
Y1=interp1(X,Y,X1,method)
method用于指定插值方法,允许的取值有:
① 'linear':线性插值。线性插值是默认的插值方法,它是把与插值点靠近的两个数据点用直线连接,然后在直线上选取对应插值点的数据。
② 'nearest':最近点插值。根据插值点与已知数据点的远近程度进行插值。插值点优先选择较近的数据点进行插值操作。
③ 'pchip':分段3次Hermite插值。MATLAB中有一个专门的3次Hermite插值函数pchip(X,Y,X1),其功能及使用方法与函数interp1(X,Y,X1,'pchip')相同。
④ 'spline':3次样条插值。所谓3次样条插值,是指在每个分段(子区间)内构造一个3次多项式,使其插值函数除满足插值条件外,还要求在各节点处具有光滑的条件。MATLAB中有一个专门的3次样条插值函数spline(X,Y,X1),其功能及使用方法与函数interp1(X,Y,X1,'spline')相同。
函数根据X、Y的值,计算函数在X1处的值。其中,X、Y是两个等长的已知向量,分别描述采样点和采样值。若同一个采样点有多种采样值,则Y可以为矩阵,Y的每一列对应一组采样。X1是一个向量或标量,描述欲插值的点,Y1是一个与X1等长的插值结果。
6.3.2 二维数据插值
当函数依赖于两个自变量变化时,其采样点就应该是一个由这两个参数组成的一个平面区域,插值函数也是一个二维函数。对依赖于两个参数的函数进行插值的问题称为二维插值问题。同样,在MATLAB中,提供了解决二维插值问题的函数interp2,其调用格式为:
Z1=interp2(X,Y,Z,X1,Y1,method)
其中,X、Y是两个向量,分别描述两个参数的采样点,Z是与参数采样点对应的函数值,X1、Y1是两个向量或标量,描述欲插值的点。Z1是根据相应的插值方法得到的插值结果。 method的取值与一维插值函数相同。X、Y、Z也可以是矩阵形式。
6.4 曲线拟合
1.曲线拟合原理
与数值插值类似,曲线拟合的目的也是用一个较简单的函数去逼近一个复杂的或未知的函数,所依据的条件都是在一个区间或一个区域上的有限个采样点的函数值。
数值插值要求逼近函数在采样点与被逼近函数相等,但由于实验或测量中的误差,所获得的数据不一定准确。在这种情况下,如果强求逼近函数通过各采样插值点,显然是不够合理的。
2.曲线拟合的实现
在MATLAB中,用polyfit函数来求得最小二乘拟合多项式的系数
polyfit函数的调用格式为:
P=polyfit(X,Y,m)
[P,S]=polyfit(X,Y,m)
[P,S,mu]=polyfit(X,Y,m)
再用polyval函数按所得的多项式计算所给出的点上的函数近似值。
函数根据采样点X和采样点函数值Y,产生一个m次多项式P及其在采样点的误差向量S。其中,X、Y是两个等长的向量,P是一个长度为m+1的向量,P的元素为多项式系数。mu是一个二元向量,mu(1)是mean(X),而mu(2)是std(X)。
可以用polyval函数按所得的多项式计算X各点上多项式的值。
第五章 绘图
5.1 二维图形
5.1.1 绘制二维曲线的基本函数
1. plot函数的基本用法
plot(x,y)
其中x和y为长度相同的向量,分别用于存储x坐标和y坐标数据
2.含多个输入参数的plot函数
plot(x1,y1,x2,y2,…,xn,yn)
3.含选项的plot函数
plot(x1,y1,选项1,x2,y2, 选项2,…,xn,yn,选项n)
说明:
(1)当x是向量,y是矩阵时,x的长度与矩阵y的行数或列数必须相等。如果x的长度等于y的行数,则以x和y的每列为横、纵坐标绘制曲线,曲线的条数等y的列数。如果x的长度等于y的列数,则以x和y的每行为横、纵坐标绘制曲线,曲线的条数等y的行数。
(2)当x、y是同维矩阵时,则以x、y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
(3)plot函数最简单的调用格式是只包含一个输入参数
plot(x)
4.双纵坐标函数plotyy
它能把函数值具有不同量纲、不同数量级的两个函数绘制在同一坐标中。
plotyy(x1,y1,x2,y2)
其中x1-y1对应一条曲线,x2-y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1-y1数据对,右纵坐标用于x2-y2数据对。
绘制图形的辅助操作
图形标注
title(图形名称)
xlabel(x轴说明)
ylabel(y轴说明)
text(x,y,图形说明)
legend(图例1,图例2,...)
坐标控制
axis([xmin,xmax,ymin,ymax,zmin,zmax])
axis equal
横纵等长坐标轴
axis square
正方形坐标系
axis auto
默认设置
axis off
取消坐标轴
axis on
显示坐标轴
grid on/off:画网格线
box on/off : 加边框线
图形保持
hold on/off : 保持/刷新原有图像
图形窗口的分割
subplot(m,n,p)
5.2 其他形式的二维图形
1. 对函数自适应采样的绘图函数
1. fplot(fname,lims,tol,选项)
filename代表一个函数,通常采用函数句柄形式,或字符串形式
lims为x轴的取值范围,默认[-5,5]
选项是样式
2. 其他坐标系下的二维曲线图
2.1. 对数坐标图形
对数
loglog(x1,y1,选项1,x2,y2,选项2,…)
半对数
semilogx(x1,y1,选项1,x2,y2,选项2,…)
semilogy(x1,y1,选项1,x2,y2,选项2,…)
2.2. 极坐标
polar(theta,rho,选项)
theta 是极角(以弧度单位指定);rho是极径
3. 其他特殊二维图形
1||| 其他形式的线性直角坐标图
1. 条形图
1||| 水平
barh(y)
若y为向量:分别显示每个分量的高度,横坐标为y的下标
若y为矩阵:分别表示y的每一行元素大小,横坐标为矩阵的行数
2||| 垂直
bar(y)
若y为向量:分别显示每个分量的高度,横坐标为y的下标
若y为矩阵:分别表示y的每一行元素大小,横坐标为矩阵的行数
bar(x,y,选项)
簇状分组:grouped(默认)
堆积分组:stacked
2. 直方图
1||| hist函数:分别用于绘制直角坐标系下的直方图和极坐标系下的直方图
hist(y[,x])
x
x是标量:统计区间被分成x个小区间
x是向量:区间数
没有x:默认分成10组
y
向量:等分,并统计每个区间元素个数
矩阵:每一列作为一个向量
2||| rose函数(也称为玫瑰花图)
rose(theta[,x])
每一区间长度反应落入该区间的元素个数
x是标量:在[0,2pi]区间画出x个等距小扇形,x可以省略,默认20
x是向量:x指定分组中心值,x中元素的个数为数据分组数
2||| 面积类图形
1||| 饼图
pie(x,explode)
explode非零时
2||| 面积统计图
面积统计图反映数量变化的趋势,在实际中可以表现不同部分对整体的影响
① area(x)。
② area(x,y)
3||| 实心图
实心图是将数据的起点和终点连成多边形,并填充颜色
fill(x,y,颜色)
3||| 散点类图形
1||| 散点图
scatter(x,y,['filled'],[颜色])
2||| 阶梯图
stairs(x,y,选项)
3||| 杆图
stem(x,y,选项)
4||| 矢量类图形
1||| 罗盘图
罗盘图表示起点为坐标原点的向量,同时还在坐标系中显示圆形的分隔线。
① compass(x,y) 。
② compass(z)
2||| 羽毛图
① feather(x,y) 。
② feather(z) 。
3||| 箭头图
quiver([x,y,]u,v)
5.3 三维图形
5.3.1 绘制三维曲线的基本函数
plot3将二维绘图函数plot的有关功能扩展到三维空间。
plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n)
同长度的向量
构成一条曲线
同型矩阵
每列构成一条曲线
标注坐标轴和网格线
xlabel('X'),ylabel('Y'),zlabel('Z');grid;
标注原点
text(0,0,0,'origin');
5.3.2 三维曲面
1.平面网格坐标矩阵的生成
(1)利用矩阵运算生成。
(2)利用meshgrid函数生成。
2. 绘制三维曲面的函数
mesh(x,y,z,c)
surf(x,y,z,c)
3. 标准三维曲面
[x,y,z]=sphere(n)
[x,y,z]=cylinder(R,n)
多峰函数peaks(n)
5.2.3 其他三维图形
1.三维条形图
bar3(y)
bar3(x,y)
2.三维饼图
pie3(x,explode)
3.三维实心图
fill3(x,y,z,c)
4.三维散点图
scatter3(x,y,z,c)
5.三维杆图
stem3(z)
stem3(x,y,z)
6.三维箭头图
quiver3(x,y,z,u,v,w)
5.4 隐函数()绘图
5.4.1 隐函数二维绘图
(1) 对于函数f = f(x),ezplot函数的调用格式为:
在默认区间-2π<x<2π绘制f = f(x)的图形。
ezplot(f)
在区间a<x<b绘制f = f(x)的图形。
ezplot(f, [a,b])
(2) 对于隐函数f =f(x,y),ezplot函数的调用格式为:
在默认区间-2π<x<2π和-2π<y<2π绘制f(x,y) = 0的图形。
ezplot(f)
在区间xmin<x<xmax和ymin<y<ymax绘制f(x,y) = 0的图形。
ezplot(f, [xmin,xmax,ymin,ymax])
在区间a<x<b和a<y< b绘制f(x,y) = 0的图形。
ezplot(f, [a,b])
(3) 对于参数方程x = x(t)和y = y(t),ezplot函数的调用格式为:
在默认区间0<t<2π绘制x=x(t)和y=y(t)的图形。
ezplot(x,y)
在区间tmin < t < tmax绘制x=x(t)和y=y(t)的图形。
ezplot(x,y, [tmin,tmax])
5.4.2 隐函数三维绘图
绘制曲面z=f(x,y),其中f的表示方法与ezplot函数相同。x、y取默认范围-2π<x<2π,-2π<y<2π。
① ezsurf(f)
在指定的区间绘制曲面z=f(x,y)。
② ezsurf(f,[xmin,xmax,ymin,ymax])或ezsurf(f,[min,max])
在默认区域-2π<s<2π,-2π<t<2π上绘制参数方程x=x(s,t),y=y(s,t),z=z(s,t)的曲面。
③ ezsurf(x,y,z)
④ ezsurf(x,y,z,[smin,smax,tmin,tmax])或ezsurf(x,y,z,[min,max])
如果方程F(x,y)=0能确定y是x的函数,那么称这种方式表示的函数是隐函数。
5.5 图形修饰处理
5.5.1 视点处理
view(az,el)
其中az为方位角,el为仰角,它们均以度为单位。系统缺省的视点定义为方位角-37.5°,仰角30°
5.3.2 色彩处理
1. 颜色的向量表示
2. 色图
色图是m×3 的数值矩阵,它的每一行是RGB三元组。色图矩阵可以人为地生成,也可以调用MATLAB提供的函数来定义色图矩阵。
P=gray(100)生成64×3色图矩阵,表示的颜色是灰色由浓到淡
除plot及其派生函数外,mesh、surf等函数均使用色图着色。图形窗口色图的设置和改变,使用函数:
colormap(m)
其中m代表色图矩阵。
3. 三维表面图形的着色
三维表面图实际上就是在网格图的每一个网格片上涂上颜色。surf函数用缺省的着色方式对网格片着色。除此之外,还可以用shading命令来改变着色方式。
① shading faceted:将每个网格片用其高度对应的颜色进行着色,但网格线仍保留着,其颜色是黑色。这是系统的默认着色方式。
② shading flat:将每个网格片用同一个颜色进行着色,且网格线也用相应的颜色,从而使得图形表面显得更加光滑。
③ shading interp:在网格片内采用颜色插值处理,得出的表面图显得最光滑。
5.5.3 图形的裁剪处理
5.6 图像处理与动画制作
5.6.1 图像处理
1.图像的读/写
要在MATLAB中使用不同格式的图像,需要用imread函数读取该图像,即将图像文件读入MATLAB工作空间。imread函数的调用格式与功能为:
① x=imread(filename,fmt)
② [x,map]=imread(filename,fmt)
2.图像的显示
image(x)
与image函数类似的函数是imagesc,它的调用格式和功能都与image函数一样,只是图像着色方式不同。
为了保证图像的显示效果,一般还应使用colormap函数设置图像色图。
5.6.2 动画制作
1.制作逐帧动画
① getframe函数:可截取一幅画面信息(称为动画中的一帧),一幅画面信息形成一个很大的列向量。显然,保存n幅图面就需一个大矩阵。
② moviein(n)函数:用来建立一个足够大的n列矩阵。该矩阵用来保存n幅画面的数据,以备播放。之所以要事先建立一个大矩阵,是为了提高程序运行速度。
③ movie(m,n)函数:播放由矩阵m所定义的画面n次,默认时播放一次。
2.创建轨迹动画
MATLAB提供了comet和comet3函数展现质点在二维平面和三维空间的运动轨迹,这种轨迹曲线称为彗星轨迹曲线。函数调用格式为:
comet(x,y,p)
comet3(x,y,z,p)
5.7 交互式绘图工具
5.7.1 “绘图”选项卡
第三章——矩阵处理
通用的特殊矩阵
零矩阵:zeros
全一矩阵:ones
单位矩阵:eye
零一区间均匀分布的随机矩阵:rand
均值为0方差为1的标准正态分布随机矩阵:
randn
用于专门学科的特殊矩阵
魔方矩阵
magic(n)
每行每列正负对角线的元素和都相等
对于n阶魔方阵,其元素由1,2,3,…,n2共n2个整数组成
范德蒙矩阵
vander(V)
矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。
可以用一个指定向量生成一个范得蒙矩阵
希尔伯特矩阵
hilb(n)
专门求逆矩阵(比较可靠)
invhilb(n)
托普利兹矩阵
托普利兹(Toeplitz)矩阵除第一行第一列外,其他每个元素都与左上角的元素相同。
toeplitz(x:y)
伴随矩阵
p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后
compan(p)
帕斯卡矩阵
pascal(x)
副对角线系数是二项展开式的系数
二次项(x+y)n展开后的系数随n的增大组成一个三角形表,称为杨辉三角形。由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵
矩阵变换
对角阵与三角阵
对角阵
提取矩阵对角线元素
diag(A)
提取矩阵A主对角线元素
diag(A,k)
其功能是提取第k条对角线的元素。
构造对角阵
diag(V):V是列向量
将产生一个m×m对角矩阵,其主对角线元素即为向量V的元素
D=diag(1:5)
diag(V,k),其功能是产生一个n×n(n=m+|k|)对角阵,其第k条对角线的元素即为向量V的元素
D=diag(1:5,2)
三角阵
上三角阵
triu(A)
triu(A,k)提取第k条对角线以上的元素
下三角阵
tril(A)
tril(A,k)提取第k条对角线以下的元素
矩阵的转置与旋转
矩阵的转置
共轭转置
单引号(')
转置
小数点后面接单引号(.')
矩阵的旋转
逆时针
rot90(A,k)变成原来的k倍
矩阵的左右翻转
fliplr(A)
矩阵的上下翻转
flipud(A)
矩阵的逆与伪逆
矩阵的逆
inv(A)
用矩阵求逆方法求解线性方程组
x=A的逆*b
矩阵的伪逆
当A不是方阵 或是一个 非满秩方阵时 ,不存在逆矩阵,存在伪逆矩阵
但可以找到一个与A的转置矩阵A'同型的矩阵B
B=pinv(A)
矩阵求值
方阵的行列式
行列式的值
det(A)
矩阵的秩与迹
秩:rank(A)
迹:trace(A)
向量和矩阵的范数
向量范数
1范数:向量元素绝对值之和
norm(V,1)
2范数:向量元素绝对值的平方和的平方根
norm(V,2)
默认:norm(V)
无穷范数:所有向量元素绝对值中的最大值
norm(V,inf)
矩阵范数
1范数:矩阵各列元素绝对值之和的最大值
2范数:最大特征值的平方根
3范数:矩阵各行元素绝对值之和中的最大值
矩阵的条件数
意义:A的范数与A的逆矩阵的范数的乘积
调用
cond(A,1) 计算A的1—范数下的条件数
cond(A)或cond(A,2) 计算A的2—范数数下的条件数
cond(A,inf) 计算A的 ∞—范数下的条件数
越接近1,矩阵的性能越好
矩阵的特征值和特征向量
E=eig(A)
全部特征值,构成向量E
[V,D]=eig(A)
特征值构成对角阵D
特征向量构成V的列向量
[V,D]=eig(A,‘nobalance’):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量
求多项式零点
X=roots(p)
稀疏矩阵
矩阵的存储方式
完全存储方式
将矩阵的全部元素按列存储
稀疏存储方式
仅存储矩阵所有的非零元素的值及其位置,即行号和列号
稀疏存储方式的产生
将完全存储方式转化为稀疏存储方式
①sparse(m,n):生成一个m×n的所有元素都是0的稀疏矩阵
② sparse(u,v,S):其中u、v、S是3个等长的向量。S是要建立的稀疏矩阵的非零元素,u(i)、v(i)分别是S(i)的行和列下标,该函数建立一个max(u)行、max(v)列并以S为稀疏元素的稀疏矩阵
有一些和稀疏矩阵操作有关的函数
① [u,v,S]=find(A):返回矩阵A中非零元素的下标和元素。这里产生的u、v、S可作为sparse(u,v,S)的参数
② full(A):返回和稀疏存储矩阵A对应的完全存储方式矩阵
产生稀疏存储矩阵
B=spconvert(A)
稀疏矩阵应用举例
带状稀疏存储矩阵
spdiags函数的其他调用格式有
① [B,d]=spdiags(A):从原带状矩阵A中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d
② B=spdiags(A,d):从原带状矩阵A中提取由向量d所指定的那些非零对角线元素构成的矩阵B
③ E=spdiags(B,d,A):在原带状矩阵A中将由向量d所指定的那些非零对角线元素用矩阵B替代,构成一个新的带状矩阵E。若赋值号左边改为A,则矩阵A为经过替换后的新稀疏矩阵
第四章 MATLAB程序流程控制
4.1 M文件
MATLAB提供的文本编辑器
建立新的M文件
① 在MATLAB主窗口选择“主页”选项卡,在“文件”命令组中单击“新建脚本”命令按钮
② 在MATLAB命令行窗口输入命令:
edit 文件名
③ 在命令历史窗口选中一些命令,然后从右键快捷菜单中选择“创建脚本”命令,并在编辑区中加入所选中的命令
打开已有的M文件
(1) 菜单操作。
在MATLAB主窗口选择“主页”选项卡,在“文件”命令组中单击“打开”命令按钮,再从弹出的下拉菜单中选择“打开”命令,从“打开”对话框中选择所需打开的M文件
(2) 命令操作。
在MATLAB命令窗口输入命令:edit 文件名,则打开指定的M文件。
(3) 命令按钮操作。
单击MATLAB主窗口工具栏上的Open File命令按钮,再从弹出的对话框中选择所需打开的M文件。
脚本文件和函数文件的主要区别
① 脚本文件没有输入参数,也不返回输出参数,
而函数文件可以带输入参数,也可返回输出参数。
② 脚本文件对MATLAB工作空间中的变量进行操作,文件中所有命令的执行结果也完全返回到工作空间中,
而函数文件中定义的变量为局部变量,当函数文件执行完毕时,这些变量被清除。
③ 脚本文件可以直接运行,在MATLAB命令行窗口输入脚本文件的名字,就会顺序执行脚本文件中的命令,
而函数文件不能直接运行,而要以函数调用的方式来调用它。
4.2 程序控制结构
4.2.1 顺序结构
1.数据的输入
从键盘输入数据,则可以使用input函数来进行,该函数的调用格式为:
其中提示信息为一个字符串,用于提示用户输入什么样的数据。
如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如:
xm=input('What''s your name?','s');
MATLAB提供的命令窗口输出函数主要有disp函数,其调用格式为
disp(输出项)
2.数据的输出
其中输出项既可以为字符串,也可以为矩阵。
暂停程序的执行可以使用pause函数,其调用格式为:
pause(延迟秒数)
如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。
若要强行中止程序的运行可使用Ctrl+C命令。
3.程序的暂停
函数文件由function语句引导,其基本结构为:
function 输出形参表=函数名(输入形参表)
其中以function开头的一行为引导行,表示该M文件是一个函数文件。函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于一个时,则应该用方括号括起来。
注释说明部分
函数体语句
[输出实参表]=函数名(输入实参表)
4.3 函数文件
4.3.1 函数文件的基本结构
4.3.2 函数调用
1.函数调用的一般格式是:
直角坐标与极坐标之间的转换
[th,r]=cart2pol(x,y)
[x,y]=pol2cart(th,r)
要注意的是,函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。
2.函数的递归调用
在MATLAB中,函数可以嵌套调用,即一个函数可以调用别的函数,甚至调用它自身。一个函数调用它自身称为函数的递归调用。
在调用函数时,MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。
4.3.3 函数参数的可调性
4.3.4 全局变量与局部变量
函数文件中的变量是局部的,即在一个函数文件中定义的变量不能被另一个函数文件引用。如果在若干函数中都把某一变量定义为全局变量,那么这些函数将共用这个变量,作用域是整个工作空间,即全程有效。
全局变量用global命令定义,格式为:
global 变量名
4.4特殊形式的函数
1. 子函数
在MATLAB中,可以在一个M文件中同时定义多个函数,其中M文件中出现的第一个函数称为主函数(primary function),其他函数称为子函数(subfunction),但需要注意的是子函数只能由同一M文件中的函数调用。在保存M文件时,M文件名一般和主函数名相同,外部程序只能对主函数进行调用。
2. 内联函数
以字符串形式存在的函数表达式可以通过inline函数转化成内联函数。
3. 匿名函数
匿名函数的基本格式如下:
匿名函数名=@(输入参数) 匿名函数表达式
函数句柄:
函数句柄变量=@函数名
4.5程序调试与优化
4.5.1 程序调试方法
一般来说,应用程序的错误有两类,一类是语法错误,另一类是运行时的错误。
语法错误包括词法或文法的错误,例如函数名的拼写错、表达式书写错等。
4.5.2 程序性能分析与优化
1.程序性能分析
2. 程序优化
(1)采用向量化运算
在实际MATLAB程序设计中,为了提高程序的执行速度,常用向量或矩阵运算来代替循环操作。
(2)预分配内存空间
通过在循环之前预分配向量或数组的内存空间可以提高for循环的处理速度。
(3)减小运算强度
在实现有关运算时,尽量采用运算量更小的运算,从而提高运算速度。一般来说,乘法比乘方运算快,加法比乘法运算快。
第6章 MATLAB数据分析与多项式计算
6.1 数据统计分析
6.1.1 最大值和最小值
1.求向量的最大值和最小值
求向量X的最大值的函数有两种调用格式,分别是:
① y=max(X):返回向量X的最大值,并存入y。如果X中包含复数元素,则按模取最大值。
② [y,k]=max(X):返回向量X的最大值,并存入y,最大值的序号存入k。如果X中包含复数元素,则按模取最大值。
求向量X的最小值的函数是min(X),用法和max(X)相同。
2.求矩阵的最大值和最小值
求矩阵A的最大值的函数:
① max(A):每列的最大值
② [Y,U]=max(A):返回行向量Y和U,Y每列的最大值,U最大值的行号
③ max(A,[],dim):dim取1或2。dim取1时,该函数和max(A)等价;dim取2时,取每行最大值
④ [Y,U]=max(A,[],2):返回行向量Y和U,Y每行的最大值,U最大值的列号
求矩阵最小值的函数是min,其用法和max函数相同。
3.两个向量或矩阵对应元素的比较
函数max和min还能对两个同型的向量或矩阵进行比较,调用格式为:
① U=max(A,B):A、B是两个同型的向量或矩阵,结果U是与A、B同型的向量或矩阵,U的每个元素等于A、B对应元素的较大者。
② U=max(A,n):n是一个标量,结果U是与A同型的向量或矩阵,U的每个元素等于A对应元素和n中的较大者。
min函数的用法和max函数相同。
6.1.2 求和与求积
数据序列求和用sum函数。设X是一个向量,A是一个矩阵,sum函数的调用格式为:
① sum(X):返回向量X各元素的和。
③ sum(A):返回一个行向量,各列元素之和
⑤ sum(A,2):返回一个列向量,各行元素之和
数据序列求积用prod函数,其使用方法与sum函数相同。
② prod(X):返回向量X各元素的乘积。
④ prod(A):返回一个行向量,各列元素之积
⑥ prod(A,2):返回一个列向量,各行元素之积
6.1.3 平均值和中值
求矩阵和向量元素的平均值的函数是mean。设X是一个向量,A是一个矩阵,函数的调用格式为:
① mean(X):返回向量X的算术平均值。
② mean(A):返回一个行向量,其第i个元素是A的第i列的算术平均值。
③ mean(A,dim):当dim为1时,该函数等同于mean(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的算术平均值。
求中值的函数是median,其调用方法和mean函数相同。
6.1.4 累加和与累乘积
在MATLAB中,使用cumsum和cumprod函数能方便地求得向量和矩阵元素的累加和与累乘积向量,它们的调用格式相同,其中cumsum函数的调用格式为:
① cumsum(X):返回向量X累加和向量。
② cumsum(A):返回一个矩阵,其第i列是A的第i列的累加和向量。
③ cumsum(A,dim):当dim为1时,该函数等同于cumsum(A);当dim为2时,返回一个矩阵,其第i行是A的第i行的累加和向量。
6.1.5 标准差与相关系数
1.标准差
对于矩阵A,std(A)返回一个行向量,它的各个元素便是矩阵A各列或各行的标准方差。std函数的一般调用格式为:
Y=std(A,flag,dim)
①当dim=1时,求各列元素的标准差;当dim=2时,则求各行元素的标准差。
②当flag=0时,按S1所列公式计算标准差;当flag=1时,按S2所列公式计算标准差。
默认取flag=0,dim=1。
对于向量X,std(X)返回一个标准差。
2.相关系数
对于两组数据序列xi、yi(i=1,2,…,n),可以由下式计算出两组数据的相关系数:
① corrcoef(X,Y)
其中,X、Y是向量。得到的结果是一个2×2矩阵,其中对角线上的元素分别表示X和Y的自相关系数,非对角线上的元素分别表示X与Y的相关系数和Y与X的相关系数,两个是相等的。corrcoef(X,Y)与corrcoef([X,Y])等价。
② corrcoef(X)
对于一般的矩阵X,corrcoef(X)返回从矩阵X形成的一个相关系数矩阵。此相关系数矩阵的大小与矩阵X一样。系数矩阵中第i行第j列的元素代表原矩阵X中第i个列向量和第j个列向量的相关系数。
协方差
cov(A,B)
6.1.6 排序
对向量元素进行排序是一个经常性的操作,MATLAB中对向量X进行排序的函数是sort(X),函数返回一个对X中的元素按升序排列的向量。
sort函数也可以对矩阵A的各列或各行重新排序,其调用格式为:
[Y,I]=sort(A,dim,mode)
其中,Y是排序后的矩阵,而I记录Y中的元素在A中的位置。
dim指明对A的列还是行进行排序,若dim=1,则按列排;若dim=2,则按行排。dim默认取1。
mode指明按升序还是按降序排序,'ascend'按升序,'descend'按降序。mode默认取'ascend'。
6.2 多项式计算
6.2.1 多项式的四则运算
1.多项式的加减运算
c=a+b
2.多项式乘法运算
conv(P1,P2)
3.多项式除法
[Q,r]=deconv(P1,P2)
其中,Q返回商式,r返回余式。Q和r仍是多项式系数向量。
deconv是conv的逆函数,即有P1=conv(P2,Q)+r。
6.2.2 多项式的导函数
① p=polyder(P):求多项式P的导函数。
② p=polyder(P,Q):求P·Q的导函数。
③ [p,q]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q。
上述函数调用中,参数P、Q是多项式的向量表示,结果p、q也是多项式的向量表示。
6.2.3 多项式的求值
1.代数多项式求值
Y=polyval(P,x)
若x为一数值,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。
2.矩阵多项式求值
Y=polyvalm(P,x)
polyvalm函数要求x为方阵,它以方阵为自变量求多项式的值。设A为方阵,P代表多项式x3-5x2+8,那么polyvalm(P,A)的含义是:
A*A*A-5*A*A+8*eye(size(A))
而polyval(P,A)的含义是:
A.*A.*A-5*A.*A+8*ones(size(A))
6.2.4 多项式求根
x=roots(P)
其中,P为多项式的系数向量,求得的根赋给向量x,即x(1)、x(2)、…、x(n)分别代表多项式的n个根。
若已知多项式的全部根,则可以用poly函数建立起该多项式,其调用格式为:
P=poly(x)
若x为具有n个元素的向量,则poly(x)建立以x为其根的多项式,且将该多项式的系数赋给向量P。
6.3 数据插值
6.3.1 一维数据插值
如果被插值函数是一个单变量函数,则数据插值问题称为一维插值。一维插值采用的方法有线性方法、最近方法、3次多项式和3次样条插值。在MATLAB中,实现这些插值的函数是interp1,其调用格式为:
Y1=interp1(X,Y,X1,method)
method用于指定插值方法,允许的取值有:
① 'linear':线性插值。线性插值是默认的插值方法,它是把与插值点靠近的两个数据点用直线连接,然后在直线上选取对应插值点的数据。
② 'nearest':最近点插值。根据插值点与已知数据点的远近程度进行插值。插值点优先选择较近的数据点进行插值操作。
③ 'pchip':分段3次Hermite插值。MATLAB中有一个专门的3次Hermite插值函数pchip(X,Y,X1),其功能及使用方法与函数interp1(X,Y,X1,'pchip')相同。
④ 'spline':3次样条插值。所谓3次样条插值,是指在每个分段(子区间)内构造一个3次多项式,使其插值函数除满足插值条件外,还要求在各节点处具有光滑的条件。MATLAB中有一个专门的3次样条插值函数spline(X,Y,X1),其功能及使用方法与函数interp1(X,Y,X1,'spline')相同。
函数根据X、Y的值,计算函数在X1处的值。其中,X、Y是两个等长的已知向量,分别描述采样点和采样值。若同一个采样点有多种采样值,则Y可以为矩阵,Y的每一列对应一组采样。X1是一个向量或标量,描述欲插值的点,Y1是一个与X1等长的插值结果。
6.3.2 二维数据插值
当函数依赖于两个自变量变化时,其采样点就应该是一个由这两个参数组成的一个平面区域,插值函数也是一个二维函数。对依赖于两个参数的函数进行插值的问题称为二维插值问题。同样,在MATLAB中,提供了解决二维插值问题的函数interp2,其调用格式为:
Z1=interp2(X,Y,Z,X1,Y1,method)
其中,X、Y是两个向量,分别描述两个参数的采样点,Z是与参数采样点对应的函数值,X1、Y1是两个向量或标量,描述欲插值的点。Z1是根据相应的插值方法得到的插值结果。 method的取值与一维插值函数相同。X、Y、Z也可以是矩阵形式。
6.4 曲线拟合
1.曲线拟合原理
与数值插值类似,曲线拟合的目的也是用一个较简单的函数去逼近一个复杂的或未知的函数,所依据的条件都是在一个区间或一个区域上的有限个采样点的函数值。
数值插值要求逼近函数在采样点与被逼近函数相等,但由于实验或测量中的误差,所获得的数据不一定准确。在这种情况下,如果强求逼近函数通过各采样插值点,显然是不够合理的。
2.曲线拟合的实现
在MATLAB中,用polyfit函数来求得最小二乘拟合多项式的系数
polyfit函数的调用格式为:
P=polyfit(X,Y,m)
[P,S]=polyfit(X,Y,m)
[P,S,mu]=polyfit(X,Y,m)
再用polyval函数按所得的多项式计算所给出的点上的函数近似值。
函数根据采样点X和采样点函数值Y,产生一个m次多项式P及其在采样点的误差向量S。其中,X、Y是两个等长的向量,P是一个长度为m+1的向量,P的元素为多项式系数。mu是一个二元向量,mu(1)是mean(X),而mu(2)是std(X)。
可以用polyval函数按所得的多项式计算X各点上多项式的值。
第7章 MATLAB数值微分与积分
7.2 数值积分
7.2.1 数值积分基本原理
一般选择被积函数的插值多项式充当这样的替代函数。选择的插值多项式的次数不同,就形成了不同的数值积分公式。
7.2.2 数值积分的实现
1.变步长辛普森法
MATLAB给出了quad函数和quadl函数来求定积分。函数的调用格式为:
[I,n]=quad(filename,a,b,tol,trace)
[I,n]=quadl(filename,a,b,tol,trace)
trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,
默认时取trace=0;
a和b分别是定积分的下限和上限,tol用来控制积分精度,
默认时取tol=10-6;
其中,filename是被积函数名;返回参数I即定积分值,n为被积函数的调用次数。
积分限[a,b]必须是有限的,不能为无穷大(Inf);
2.自适应积分法
MATLAB提供了基于全局自适应积分算法的integral函数来求定积分,函数的调用格式为:
I=integral(filename,a,b)
其中,I是计算得到的积分;filename是被积函数;
a和b分别是定积分的下限和上限,积分限可以为无穷大 。
3.高斯-克朗罗德法
MATLAB提供了基于自适应高斯-克朗罗德法的quadgk函数来求振荡函数的定积分。该函数的调用格式为
[I,err]=quadgk(filename,a,b)
其中,err返回近似误差范围,其他参数的含义和用法与quad函数相同。
积分上下限可以是−Inf或Inf,也可以是复数。如果积分上下限是复数,则quadgk在复平面上求积分。
4.梯形积分法(函数关系表达式往往是不知道的)
在科学实验和工程应用中,函数关系表达式往往是不知道的,只有实验测定的一组样本点和样本值,这时,人们就无法使用quad等函数计算其定积分。在MATLAB中,对由表格形式定义的函数关系的求定积分问题用梯形积分函数trapz,其调用格式为:
I=trapz(X,Y)
其中,向量X、Y定义函数关系Y = f(X)。X、Y是两个等长的向量:X = (x1,x2,…,xn),Y = (y1,y2,…,yn),并且x1<x2<…<xn,积分区间是[x1,xn]。
5.累计梯形积分
在MATLAB中,提供了对数据积分逐步累计的函数cumtrapz。该函数调用格式如下。
Z=cumtrapz(Y)
Z=cumtrapz(X,Y)
对于向量Y,Z是一个与Y等长的向量;对于矩阵Y,Z是一个与Y相同大小的矩阵,累计计算Y每列的积分。函数其他参数的含义和用法与trapz函数的相同。
7.2.3 多重定积分的数值求解
重积分的被积函数是二元函数或三元函数,积分范围是平面上的一个区域或空间中的一个区域。MATLAB提供的integral2、quad2d、dblquad函数用于求二重定积分的数值解,integral3、triplequad函数用于求三重定积分的数值解。函数的调用格式为:
I=integral2(filename,a,b,c,d)
I=quad2d(filename,a,b,c,d)
I=dblquad(filename,a,b,c,d,tol)
I=integral3(filename,a,b,c,d,e,f)
I=triplequad(filename,a,b,c,d,e,f,tol)
7.3 离散傅里叶变换
7.3.1 离散傅里叶变换算法简介
MATLAB提供了一套计算快速傅里叶变换的函数,它们包括求一维、二维和N维离散傅里叶变换函数fft、fft2和fftn,还包括求上述各维离散傅里叶变换的逆变换函数ifft、ifft2和ifftn等。
7.3.2 离散傅里叶变换的实现
MATLAB提供了对向量或直接对矩阵进行离散傅里叶变换的函数。下面只介绍一维离散傅里叶变换函数,其调用格式为:
① fft(X):返回向量X的离散傅里叶变换。对于矩阵X,fft(X)应用于矩阵的每一列。
设X的长度(即元素个数)为N,若N为2的幂次,则为以2为基数的快速傅里叶变换,否则为运算速度很慢的非2幂次的算法。
② fft(X,N):计算N点离散傅里叶变换。对于矩阵X,它同样应用于矩阵的每一列,只是限定了每一列的长度为N。
它限定向量的长度为N,若X的长度小于N,则不足部分补上零;若大于N,则删去超出N的那些元素。
③ fft(X,[],dim)或fft(X,N,dim):这是对于矩阵而言的函数调用格式,前者的功能与fft(X)基本相同,而后者则与fft(X,N)基本相同。
只是当参数dim=1时,该函数作用于X的每一列;当dim=2时,则作用于X的每一行。
7.1 数值微分
7.1.1 数值差分与差商
任意函数f(x)在x点的导数是通过极限定义的:
7.1.2 数值微分的实现
有两种方式计算任意函数f(x)在给定点x的数值导数:
第一种方式是用多项式或样条函数g(x)对f(x)进行逼近(插值或拟合),然后用逼近函数g(x)在点x处的导数作为f(x)在点x处的导数;
第二种方式是用f(x)在点x处的某种差商作为其导数。
在MATLAB中,没有直接提供求数值导数的函数,只有计算向前差分的函数diff,其调用格式为:
① DX=diff(X):计算向量X的向前差分,DX(i)=X(i+1)-X(i),i=1,2,…,n-1。
② DX=diff(X,n):计算X的n阶向前差分。例如,diff(X,2)=diff(diff(X))。
③ DX=diff(A,n,dim):计算矩阵A的n阶差分,dim=1时(默认状态),按列计算差分;dim=2,按行计算差分。