好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

matlab多项式运算.ppt

33页
  • 卖家[上传人]:人***
  • 文档编号:593625712
  • 上传时间:2024-09-26
  • 文档格式:PPT
  • 文档大小:345.50KB
  • / 33 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • Matlab 多项式运算与代数方程求解器主要内容主要内容 l 多项式的表达方式l 多项式的四则运算l 多项式的求导l 求多项式的值l 求多项式的零点l 求线性方程组的解l 求非线性方程的根l 符号求解或求根 Matlab 多项式运算多项式运算q Matlab 中多项式的表示方法u在 Matlab 中多项式是用它的系数向量系数向量系数向量系数向量来表示的 例:2x3-x2+3 <-> [2,-1,0,3] u 多项式的符号形式:poly2sym 如,>>>> poly2sym([2,-1,0,3])运行结果:ans = 2*x^3-x^2+3注:系数中的零不能省!注:系数中的零不能省! 多项式多项式四则运算四则运算q 多项式加减运算多项式加减运算多项式的加减运算就是其所对应的多项式的加减运算就是其所对应的系数向量系数向量的加减运算的加减运算注意:注意:l 对于次数相同的多项式,可以直接对其系数向量进行加减运算;l 如果两个多项式次数不同,则应该把低次多项式中系数不足的高次项用 0 补足,然后进行加减运算Ø例:例: 多项式多项式四则运算四则运算q 多项式乘法运算:多项式乘法运算: k = conv(p,q)例:计算多项式例:计算多项式 2x3-x2+3 和和 2x+1 的乘积的乘积p=[2,-1,0,3]; q=[2,1];k=conv(p,q)%乘积多项式的向量形式乘积多项式的向量形式 poly2sym(k) %乘积多项式的符号形式乘积多项式的符号形式 q 多项式除法运算:多项式除法运算: [k,r] = deconv(p,q)其中其中 k 返回的是多项式返回的是多项式 p 除以除以 q 的商的商,,r 是余式是余式。

      即,即,[k,r]=deconv(p,q) <==> <==> p=conv(q,k)+r 多项式的多项式的求求导导q多项式的多项式的求求导导: polyderlk=polyder(p) : 多项式多项式 p 的导数;的导数;lk=polyder(p,q): p*q 的导数;的导数;l[k,d]=polyder(p,q):p/q 的导数的导数,k 是分子是分子,d 是分母是分母例:已知例:已知 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]) 多项式的多项式的值值q 计算计算多项式多项式在给定点的值在给定点的值u 代数多项式代数多项式求值求值y = polyval(p,x)l计算多项式计算多项式 p 在在 x 点的值点的值l 注:若注:若 x 是向量或矩阵,则采用是向量或矩阵,则采用数组运算数组运算 (点运算点运算)!! 例:已知例:已知 p(xp(x)=2x)=2x3 3-x-x2 2+3,+3,分别取分别取 x=2 和一个和一个 2 2 矩阵,矩阵, 求求 p(x) 在在 x 处的每个分量上的值处的每个分量上的值Ø p=[2,-1,0,3];Ø x=2; y = polyval(p,x)Ø x=[-1,2;-2,1]; y = polyval(p,x) 多项式的多项式的值值u 矩阵多项式矩阵多项式求值求值Y=polyvalm(p,X)l 采用的是普通矩阵运算,采用的是普通矩阵运算, 且且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) q多项式求根多项式求根>> p=[2,-1,0,3]; >> x=roots(p)例:已知例:已知 ,求,求p(x)的根。

      的根x=roots(p)::返回多项式的根,注意返回多项式的根,注意:matlab按惯例,多项式是行向量,根是列向量按惯例,多项式是行向量,根是列向量若已知多项式的全部根,则可用若已知多项式的全部根,则可用poly函数给出该多项式函数给出该多项式p=ploy(x)求解多项式的根,即求解多项式的根,即p(x)=0的解在matlab中,求解多项式的中,求解多项式的根有根有roots函数命令来完成函数命令来完成 q部分分式展开函数部分分式展开函数residue格式一:格式一:[r,p,k]=residue(b,a)Residue函数可以完成有理多项式的部分分式展开,它是一个对函数可以完成有理多项式的部分分式展开,它是一个对系统传递函数特别有用的函数,其调用格式为:系统传递函数特别有用的函数,其调用格式为:功能:把功能:把b(s)/a(s)展开成:展开成:其中,其中,r代表余数数组,代表余数数组,p代表极点数组,代表极点数组,k代表常数项代表常数项 q部分分式展开函数部分分式展开函数residue例:例:将有理多项式将有理多项式 展开成部分分式。

      展开成部分分式即有理多项式可展开为:即有理多项式可展开为: q部分分式展开函数部分分式展开函数residue格式二:格式二:[b,a]=residue(r,p,k)功能功能:格式一的逆作用格式一的逆作用 多项式多项式运算运算小结小结poly2sym(p)求多项式的符号形式求多项式的符号形式k = conv(p,q)[k,r] = deconv(p,q)求多项式的乘积求多项式的乘积求多项式的除法求多项式的除法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)求多项式的根求多项式的根特别注意:多项式运算中特别注意:多项式运算中,使用的是多项式使用的是多项式 系数向量系数向量,不涉及符号计算!不涉及符号计算! 线性方程组求解线性方程组求解q 线性方程组求解线性方程组求解linsolve(A,b)::解线性方程组解线性方程组 例:解方程组例:解方程组 A=[1 2 -1; 1 0 1; 1 3 0]; b=[2;3;8]; x=linsolve(A,b)b是列向量!是列向量! 非线性方程的非线性方程的根根q Matlab 非线性方程的数值求解非线性方程的数值求解 fzero(f,x0)::求方程求方程 f=0 在在 x0 附近的根。

      附近的根l方程可能有多个根,但方程可能有多个根,但 fzero 只给出距离只给出距离 x0 最近的一个最近的一个l x0 是一个标量,不能缺省是一个标量,不能缺省lfzero 先找出一个包含先找出一个包含 x0 的区间,使得的区间,使得 f 在这个区间两在这个区间两个端点上的函数值异号,然后再在这个区间内寻找方程个端点上的函数值异号,然后再在这个区间内寻找方程 f=0 的根;如果找不到这样的区间,则返回的根;如果找不到这样的区间,则返回 NaNl由于由于 fzero 是根据函数是否穿越横轴来决定零点,因此它是根据函数是否穿越横轴来决定零点,因此它无法确定函数曲线仅触及横轴但不穿越的零点,如无法确定函数曲线仅触及横轴但不穿越的零点,如 |sin(x)| 的所有零点的所有零点 非线性方程的非线性方程的根根q fzero 的另外一种调用方式的另外一种调用方式fzero(f,[a,b]) 或或 fzero(f,x0) l 求方程求方程 f=0 在在 [a,b] 区间内区间内或或x0附近附近的根的根l 方程在方程在 [a,b] 内可能有多个根,但内可能有多个根,但 fzero 只给出一个只给出一个q 参数参数 f 可通过以下三种方式给出:可通过以下三种方式给出:l fzero('x^3-3*x+1',2) %字符串字符串l f=inline('x^3-3*x+1'); fzero(f,2) %内联函数内联函数l fzero(@(x)x^3-3*x+1,2) %匿名函数的函数句柄匿名函数的函数句柄q 特别注意:特别注意: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])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 求零点时,通常先通过作图确定零点的大致范围求零点时,通常先通过作图确定零点的大致范围 符号求解符号求解q 符号求解符号求解方程:方程:solves=solve(f,v)::求方程关于指定自变量的解;求方程关于指定自变量的解;s=solve(f)::求方程关于求方程关于默认自变量默认自变量的解。

      的解l f 可以是用字符串表示的可以是用字符串表示的方程方程,或符号,或符号表达式表达式;;l 若若 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') 符号求解符号求解q solve 也可以用来解方程组也可以用来解方程组solve( f1 , f2 , ... , fN , v1 , v2 , ... , vN)求解由求解由 f1 , f2 , ... , fN 确定的方程组关于确定的方程组关于 v1 , v2 , ... , vN 的解的解例:解方程组例:解方程组>>>> [ [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 是多项式系数向量是多项式系数向量fzero(f,x0)::求求 f=0 在在 x0 附近的根,附近的根,f 可以使用可以使用 inline(内联函数)(内联函数)、、字符串字符串、或、或 @(函数句柄)(函数句柄),但不能是方程或符号表达式!,但不能是方程或符号表达式!linsolve(A,b)::解线性方程组解线性方程组solve(f,v)::求方程关于指定自变量的解,求方程关于指定自变量的解,f 可以是可以是用字符串表示的方程用字符串表示的方程、、符号表达式符号表达式或或符号方程符号方程;;l solve 也可解方程组也可解方程组(包含非线性包含非线性);;l 得不到解析解时,给出数值解得不到解析解时,给出数值解 插值插值 n自变量x与因变量y的函数y = f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值当要求知道观测点之外的函数值时,需要估计函数值在该点的值n插值命令 n命令命令1 interp1n功能 一维数据插值该命令对数据点之间计算内插值它找出一元函数f(x)在中间点的数值。

      其中函数f(x)由所给数据决定 一维插值函数:一维插值函数:yi=interp1(x,,y,,xi,,'method')插值方法插值方法被插值点被插值点插值节点插值节点xixi处的插处的插值结果值结果‘nearest’ ::最邻近插最邻近插值值‘linear’ :: 线性插线性插值;值;‘spline’ :: 三次样条三次样条插值;插值;‘cubic’ :: 立方插值立方插值缺省时:缺省时: 分段线性插值分段线性插值注意:所有的插值方法注意:所有的插值方法都要求都要求x x是单调的,并是单调的,并且且xi不能够超过不能够超过x的范的范围用MATLAB作函数插值 例:在例:在1-121-12的的1111小时内,每隔小时内,每隔1 1小时测量一次温小时测量一次温度,测得的温度依次为:度,测得的温度依次为:5 5,,8 8,,9 9,,1515,,2525,,2929,,3131,,3030,,2222,,2525,,2727,,2424试估计每隔试估计每隔1/101/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’) xy机翼下轮廓线例例 已知飞机下轮廓线上数据如下,求已知飞机下轮廓线上数据如下,求x每改变每改变0.1时的时的y值。

      值 x0=[0 3 5 7 9 11 12 13 14 15 ];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 ];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;x=0:0.1:15;y1=lagr1(x0,y0,x);y1=lagr1(x0,y0,x);y2=interp1(x0,y0,x);y2=interp1(x0,y0,x);y3=interp1(x0,y0,x,'spline');y3=interp1(x0,y0,x,'spline');subplot(3,1,1)subplot(3,1,1)plot(x0,y0,'k+',x,y1,'r')plot(x0,y0,'k+',x,y1,'r')gridgridtitle('lagrangetitle('lagrange')')subplot(3,1,2)subplot(3,1,2)plot(x0,y0,'k+',x,y2,'r')plot(x0,y0,'k+',x,y2,'r')gridgridtitle('piecewisetitle('piecewise linear') linear')subplot(3,1,3)subplot(3,1,3)plot(x0,y0,'k+',x,y3,'r')plot(x0,y0,'k+',x,y3,'r')gridgridtitle('splinetitle('spline')') 要求要求x0,y0x0,y0单调;单调;x x,,y y可取可取为矩阵,或为矩阵,或x x取行向量,取行向量,y y取为列取为列向量,向量,x,yx,y的值分别的值分别不能超出不能超出x0,y0x0,y0的范的范围。

      围z=interp2(x0,y0,z0,x,y,’method’)被插值点插值方法用用MATLAB作网格节点数据的插值作网格节点数据的插值插值节点被插值点的函数值‘‘nearest’ nearest’ 最邻近插值最邻近插值‘‘linear’ linear’ 双线性插值双线性插值‘‘cubic’ cubic’ 双三次插值双三次插值缺省时缺省时, , 双线性插值双线性插值 例:测得平板表面例:测得平板表面3*53*5网格点处的温度分别为:网格点处的温度分别为: 82 81 80 82 84 82 81 80 82 84 79 63 61 65 81 79 63 61 65 81 84 84 8484 82 85 86 82 85 86 试作出平板表面的温度分布曲面试作出平板表面的温度分布曲面z=f(x,y)z=f(x,y)的图形。

      的图形输入以下命令:x=1:5;y=1:3;temps=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86];mesh(x,y,temps)2.以平滑数据,在x、y方向上每隔0.2个单位的地方进行插值.1.先在三维坐标画出原始数据,画出粗糙的温度分布曲面图. 再输入以下命令:xi=1:0.2:5;yi=1:0.2:3;zi=interp2(x,y,temps,xi,yi,'cubic');mesh(xi,yi,zi)画出插值后的温度分布曲面图. To MATLAB(wendu) 曲线拟合:曲线拟合:n根据n个离散的点,拟合出一条曲线y=F(x),每个点到F(x)的距离两两相乘的积最小 n多项式拟合n命令:polyfit n用法:polyfit(x, y, n)描述n阶多项式y=f(x)的数据进行最小二乘曲线拟合 nx=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1];n y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];n n=2; np=polyfit(x, y, n) np =n -9.8108 20.1293 -0.0317n其解是y = -9.8108x2 +20.1293x-0.0317。

      n为了将曲线拟合解与数据点比较,让我们把二者都绘成图 nxi=linspace(0, 1, 100); nz=polyval(p, xi);nplot(x, y, ' o ' , x, y, xi, z, ' : ' ) 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.