第2章 数值计算与多项式计算
2.1 数值计算
1.求最大值和最小值
max(A):如果A是向量,则返回向量A的最大值。如果A中包含复数元素,则按模取最大值。如果A是矩阵,则返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。
[Y,U]=max(A):如果A是向量,则返回向量A的最大值存入Y,最大值的序号存入U。如果A中包含复数元素,则按模取最大值。如果A是矩阵,则Y向量记录A的每列的最大值,U向量记录每列最大值的行号。
max(A,[ ],dim):仅用于矩阵。dim取1或2。dim取1时,该函数和max(A)完全相同;dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大值。
2.求和与求积
数据序列求和的函数是sum。sum函数的调用格式如下。
sum(A):如果A是一个向量,则返回向量各元素的和。如果A是一个矩阵,则返回一个行向量,其第i个元素是A的第i列的元素和。
sum(A,dim):当dim为1时,该函数等同于sum(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的各元素之和。
数据序列求积的函数是prod,其用法和sum完全相同。
3.平均值和中值
数据序列的平均值指的是算术平均值。中值是指在数据序列中其值的大小恰好处在中间的元素。例如
数据序列 ?2,5,7,9,12的中值为7
如果数据为偶数个,则中值等于中间的两项之平均值。例如,数据序列 ?2,5,6,7,9,12中,处于中间的数是6和7,故其中值为此两数之平均值6.5。
求数据序列平均值的函数是mean,mean函数的调用格式如下。
mean(A):如果A是一个向量,则返回向量的算术平均值。如果A是一个矩阵,则返回一个行向量,其第i个元素是A的第i列的算术平均值。
mean(A,dim):当dim为1时,该函数等同于mean(A);当dim为2时,返回一个列
1
向量,其第i个元素是A的第i行的算术平均值。
求数据序列中值的函数是median,其用法和mean完全相同。
4.累加和与累乘积
所谓累加和或累乘积,是指从数据序列的第1元素开始直到当前元素进行累加或累乘,作为结果序列的当前元素值。
在MATLAB中,使用cumsum和cumprod函数求得向量和矩阵元素的累加和与累乘积向量。cumsum函数的调用格式如下。
cumsum(A):如果A是一个向量,则返回向量的累加和。如果A是一个矩阵,则返回一个矩阵,其第i列是A的第i列的累加和向量。
cumsum(A,dim):当dim为1时,该函数等同于cumsum(A);当dim为2时,返回一个矩阵,其第i行是A的第i行的累加和向量。
求累乘积的函数是cumprod,其用法和cumsum完全相同。
5.标准方差与相关系数 (a).求标准方差
方差描述了一组数据波动的大小,方差越小,数据波动越小。在MATLAB中,提供了计算数据序列的标准方差的函数std。对于向量X,std(X)返回一个标准方差。对于矩阵A,std(A)返回一个行向量,它的各个元素便是矩阵A各列或各行的标准方差。std函数的一般调用格式为
Y=std(A,flag,dim)
其中flag取0或1,当flag=0时,按σ1所列公式计算标准方差;当flag=1时,按σ2所列公式计算标准方差。dim取1或2,当dim=1时,求各列元素的标准方差;当dim=2时,则求各行元素的标准方差。默认flag=0,dim=1。
(b).相关系数
相关系数用来衡量两组数据之间的线性相关程度。 corrcoef函数用于求数据的相关系数矩阵。 corrcoef(X,Y):求向量X和Y的相关系数。
corrcoef(X):返回从矩阵X形成的一个相关系数矩阵。它把矩阵X的每列作为一个变量,然后求它们的相关系数。
6.排序
MATLAB提供了对向量X进行排序的函数sort(X),函数返回一个对X中的元素按升序排列的新向量。
2
sort函数也可以对矩阵A的各列或各行重新排序,其调用格式为 [Y,I]=sort(A,dim,mode)
其中Y是排序后的矩阵,而I记录Y中的元素在A中的位置。dim指明对A的列还是行进行排序,若dim=1,则按列排;若dim=2,则按行排。mode指明按升序还是降序排序,'ascend'为升序,'descend'为降序。dim默认取1,mode默认取'ascend'。
2.2 多项式计算
(1).多项式的加减运算
在MATLAB中,多项式的加减运算就是其所对应的系数向量的加减运算。如果多项式的次数不同,则应该把低次的多项式系数不足的高次项用0补足,使同式中的各多项式具有相同的次数。例如,计算(x3?2x2+5x+3)+(6x?1),命令如下:
a=[1,-2,5,3]; b=[0,0,6,-1]; c=a+b c =
1 -2 11 2
(2).多项式乘除运算
函数conv(P1,P2)用于求多项式的乘积,其中P1、P2是两个多项式的系数向量。 函数[Q,r]=deconv(P1,P2)用于对多项式作除法运算,其中P1、P2是两个多项式的系数向量,返回值Q是商式的系数向量,r是余式的系数向量。
(3).多项式的导函数 对多项式求导数的函数如下。 p=polyder(P):求多项式P的导函数 p=polyder(P,Q):求P·Q的导函数
[p,q]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q。 上述函数中,参数P、Q是多项式的系数向量,结果p、q也是多项式的系数向量。
(4).多项式的求值
MATLAB提供了两种求多项式值的函数:polyval与polyvalm,它们的输入参数均为多项式系数向量P和自变量x。两者的区别在于前者是代数多项式求值,而后者是矩阵多项式求值。
(a).代数多项式求值
3
polyval函数用来求代数多项式的值,其调用格式为 Y=polyval(P,x)
若x为一数值,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。
(b).矩阵多项式求值
polyvalm函数用来求矩阵多项式的值,其调用格式与polyval相同,但含义不同。polyvalm函数要求x为方阵,它以方阵为自变量求多项式的值。设A为方阵,P代表多项式
,那么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))
(5).多项式求根
roots函数用于求多项式的全部根,其调用格式为 x=roots(P)
其中P为多项式的系数向量,求得的根赋给向量x,即x(1),(2),…,x(n)分别代表多项式的n个根。
若已知多项式的全部根,则可以用poly函数建立起该多项式,其调用格式为 P=poly(x)
其中x为具有n个元素的向量。poly(x)建立以x为其根的多项式,且将该多项式的系数赋给向量P。
4
第3章 图形绘制
3.1 二维曲线的绘制
二维曲线是将平面上坐标上的数据点连接起来的平面图形。除直角坐标系外,还可+ 采用对数坐标、极坐标。数据点可以用向量或矩阵形式给出,类型可以是实型或复型。二维曲线的绘制是其他绘图操作的基础。
(1)plot函数 plot(x,y)
其中x和y为大小相同的向量,分别用于存储x坐标和y坐标数据。
(a)当x和y是同维矩阵时,配对的x、y按对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。例如,在同一坐标中绘制3条幅值不同的正弦曲线,命令为
x=0:pi/10:2*pi; y=sin(x);
plot([x;x;x]',[y;y*2;y*3]')
当x是向量,y是有一维与x同维的矩阵时,则绘制出多根曲线,曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的横坐标。例如,在同一坐标中绘制3条幅值不同的正弦曲线,命令也可以写成:
x=0:pi/10:2*pi; y=sin(x);
plot(x,[y;y*2;y*3])
(b)当plot函数只有一个输入参数时,即 plot(y)
若y是实型向量,则以该向量元素的下标为横坐标、元素值为纵坐标画出一条连续曲线;若y是复数向量,则分别以向量元素实部和虚部为横、纵坐标绘制一条曲线。若y是实矩阵,则按列绘制每列元素值相对其下标的曲线,曲线条数等于输入参数矩阵的列数;若y是复数矩阵,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线。
(c)当plot函数有多个输入参数,且都为向量时,即 plot(x1,y1,x2,y2,…,xn,yn)
其中,x1和y1,x2和y2,……,xn和yn分别组成一组向量对,每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。例如,在同一坐标中绘制3条幅值不同的正弦曲线,命令也可以写成:
5