《matlab多项式运算【技术材料】》由会员分享,可在线阅读,更多相关《matlab多项式运算【技术材料】(33页珍藏版)》请在人人文库网上搜索。
1、Matlab 多项式运算与代数方程求解器,主要内容 多项式的表达方式 多项式的四则运算 多项式的求导 求多项式的值 求多项式的零点 求线性方程组的解 求非线性方程的根 符号求解或求根,1,研究学习,Matlab 多项式运算,Matlab 中多项式的表示方法 在 Matlab 中多项式是用它的系数向量来表示的。 例:2x3-x2+3 2,-1,0,3 多项式的符号形式:poly2sym 如, poly2sym(2,-1,0,3) 运行结果:ans = 2*x3-x2+3,注:系数中的零不能省,2,研究学习,多项式四则运算,多项式加减运算 多项式的加减运算就是其所对应的系数向量的加减运算 注意: 。
2、对于次数相同的多项式,可以直接对其系数向量进行加减运算; 如果两个多项式次数不同,则应该把低次多项式中系数不足的高次项用 0 补足,然后进行加减运算,例,3,研究学习,多项式四则运算,多项式乘法运算: 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) 其中 k 返回的是多项式 p 除以 q 的商,r 是余式。 即,k,r=deconv(p,q) p=conv(q,k)+r,4,。
3、研究学习,多项式的求导,多项式的求导: polyder k=polyder(p) : 多项式 p 的导数; k=polyder(p,q): p*q 的导数; 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,5,研究学习,多项式的值,计算多项式在给定点的值 代数多项式求值 y = polyval(p,x) 计算多项式 p 在 x 点的。
4、值 注:若 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,6,研究学习,多项式的值,矩阵多项式求值 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。
5、-A.*A+3*ones(size(A) 上机验证一下: p=2,-1,0,3; x=-1, 2;-2,1; polyval(p,x) polyvalm(p,x,7,研究学习,多项式的零点,计算多项式的零点(根) x=roots(p) :若 p 是 n 次多项式,则输出是 p=0 的 n 个根组成的 n 维向量。 例:已知 p(x)=2x3-x2+3, 求 p(x) 的零点。 p=2,-1,0,3; x=roots(p) 若已知多项式的所有零点,则可用 poly 函数给出该多项式,如: p=poly(x) % - p(x)=(x-x1)(x-x2)(x-xn) % 其为向量形式且和原多项式差一。
6、个因子an,8,研究学习,多项式求根,p=2,-1,0,3; x=roots(p,例:已知 ,求p(x)的根,x=roots(p):返回多项式的根,注意:matlab按惯例,多项式是行向量,根是列向量,若已知多项式的全部根,则可用poly函数给出该多项式,p=ploy(x,求解多项式的根,即p(x)=0的解。在matlab中,求解多项式的 根有roots函数命令来完成,9,研究学习,部分分式展开函数residue,格式一:r,p,k=residue(b,a,Residue函数可以完成有理多项式的部分分式展开,它是一个对 系统传递函数特别有用的函数,其调用格式为,功能:把b(s)/a(s)展开成。
7、,其中,r代表余数数组,p代表极点数组,k代表常数项,10,研究学习,部分分式展开函数residue,例,将有理多项式 展开成部分分式,即有理多项式可展开为,11,研究学习,部分分式展开函数residue,格式二:b,a=residue(r,p,k,功能:格式一的逆作用,12,研究学习,13,研究学习,线性方程组求解,线性方程组求解,linsolve(A,b):解线性方程组,例:解方程组,A=1 2 -1; 1 0 1; 1 3 0; b=2;3;8; x=linsolve(A,b,b是列向量,14,研究学习,非线性方程的根,Matlab 非线性方程的数值求解 fzero(f,x0):求方程 。
8、f=0 在 x0 附近的根。 方程可能有多个根,但 fzero 只给出距离 x0 最近的一个 x0 是一个标量,不能缺省 fzero 先找出一个包含 x0 的区间,使得 f 在这个区间两个端点上的函数值异号,然后再在这个区间内寻找方程 f=0 的根;如果找不到这样的区间,则返回 NaN。 由于 fzero 是根据函数是否穿越横轴来决定零点,因此它无法确定函数曲线仅触及横轴但不穿越的零点,如 |sin(x)| 的所有零点,15,研究学习,非线性方程的根,fzero 的另外一种调用方式 fzero(f,a,b) 或 fzero(f,x0) 求方程 f=0 在 a,b 区间内或x0附近的根。 方程在。
9、 a,b 内可能有多个根,但 fzero 只给出一个 参数 f 可通过以下三种方式给出: fzero(x3-3*x+1,2) %字符串 f=inline(x3-3*x+1); fzero(f,2) %内联函数 fzero(x)x3-3*x+1,2) %匿名函数的函数句柄 特别注意:f 不是方程!也不能使用符号表达式! 如,syms x; f=x3-3*x+1; fzero(f,2) %error,16,研究学习,例: fzero(sin(x),10) fzero(sin,10)%系统函数的函数句柄 fzero(x3-3*x+1,1) fzero(x3-3*x+1,1,2) fzero(x3-3。
10、*x+1,-2,0) f=inline(x3-3*x+1);fzero(f,-2,0) roots(1,0,-3,1) fzero(x3-3*x+1=0,1) % 格式错误,注意: 用 fzero 求零点时,通常先通过作图确定零点的大致范围,17,研究学习,符号求解,符号求解方程:solve s=solve(f,v):求方程关于指定自变量的解; s=solve(f):求方程关于默认自变量的解。 f 可以是用字符串表示的方程,或符号表达式; 若 f 中不含等号,则表示解方程 f=0。 例:解方程 x3-3*x+1=0 syms x; f=x3-3*x+1;s=solve(f,x) s=solve。
11、(x3-3*x+1,x) s=solve(x3-3*x+1=0,x,18,研究学习,符号求解,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, . x2+3*y2=28,x,y,z,输出变量的顺序要书写正确,19,研究学习,solve 在得不到解析解时,会给出数值解,20,研究学习,21,研究学习,插值,自变量x与因变量y的函数y = f(x)的关系式有时。
12、不能直接写出表达式,而只能得到函数在若干个点的函数值。当要求知道观测点之外的函数值时,需要估计函数值在该点的值。 插值命令 命令1 interp1 功能 一维数据插值。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定,22,研究学习,23,研究学习,一维插值函数,yi=interp1(x,y,xi,method,nearest :最邻近插值linear : 线性插值; spline : 三次样条插值; cubic : 立方插值。 缺省时: 分段线性插值,注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围,用MATLAB作函数插值,。
13、24,研究学习,例:在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,25,研究学习,例 已知飞机下轮廓线。
14、上数据如下,求x每改变0.1时的y值,26,研究学习,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 line。
15、ar) subplot(3,1,3) plot(x0,y0,k+,x,y3,r) grid title(spline,27,研究学习,要求x0,y0单调;x,y可取为矩阵,或x取行向量,y取为列向量,x,y的值分别不能超出x0,y0的范围,z=interp2(x0,y0,z0,x,y,method,用MATLAB作网格节点数据的插值,nearest 最邻近插值 linear 双线性插值 cubic 双三次插值 缺省时, 双线性插值,28,研究学习,例:测得平板表面3*5网格点处的温度分别为: 82 81 80 82 84 79 63 61 65 81 84 84 82 85 86 试作出平板表。
16、面的温度分布曲面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.先在三维坐标画出原始数据,画出粗糙的温度分布曲面图,29,研究学习,再输入以下命令: 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,30,研究学习,曲线拟。
17、合,根据n个离散的点,拟合出一条曲线y=F(x),每个点到F(x)的距离两两相乘的积最小。 多项式拟合 命令:polyfit 用法:polyfit(x, y, n)描述n阶多项式y=f(x)的数据进行最小二乘曲线拟合 x=0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1; y=-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2; n=2; p=polyfit(x, y, n,31,研究学习,p = -9.8108 20.1293 -0.0317 其解是y = 9.8108x2 20.1293x0.0317。 为了将曲线拟合解与数据点比较,让我们把二者都绘成图。 xi=linspace(0, 1, 100); z=polyval(p, xi); plot(x, y, o , x, y, xi, z, :,32,研究学习,33,研究学习。