《Matlab教程Ch6多项式及其运算》由会员分享,可在线阅读,更多相关《Matlab教程Ch6多项式及其运算(35页珍藏版)》请在金锄头文库上搜索。
1、MatlabMatlab教程教程Ch6Ch6多多项式及式及其运算其运算第第六章六章 多多项项式式及其运算及其运算多多项式的表示方式式的表示方式2 p=1 5 0 -3 1; f=poly2str(p,x) sym_p = poly2sym(p)f = x4 + 5 x3 - 3 x + 1sym_p = x4+5*x3-3*x+13 r = 0, 1, -1; poly(r) %生成多项式 根为 0,1,-1 a = 1 2; 3 4; poly(a) % 生成矩阵的特征多项式ans = 1.0000 -5.0000 -2.0000 p = 1 0 -2 -5 %表示多项式ans = 1 0
2、-1 0生成多生成多项式式4p=1 -6 -72 -27;r=roots(p)运行结果:运行结果:r = 12.1229 -5.7345 -0.3884r=roots(p) 求多项式求多项式p(用系数行向量)表示的根(用系数行向量)表示的根.多项式求根多项式求根5多多项式求式求值 polyval(p,5) %按数组规则计算5处多项式的值ans = 110 subs(sym_p,5) % 符号变量代值ans = 110 Y = 377 179 439 111 81 136 490 253 639 X = 2 4 5; -1 0 3; 7 1 5; Y = polyvalm(p, X) %按矩阵规
3、则计算X处多项式的值 y=polyval(p,X) X可以是向量也可以是矩阵可以是向量也可以是矩阵.6多多项式的算式的算术运算运算加法加法 p = 1 0 -2 -5; p2 = 0 2 -1 3; add_p = p+p2 %维数必须相同 add_p = 1 2 -3 -2减法运算类似减法运算类似7多多项式的算式的算术运算运算lconv(P1,P2) 多项式P1和P2的乘积 a = 1 2; b = 2 0 -1; c = conv(a, b); poly2sym(c) % 计算算 2*x3+4*x2-x-2lq,r=deconv(P1,P2) 多项式P1和P2作除法运算, q为商,r为余数
4、 q, r = deconv(c, a) %多项式c和a作除法运算q = 2 0 -1r = 0 0 0 08多多项式的求式的求导 q = polyder(p) q = 3 0 -2 a = 1 3 5; b = 2 4 6; c = polyder(a,b) %多项式a,b乘积的导数 c = 8 30 56 38 q,d = polyder(a,b) %计算多项式a,b商的导数q = -2 -8 -2d = 4 16 40 48 36lpolyder(p) 对多项式p求导9多多项式式拟合:合:P,S=polyfit(X,Y,m)函数根据采函数根据采样点点X和采和采样点函数点函数值Y,产生一个
5、生一个m次多次多项式式P及其在采及其在采样点的点的误差向量差向量S。其中其中X、Y是两个等是两个等长的向量,的向量,P是一个是一个长度度为m+1的向量。的向量。X=linspace(0,2*pi,50);Y=sin(X);P,S=polyfit(X,Y,5) %得到得到5次多项式的系数和误差次多项式的系数和误差plot(X,Y,r*,X,polyval(P,X)【例例】用一个用一个5次多项式在区间次多项式在区间0,2内逼近函数内逼近函数sin(x)多多项式式拟合合1011 x=1:0.1:2; y=2.1,3.2,2.1,2.5,3.2,3.5,3.4,4.1,4.7,5.0,4.8; p2=
6、polyfit(x,y,2); p3=polyfit(x,y,3); p7=polyfit(x,y,7); x1=1:0.01:2; y2=polyval(p2,x1); y3=polyval(p3,x1); y7=polyval(p7,x1); plot(x,y,rp,x1,y2,+, x1,y3,k.-, x1,y7,g); legend(拟合点,二次拟合,三次拟合,七次拟合)1213一一维多多项式插式插值: yi=interp1(x,y,xi,method)已知同已知同维数据点数据点x和和y,运用,运用method指定的方法(要再指定的方法(要再单引引号之号之间写入)写入)计算插算插值点
7、点xi处的数的数值yi.当当输入的入的x是等是等间距距时,可在插,可在插值方法方法method前加一个前加一个*,以提高,以提高处理速度。理速度。其中其中method的方法主要有的方法主要有4种种:nearest:最近点插:最近点插值,通,通过四舍五入取与已知数据点最近四舍五入取与已知数据点最近 的点的点linear :线性插性插值,用直,用直线连接数据点接数据点spline:样条插条插值,cubic:立方插:立方插值,用三次曲,用三次曲线拟合并通合并通过数据点。数据点。 插插值14在离散数据的基础上补插连续在离散数据的基础上补插连续函数函数,使得这条,使得这条连续曲线连续曲线通过全部给定的离
8、散数据点。插值是通过全部给定的离散数据点。插值是离散函数离散函数逼近的重逼近的重要方法,利用它可通过函数在有限个点处的取值状况,要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的估算出函数在其他点处的近似值近似值。插值和拟合插值和拟合相同之处:相同之处:寻找一条寻找一条“光滑光滑”的曲线将已知数据点连贯起来的曲线将已知数据点连贯起来不同之处:不同之处:拟合点曲线不要求一定通过数据点拟合点曲线不要求一定通过数据点 插值的曲线要求必须通过数据点插值的曲线要求必须通过数据点 插插值15x=0:6;y=cos(x);xi=0:0.25:6;yi1=interp1(x,y,xi,*n
9、earest)yi2=interp1(x,y,xi,*linear)yi3=interp1(x,y,xi,*spline)yi4=interp1(x,y,xi,*cubic)plot(x,y,ro,xi,yi1,+, xi,yi2,-, xi,yi3,k.-, xi,yi4,m:)legend(原始数据原始数据,最近点插最近点插值,线性插性插值,样条插条插值,立立方插方插值)1617 x=-2:4/(11-1):2; y=1./(2+x.2); xi=-2:0.1:2; y1=interp1(x,y,xi,*nearest); y2=interp1(x,y,xi,*linear); y3=in
10、terp1(x,y,xi,*spline); y4=interp1(x,y,xi,*cubic); subplot(2,2,1),plot(x,y,rp,xi,y1),title(nearest) subplot(2,2,2),plot(x,y,rp,xi,y2),title(linear) subplot(2,2,3),plot(x,y,rp,xi,y3),title(spline) subplot(2,2,4),plot(x,y,rp,xi,y4),title(cubic)1819二二维多多项式插式插值: yi=interp2(x,y,z,xi,yi,method)已知同已知同维数据点数据
11、点x、y和和z,运用,运用method指定的方法(要指定的方法(要在在单引号之引号之间写入)写入)计算插算插值点点(xi,yi)处的数的数值zi. Method指定的方法同一指定的方法同一维多多项式插式插值.20 x,y=meshgrid(-2:0.5:2); z=x.*exp(-x.2-y.2); x1,y1=meshgrid(-2:0.1:2); z1=x1.*exp(-x1.2-y1.2); figure(1) subplot(1,2,1),mesh(x,y,z),title(数据点数据点) subplot(1,2,2),mesh(x1,y1,z1),title(函数函数图象象) xi,
12、yi=meshgrid(-2:0.125:2); zi1=interp2(x,y,z,xi,yi,*nearest); zi2=interp2(x,y,z,xi,yi,*linear); zi3=interp2(x,y,z,xi,yi,*spline); zi4=interp2(x,y,z,xi,yi,*cubic); figure(2) subplot(2,2,1),mesh(xi,yi,zi1),title(最近点插最近点插值) subplot(2,2,2),mesh(xi,yi,zi2),title(线性插性插值) subplot(2,2,3),mesh(xi,yi,zi3),title
13、(样条插条插值) subplot(2,2,4),mesh(xi,yi,zi4),title(立方插立方插值)212223输入方式入方式 变量量input(提示符号串提示符号串)如:如:x=input(x=); y=input(please input y=);输出方式出方式(1)直接)直接输出出 x %变量后无分号量后无分号“;”,变量直接量直接输出出 disp(a) %可以是可以是标量、向量、矩量、向量、矩阵(2)格式控制)格式控制输出出 fprintf(x=%.3f,s=%.0fn,a,b)如:如:fprintf(x=%.5f,y=%.0fn,pi,sqrt(2);x=3.14159,y=
14、17/19/202424流程控制流程控制程序流程控制包含控制程序的基本程序流程控制包含控制程序的基本结构和构和语法法 结构化的程序主要有三种基本的程序构化的程序主要有三种基本的程序结构构顺序序结构构 指所有指所有组成程序源代成程序源代码的的语句按照由上至下的次序句按照由上至下的次序依次依次执行,直到程序的最后一个行,直到程序的最后一个语句。句。选择结构构 依照不同的判断条件依照不同的判断条件进行判断,然后根据判断的行判断,然后根据判断的结果果选择某一种方法来解决某一个某一种方法来解决某一个问题。循循环结构构 就是在程序中某一条就是在程序中某一条语句或多条句或多条语句重复多次的运句重复多次的运行
15、。行。MATLABMATLAB语言的程序言的程序结构与其它高构与其它高级语言是一致的,分言是一致的,分为顺序序结构、构、选择结构、循构、循环结构构7/19/2024251. if语句句if语句的三种基本句的三种基本语法法结构构if(关系运算表达式)(关系运算表达式) MATLAB语句句 endif(关系运算表达式)(关系运算表达式) MATLAB语句句A else MATLAB语句句B endif(关系运算表达式(关系运算表达式a) MATLAB语句句A elseif (关系运算表达式(关系运算表达式b) MATLAB语句句B else (关系运算表达式(关系运算表达式c) endif-els
16、eif-else的语句结构的语句结构可以嵌套使用可以嵌套使用 if(关系运算表达式(关系运算表达式a) if (关系运算表达式(关系运算表达式b) MATLAB语句语句A else MATLAB语句语句B end else if (关系运算表达式(关系运算表达式c) MATLAB语句语句C else MATLAB语句语句D end end 选择结构选择结构7/19/202426例:例:编写一个函数,将百分制成绩转换为优编写一个函数,将百分制成绩转换为优(A),良良(B),中中(C),差差(D)四等级四等级function jb=dengji(fs)if fs=90 jb=A;elseif fs
17、=80 jb=B;elseif fs=70 jb=C;else jb=D;end命令窗口输入:命令窗口输入:jb=dengji(81)7/19/2024272. switch语句句switch语句用于句用于处理多分支的理多分支的选择switch(表达式)(表达式) case 常量表达式常量表达式a:MATLAB语句句A case 常量表达式常量表达式b:MATLAB语句句B case 常量表达式常量表达式m:MATLAB语句句M otherwise:MATLAB语句句N end在在MATLAB的的switch语句中,程序句中,程序仅仅执行行符合条件的符合条件的case分支分支如果需要如果需要对
18、多个条件使用同一个多个条件使用同一个case分支分支时,则需要使用元胞数需要使用元胞数组与之配合与之配合7/19/202428循循环结构构在在MATLAB中,包含两种循中,包含两种循环结构构循循环次数不确定的次数不确定的while循循环循循环次数确定的次数确定的for循循环1、while循环结构循环结构while语句可以实现语句可以实现“当当”型的循环结构型的循环结构格式格式 while(表达式)(表达式) MATLAB语句语句 end特点是先判断循环条件,当循环条件成立,特点是先判断循环条件,当循环条件成立,即表达式运算结果为即表达式运算结果为“真真”,再执行循环体,再执行循环体在循环过程中
19、一定要有能够改变关系表达式在循环过程中一定要有能够改变关系表达式或者布尔类型变量的值或者布尔类型变量的值7/19/202429p=1;s=1; r=1; k=0;while r= 1.0e-8k=k+1;p=p*k;r=1/p;s=s+rfprintf(k=%.0f,s=%.10fn,k,s)end试求试求e的近似值的近似值,要求精度到要求精度到1.0e-8.k=9,s=2.7182815256k=10,s=2.7182818011k=11,s=2.7182818262k=12,s=2.7182818283例:例:根据麦克劳林公式可以得到根据麦克劳林公式可以得到7/19/2024302、for
20、循循环结构构使用使用for语句循句循环需要需要预先知道循先知道循环体体执行行的次数的次数格式格式 for index=start:increment:end MATLAB语句句 endindex的取的取值取决于取决于start和和end的的值在在for循循环语句中,不句中,不仅可以使用行向量可以使用行向量进行循行循环迭代的迭代的处理,也可以使用矩理,也可以使用矩阵作作为循循环次数次数的控制的控制变量量循循环的索引的索引值将直接使用矩将直接使用矩阵的每一的每一列,循列,循环的次数的次数为矩矩阵的列数的列数7/19/202431例:例:根据麦克劳林公式可以得到根据麦克劳林公式可以得到n=10;p=
21、1;s=1;for i=1:np=p*i;s=s+1/p;fprintf(i=%.0f,s=%.8fn,i,s)end试求试求e的近似值的近似值i=1,s=2.00000000i=2,s=2.50000000i=3,s=2.66666667i=4,s=2.70833333i=5,s=2.71666667i=6,s=2.71805556i=7,s=2.71825397i=8,s=2.71827877i=9,s=2.71828153i=10,s=2.718281807/19/202432breakbreak语句和句和continuecontinue语句句break语句和句和continue语句句的
22、基本功能的基本功能当当break语句使用在循句使用在循环体中的体中的时候,其作用是候,其作用是能能够在在执行循行循环体的体的时候候强迫迫终止循止循环,即控制,即控制程序的流程,使其提前退出循程序的流程,使其提前退出循环使用方法:使用方法: break;pause语句使程序运行句使程序运行暂停,等待用停,等待用户按任意按任意键继续。pause语句在程序句在程序调试或或查看中看中间结果果时经常使用。常使用。使用方法使用方法1.直接使用:直接使用:pause2.使用按使用按时间暂停形式:停形式: pause(n)7/19/202433例:例:动态显示数列极限动态显示数列极限An=(1+1/n)n e的逼近过程的逼近过程hold onaxis(0,150,2,2.8);gridfor n=2:2:150An=(1+1/n)n;plot(n,An,r.)pause (0.1)fprintf(n=%d,s=%.4fn,n,An)end7/19/202434结束束