nonzeros(b) %得出非零元素
ans = 1 -5 1 -2 1 -3
nzmax(b)
ans = 6 spy(b)
2.3.3稀疏矩阵的运算
稀疏矩阵的标准数学运算按照以下原则:
? 如果函数的输入参数是向量或标量,输出的参数为矩阵,则输出参数为全元素矩阵;
? 如果函数的输入参数是矩阵,输出的参数为矩阵,则输出参数以输入矩阵的方式来表示,即当输入参数为稀疏矩阵时,输出参数也是稀疏矩阵;
? 如果二元运算的两个操作数中有一个是全元素矩阵一个是稀疏矩阵,则对于“+”、“-”、“*”、“\\” 运算结果为全元素矩阵,而“&”、“.* ”运算结果为稀疏矩阵。
? 用“cat”函数或“[]”连接混合矩阵将产生稀疏矩阵。
2.4多项式
例如,多项式p1(x)= x3+21x2+20x可以表示为:
p1=[1 21 20 0]
%常数项为0
2.4.1多项式的求值、求根和部分分式展开
1. 多项式求值
函数polyval可以用来计算多项式在给定变量时的值,是按数组运算规则进行计算的。 语法:
polyval(p,s)
说明:p为多项式, s为给定矩阵。
【例2.21】计算p(x)= x3+21x2+20x多项式的值。
p1=[1 21 20 0];
polyval(p1,2) %计算x=2时多项式的值
ans = 132
x=0:0.5:3;
polyval(p1,x) %计算x为向量时多项式的值
ans =
0 15.3750 42.0000 80.6250 132.0000 196.8750 276.0000
2. 多项式求根
? roots用来计算多项式的根。 语法:
r=roots(p)
说明:p为多项式;r为计算的多项式的根,以列向量的形式保存。
? 与函数roots相反,根据多项式的根来计算多项式的系数可以用poly函数来实现。 语法:
p=poly (r)
【例2.21续】计算多项式p1(x)= x3+21x2+20x的根以及由多项式的根得出系数。
roots(p1) %计算多项式的根
ans = 0 -20 -1
poly([0;-20;-1]) %计算多项式的系数
ans =
1 21 20 0
3. 特征多项式
对于一个方阵s,可以用函数poly来计算矩阵的特征多项式的系数。特征多项式的根即为特征值,用roots函数来计算。
语法:
p=poly (s)
说明:s必须为方阵;p为特征多项式。
【例2.21续】根据矩阵来计算的特征多项式系数。
s=[1 2;3 4]
s =
1 2 3 4 p2=poly(s) %计算特征多项式
p2 =
1.0000 -5.0000 -2.0000 roots(p2) %计算特征根
ans =
5.3723 -0.3723
程序分析:p2=x2-5x-2为矩阵s 的特征多项式,5.3723和-0.3723为矩阵s的特征根。
也可以用eig函数来计算方阵s的特征值和特征向量的方法得出。
4. 部分分式展开
用residue函数来实现将分式表达式进行多项式的部分分式展开。
rrrB(s)?1?2???n?k(s) A(s)s?p1s?p2s?pn语法:
[r,p,k]=residue(b,a)
说明:b和a分别是分子和分母多项式系数行向量;r是[r1 r2 …rn]留数行向量;p为[p1 p2 …pn]极点行向量;k为直项行向量。
100(s?2)【例2.21续】将表达式进行部分分式展开。
s(s?1)(s?20) p1=[1 21 20 0]; p3=[100 200];
[r,p,k]=residue(p3,p1)
r =
-4.7368 -5.2632 10.0000 p = -20 -1 0 k =
[]
程序分析:表达式
100(s?2)展开结果为?4.7368??5.2632?10。
s(s?1)(s?20)s?20s?1s2.4.2多项式的乘除法和微积分
1. 多项式的乘法和除法
? 多项式的乘法 语法:
p=conv(pl,p2)
说明:p是多项式p1和p2的乘积多项式。 ? 多项式的除法 语法:
[q,r]=deconv(pl,p2)
说明:除法不一定会除尽,会有余子式。多项式p1被p2除的商为多项式q,而余子式是r。
【例2.22】计算表达式s(s?1)(s?20)。
a1=[1 0]; %对应多项式s a2=[1 1]; %对应多项式s+1 a3=[1 20]; %对应多项式s+20 p1=conv(a1,a2)
p1 =
1 1 0
p1=conv(p1,a3) %计算s(s+1)(s+20)
p1 =
1 21 20 0
[p2,r]=deconv(p1,a3) %计算多项式除法的商和余子式
p2 =
1 1 0 r =
0 0 0 0
conv(p2,a3)+r %用商*除式+余子式验算
ans =
1 21 20 0
2. 多项式的微分和积分
? 多项式的微分由polyder函数实现。
? MATLAB没有专门的多项式积分函数,但可以用[p./length(p):-1:1,k]的方法来完成积分, k为常数。
【例2.22续】求多项式的微分和积分。
p4=polyder(p1) %多项式微分
p4 =
3 42 20 s=length(p4):-1:1
s =
3 2 1
p1=[p4./s,0] %多项式积分,常数k=0
p1 =
1 21 20 0
程序分析:可以看出多项式p4(x)= 3x2+42x+20的积分是p1(x)= x3+21x2+20x。
2.4.3多项式拟合和插值
1. 多项式拟合
多项式曲线拟合是用一个多项式来逼近一组给定的数据,使用polyfit函数来实现。拟合的准则是最小二乘法,即找出使
?f(xi?1n2i)?yi最小的f(x)。
语法:
p=polyfit(x,y,n)
说明:x、y向量分别为N个数据点的横、纵坐标;n是用来拟合的多项式阶次;p为拟合的多项式,p为n+1个系数构成的行向量。
【例2.23】对多项式y1=2x13-x12+5x1+10曲线拟合。经过一阶、二阶和三阶拟合的曲线如图2.5所示。
图2.5 一阶、阶和三阶拟合曲线
x1=1:10;
p=[2 -1 5 10]; y0=polyval(p,x1)
y0 =
Columns 1 through 6
16 32 70 142 260 436
Columns 7 through 10
682 1010 1432 1960 p1=polyfit(x1,y0,1) %一阶拟合
p1 =
204.8000 -522.4000
p2=polyfit(x1,y0,2) %二阶拟合
p2 =
32.0000 -147.2000 181.6000
p3=polyfit(x1,y0,3) %三阶拟合
p3 =
2.0000 -1.0000 5.0000 10.0000
2. 插值运算
插值运算是根据数据点的规律,找到一个多项式表达式可以连接两个点,插值得出相邻数据点之间的数值。
1. 一维插值
一维插值是指对一个自变量的插值,interp1函数是用来进行一维插值的。 语法:
yi=interp1(x,y,xi,’method’)