matlab多项式运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例 已知飞机下轮廓线上数据如下,求x每改变0.1时的y值。
X 0 3 5 7 9 11 12 13 14 15 Y 0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6
机翼下 轮廓线
y






x
x0=[0 3 5 7 9 11 12 13 14 15 ]; y0=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6 ]; x=0:0.1:15; y1=lagr1(x0,y0,x); y2=interp1(x0,y0,x); y3=interp1(x0,y0,x,'spline'); subplot(3,1,1) plot(x0,y0,'k+',x,y1,'r') grid title('lagrange') subplot(3,1,2) plot(x0,y0,'k+',x,y2,'r') grid title('piecewise linear') subplot(3,1,3) plot(x0,y0,'k+',x,y3,'r') grid title('spline')
符号求解
solve 也可以用来解方程组 solve( f1 , f2 , ... , fN , v1 , v2 , ... , vN) 求解由 f1 , f2 , ... , fN 确定的方程组关于 v1 , v2 , ... , vN 的解
例:解方程组
x 2 y z 27

多项式求根
求解多项式的根,即p(x)=0的解。在matlab中,求解多项式的 根有roots函数命令来完成。
x=roots(p):返回多项式的根,注意:matlab 按惯例,多项式是行向量,根是列向量。
例:已知 p(x) 2x3 x2 3 ,求p(x)的根。
>> p=[2,-1,0,3]; >> x=roots(p)
>>fzero('x^3-3*x+1',[-2,0]) >>f=inline('x^3-3*x+1');fzero(f,[-2,0])
>> roots([1,0,-3,1]) >>fzero('x^3-3*x+1=0',1) % 格式错误!
注意: 用 fzero 求零点时,通常先通过作图确定零点的大致范围
x

z

3
x2 3 y2 28
>> [x,y,z]=solve('x+2*y-z=27','x+z=3', ...
'x^2+3*y^2=28','x','y','z')
输出变量的顺序要书写正确!
solve 在得不到解析解时,会给出数值解。
求解方程函数小结 roots(p): 求多项式的所有零点,p 是多项式系数向量。
计算多项式在给定点的值
代数多项式求值
y = polyval(p,x)
计算多项式 p 在 x 点的值
注:若 x 是向量或矩阵,则采用数组运算 (点运算)! 例:已知 p(x)=2x3-x2+3,分别取 x=2 和一个 22 矩阵,
求 p(x) 在 x 处的每个分量上的值
>> p=[2,-1,0,3]; >> x=2; y = polyval(p,x) >> x=[-1,2;-2,1]; y = polyval(p,x)
例:在1-12的11小时内,每隔1小时测量一次温 度,测得的温度依次为:5,8,9,15,25,29, 31,30,22,25,27,24。试估计每隔1/10小 时的温度值。
hours=1:12; temps=[5 8 9 15 25 29 31 30 22 25 27 24]; h=1:0.1:12; t=interp1(hours,temps,h,'spline'); (直接输出数据将是很多的) plot(hours,temps,'+',h,t,hours,temps,'r:') %作图 xlabel('Hour'),ylabel('Degrees Celsius’)
6.6667 即有理多项式可展开为: s 4

s
5
5

1.6667 s 1

0
部分分式展开函数residue
格式二:[b,a]=residue(r,p,k) 功能:格式一的逆作用
多项式运算小结
poly2sym(p)
求多项式的符号形式
k = conv(p,q) [k,r] = deconv(p,q)
非线性方程的根
fzero 的另外一种调用方式
fzero(f,[a,b]) 或 fzero(f,x0) 求方程 f=0 在 [a,b] 区间内或x0附近的根。 方程在 [a,b] 内可能有多个根,但 fzero 只给出一个
参数 f 可通过以下三种方式给出:
fzero('x^3-3*x+1',2) %字符串 f=inline('x^3-3*x+1'); fzero(f,2) %内联函数 fzero(@(x)x^3-3*x+1,2) %匿名函数的函数句柄
功能:把b(s)/a(s)展开成:
b(s) r1 r2 ..... rn k
a(s) s p1 s p2
s pn
其中,r代表余数数组,p代表极点数组,k代表常数项。
部分分式展开函数residue
例: 将有理多项式
10s 20
展开成部分分式。
s3 8s2 19s 12
符号求解
符号求解方程:solve s=solve(f,v):求方程关于指定自变量的解; s=solve(f):求方程关于默认自变量的解。 f 可以是用字符串表示的方程,或符号表达式; 若 f 中不含等号,则表示解方程 f=0。
例:解方程 x^3-3*x+1=0 >> syms x; f=x^3-3*x+1;s=solve(f,x) >> s=solve('x^3-3*x+1','x') >> s=solve('x^3-3*x+1=0','x')
插值
自变量x与因变量y的函数y = f(x)的关系式有时不能直 接写出表达式,而只能得到函数在若干个点的函数值。 当要求知道观测点之外的函数值时,需要估计函数值在 该点的值。
插值命令 命令1 interp1 功能 一维数据插值。该命令对数据点之间 计算内插值。它找出一元函数f(x)在中间点 的数值。其中函数f(x)由所给数据决定。
如果两个多项式次数不同,则应该把低次多项式中系 数不足的高次项用 0 补足,然后进行加减运算。
➢例: p1 2x3 x2 3
p2 2x 1 p1 p2 2x3 x2 2x 4
[2, 1, 0, 3] [ 0, 0[, 2,1] [2, 1, 2, 4]
其中 k 返回的是多项式 p 除以 q 的商,r 是余式。
即,[k,r]=deconv(p,q) <==> p=conv(q,k)+r
多项式的求导
多项式的求导: polyder
k=polyder(p) : 多项式 p 的导数; k=polyder(p,q): p*q 的导数; [k,d]=polyder(p,q):p/q 的导数,k 是分子,d 是分母
特别注意:f 不是方程!也不能使用符号表达式! 如,syms x; f=x^3-3*x+1; fzero(f,2) %error!
例:
>> fzero('sin(x)',10) >>fzero(@sin,10)
%系统函数的函数句柄
>>fzero('x^3-3*x+1',1) >>fzero('x^3-3*x+1',[1,2])
用MATLAB作函数插值 一维插值函数:
yi=interp1(x,y,xi,'method')
xi处的插 插值节点 值结果
注意:所有的插值方法 都要求x是单调的,并 且xi不能够超过x的范 围。
被插值点
插值方法
‘nearest’ :最邻近插值 ‘linear’ : 线性插值; ‘spline’ : 三次样条插值; ‘cubic’ : 立方插值。 缺省时: 分段线性插值。
fzero(f,x0):
求 f=0 在 x0 附近的根,f 可以使用 inline(内联函数)、 字符串、或 @(函数句柄),但不能是方程或符号表达式!
linsolve(A,b):解线性方程组。
solve(f,v):
求方程关于指定自变量的解,f 可以是用字符串表示的方程、
符号表达式或符号方程; solve 也可解方程组(包含非线性); 得不到解析解时,给出数值解。
例:已知 p(x)=2x3-x2+3,q(x)=2x+1 , 求 p’,(p.q)’,(p/q)’. >> k1=polyder([2,-1,0,3]) >> k2=polyder([2,-1,0,3],[2,1]) >> [k2,d]=polyder([2,-1,0,3],[2,1])
多项式的值
Matlab 多项式运算与代数方
程求解器
主要内容
多项式的表达方式 多项式的四则运算 多项式的求导 求多项式的值 求多项式的零点 求线性方程组的解 求非线性方程的根 符号求解或求根
Matlab 多项式运算
Matlab 中多项式的表示方法
在 Matlab 中多项式是用它的系数向量来表示的。
多项式的值
矩阵多项式求值
Y=polyvalm(p,X)
采用的是普通矩阵运算, 且X 必须是方阵 例:已知 p(x)=2x3-x2+3, 则
polyvalm(p,A) = 2*A*A*A - A*A + 3*eye(size(A)) polyval(P,A)=2*A.*A.*A-A.*A+3*ones(size(A)) 上机验证一下: >> p=[2,-1,0,3]; x=[-1, 2;-2,1]; >> polyval(p,x) >> polyvalm(p,x)
求多项式的乘积 求多项式的除法
k = polyder(p) k = polyder(p,q) [k,d] = polyder(p,q)
求多项式p的导数 求多项式p*q的导数 求多项式p/q的导数
y = polyval(p,x)
代数多项式求值
Y = polyvalm(p,X)
矩阵多项式求值
x = roots(p)
b是列向量!
非线性方程的根
Matlab 非线性方程的数值求解
fzero(f,x0):求方程 f=0 在 x0 附近的根。
方程可能有多个根,但 fzero 只给出距离 x0 最近的一个 x0 是一个标量,不能缺省 fzero 先找出一个包含 x0 的区间,使得 f 在这个区间两 个端点上的函数值异号,然后再在这个区间内寻找方程 f=0 的根;如果找不到这样的区间,则返回 NaN。 由于 fzero 是根据函数是否穿越横轴来决定零点,因此它 无法确定函数曲线仅触及横轴但不穿越的零点,如 |sin(x)| 的所有零点。
求多项式的根
特别注意:多项式运算中,使用的是多项式 系数向量,
不涉及符号计算!
线性方程组求解
线性方程组求解
linsolve(A,b):解线性方程组 Ax b
例:解方程组

x
2yz xz3
2
பைடு நூலகம் x 3y 8
>> A=[1 2 -1; 1 0 1; 1 3 0]; >> b=[2;3;8]; >> x=linsolve(A,b)
多项式四则运算
多项式乘法运算: k = conv(p,q)
例:计算多项式 2x3-x2+3 和 2x+1 的乘积
>> p=[2,-1,0,3];
>> q=[2,1]; >> k=conv(p,q) >> poly2sym(k)
%乘积多项式的向量形式 %乘积多项式的符号形式
多项式除法运算: [k,r] = deconv(p,q)
例:2x3-x2+3 <-> [2,-1,0,3]
注:系数中的零不能省!
多项式的符号形式:poly2sym 如,>> poly2sym([2,-1,0,3])
运行结果:ans = 2*x^3-x^2+3
多项式四则运算
多项式加减运算
多项式的加减运算就是其所对应的系数向量的加减运算
注意:
对于次数相同的多项式,可以直接对其系数向量进行 加减运算;
若已知多项式的全部根,则可用poly函数给出该多项式。
p=ploy(x)
p(x) (x x1)( x x2 ) (x xn )
部分分式展开函数residue
Residue函数可以完成有理多项式的部分分式展开,它是一个对 系统传递函数特别有用的函数,其调用格式为:
格式一:[r,p,k]=residue(b,a)
相关文档
最新文档