摘要
第3章数据分析函数
1. roots函数
找出多项式的根,也就是使多项式为0的值,可能是许多学科共同的问题。MATLAB能求解这个问题,并提供了特定函数roots求解一个多项式的根。函数的语法格式为:
r = roots(p): 以列向量的形式返回p表示的多项式的根。输入p是一个包含n+1多项式系数的向量,以xn系数开头,0系列表示方程中不存在的中间幂。例如: p=[3,2,-2]表示多项式3x2+2x-2。
roots函数对p1xn+…+pnx+pn+1=0格式的多项式方程求解,包含带有非负指数的单一变量的多项式方程。
【例31】利用roots求四次方程x4-1=0的解。
>> p = [1 0 0 0 -1];
r = roots(p)
运行程序,输出如下:
r =
-1.0000 + 0.0000i
0.0000 + 1.0000i
0.0000 - 1.0000i
1.0000 + 0.0000i
2. poly函数
在MATLAB中,无论是一个多项式还是它的根,都是以向量形式存储的。按照惯例,多项式是行向量,根是列向量。因此当我们给出一个多项式的根时,MATLAB也可以构造出相应的多项式,这个过程需要使用函数poly。函数的语法格式为:
p = poly(r): (r是向量)返回多项式的系数,其中多项式的根是r的元素。
p = poly(A): (A是n×n矩阵)返回矩阵det(λI-A)的特征多项式的n+1个系数。
【例32】使用poly来计算矩阵A的特征多项式。
>> A = [1 2 3; 4 5 6; 7 8 0]%创建矩阵A
A =
1 2 3
4 5 6
7 8 0
>> p = poly(A)
p =
1.0000 -6.0000-72.0000-27.0000
>> %使用 roots 计算 p 的根,特征多项式的根是矩阵 A 的特征值
>> r = roots(p)
r =
12.1229
-5.7345
-0.3884
3. conv函数
在MATLAB中,函数conv支持多项式乘法(运算法则为执行两个数组的卷积)。函数的语法格式为: w = conv(u,v): 返回向量u和v的卷积。如果u和v是多项式系数的向量,对其卷积与将这两个多项式相乘等效。
w = conv(u,v,shape): 返回shape指定的卷积的分段。例如,conv(u,v,'same')仅返回与u 等大小的卷积的中心部分,而conv(u,v,'valid')仅返回计算的没有补零边缘的卷积部分。
【例33】创建两个向量并求其卷积。
>> u = [1 1 1];
v = [1 1 0 0 0 1 1];
w = conv(u,v)
w =
1 2 2 1 0 1 2 2 1
w的长度为length(u)+length(v)-1,在本例中为9。
4. deconv函数
在MATLAB中,提供了deconv函数实现去卷积和多项式除法。函数的语法格式为:
[q,r] = deconv(u,v): 使用长除法将向量v从向量u中去卷积,并返回商q和余数r,以使u = conv(v,q)+r。如果u和v是由多项式系数组成的向量,则对它们去卷积相当于将u表示的多项式除以v表示的多项式。
【例34】多项式除法。
创建两个向量u和v,分别包含多项式2x2+7x2+4x+9和x2+1的系数。通过将v从u中去卷积,将第一个多项式除以第二个多项式,得出与多项式2x+7对应的商系数以及与2x+2对应的余数系数。
>> u = [2 7 4 9];
v = [1 0 1];
[q,r] = deconv(u,v)
q =
2 7
r =
0 0 2 2
5. polyder函数
MATLAB为多项式求导提供了函数polyder。函数的语法格式为:
k = polyder(p): 返回p中的系数表示的多项式的导数
k(x)=ddxp(x)
k = polyder(a,b): 返回多项式a和b的乘积的导数
k(x)=ddx[a(x)b(x)]
[q,d] = polyder(a,b): 返回多项式a和b的商的导数
q(x)d(x)=ddxa(x)b(x)
【例35】求导多项式x4-3x1-1x+4的商。
>> %创建两个向量来表示商中的多项式
>> p = [1 0 -3 0 -1];4],ylim,'LineStyle','--','Color','k')
line([10 10],ylim,'LineStyle','--','Color','k')
图38多分多项式效果图
15. unmkpp函数
在MATLAB中,提供了unmkpp函数用于提取分段多项式的详细信息。函数的语法格式为:
[breaks,coefs,L,order,dim] = unmkpp(pp): 从分段多项式结构体pp的字段中提取信息。
【例314】为区间[0 3]内的多项式f(x)=x2+x+1创建分段多项式结构,然后从该结构的字段中提取信息。
>> pp = mkpp([0 3],[1 1 1]);
>> [breaks,coefs,L,order,dim] = unmkpp(pp)
breaks =
0 3
coefs =
1 1 1
L =
1
order =
3
dim =
1
16. spline函数
在MATLAB中,提供了spline函数实现三次方样条数据插值。函数的语法格式为:
s = spline(x,y,xq): 返回与xq中的查询点对应的插值s的向量。s的值由x和y的三次样条插值确定。
pp = spline(x,y): 返回一个分段多项式结构体以用于ppval和样条实用工具unmkpp。
【例315】具有指定端点斜率的分布的样条插值。
>>%当端点斜率已知时,使用clamped或