Matlab教程Ch6 (多项式及其运算)

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

20
例.f 用以上4种方法对z xe 效果进行比较.
( x2 y2 )
在[2, 2]上的二维插值
>> [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,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('样条插值') >> subplot(2,2,4),mesh(xi,yi,zi4),title('立方插值')
15
例.用以上4种方法对y cos x在[0,6]上的一维插值效果 进行比较.
x=0:6; y=cos(x);
xi=0:0.25:6;
yi1=interp1(x,y,xi,'*nearest') 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('原始数据','最近点插值','线性插值','样条插值','立 方插值')
2
将多项式的行向量转化为相应的一般多项式的命令形式如下: poly2str(p,'x') 或 poly2sym(p)
例 : 输出多项式f ( x ) x 4 5 x 3 3 x 1的一般表达式.
>> p=[1 5 0 -3 1]; >> f=poly2str(p,’x’) >> sym_p = poly2sym(p) f= x^4 + 5 x^3 - 3 x + 1 sym_p = x^4+5*x^3-3*x+1
14
插值
在离散数据的基础上补插连续函数,使得这条连续曲线 通过全部给定的离散数据点。插值是离散函数逼近的重 要方法,利用它可通过函数在有限个点处的取值状况, 估算出函数在其他点处的近似值。 插值和拟合 相同之处:寻找一条“光滑”的曲线将已知数据点连贯起来 不同之处:拟合点曲线不要求一定通过数据点 插值的曲线要求必须通过数据点
ans = 1.0000 -5.0000 -2.0000

1
3
2 2 5 2 4
4
多项式求根
r=roots(p) 求多项式p(用系数行向量)表示的根.
例:求多项式f ( x ) x 3 6 x 2 72 x 27的根.
>>p=[1 -6 -72 -27]; >>r=roots(p)
如:fprintf(‘x=%.5f,y=%.0f\n',pi,sqrt(2));
x=3.14159,y=1
2018/10/10 24
流程控制

程序流程控制包含控制程序的基本结构和语法 结构化的程序主要有三种基本的程序结构 顺序结构 指所有组成程序源代码的语句按照由上至下的次序 依次执行,直到程序的最后一个语句。 选择结构 依照不同的判断条件进行判断,然后根据判断的结 果选择某一种方法来解决某一个问题。 循环结构 就是在程序中某一条语句或多条语句重复多次的运 行。 MATLAB语言的程序结构与其它高级语言是一致的,分 为顺序结构、选择结构、循环结构

[q,r]=deconv(P1,P2)
多项式P1和P2作除法运算, q为商,r
为余数
>> [q, r] = deconv(c, a) %多项式c和a作除法运算 q= 2 0 -1 r= 0 0 0 0
8
多项式的求导
polyder(p)
对多项式p求导
>> q = polyder(p)
q= 3 0 -2
21
22百度文库
23
输入方式
变量=input(‘提示符号串’) 如:x=input(‘x=’); y=input(‘please input y=’); 输出方式 (1)直接输出 x %变量后无分号“;”,变量直接输出 disp([a]) %可以是标量、向量、矩阵 (2)格式控制输出 fprintf(‘x=%.3f,s=%.0f\n',a,b)
13
插值
一维多项式插值: yi=interp1(x,y,xi,method) 已知同维数据点x和y,运用method指定的方法(要再单引 号之间写入)计算插值点xi处的数值yi.当输入的x是等间距 时,可在插值方法method前加一个*,以提高处理速度。 其中method的方法主要有4种: nearest:最近点插值,通过四舍五入取与已知数据点最近 的点 linear :线性插值,用直线连接数据点 spline:样条插值, cubic:立方插值,用三次曲线拟合并通过数据点。
18
nearest 0.5 0.4 0.3 0.2 0.1 -2 0.5 0.4 0.3 0.2 0.1 -2
linear
-1
0 spline
1
2
-1
0 cubic
1
2
0.5 0.4 0.3 0.2 0.1 -2
0.5 0.4 0.3 0.2 0.1 -2
-1
0
1
2
-1
0
1
2
19
二维多项式插值: yi=interp2(x,y,z,xi,yi,method) 已知同维数据点x、y和z,运用method指定的方法(要 在单引号之间写入)计算插值点(xi,yi)处的数值zi. Method指定的方法同一维多项式插值.
( x 2x 5)
3
>> a = [1 3 5]; b = [2 4 6]; >> c = polyder(a,b) %多项式a,b乘积的导数
c= 8 30 56 38
( x 2 3x 5) q( x) (2 x 2 4 x 6) d ( x)
9
[( x2 3x 5)(2x2 4x 6)]
>> [q,d] = polyder(a,b) %计算多项式a,b商的导数 q = -2 -8 -2 d = 4 16 40
48
36
多项式拟合
多项式拟合:[P,S]=polyfit(X,Y,m) 函数根据采样点X和采样点函数值Y,产生一个m次多项式 P及其在采样点的误差向量S。 其中X、Y是两个等长的向量,P是一个长度为m+1的向量。
1
第六章 多项式及其运算
多项式的表示方式
若f ( x )为一n次一元多项式,则 f ( x ) an x n a1 x a0 在Matlab中使用行向量来表示多项式的系数,并按自变量x 的幂次由高到低的顺序排列出相应的系数. 如多项式f ( x ) an x n a1 x a0的系数向量为: a n a n 1 a 0 若缺项,则其对应项的系数用0补齐.
Y X 3 2 X 5I
6
多项式的算术运算
加法
>> p = [1 0 -2 -5]; >> p2 = [0 2 -1 3]; add_p = p+p2 add_p = 1 2 -3 -2
%维数必须相同
减法运算类似
7
多项式的算术运算
conv(P1,P2) 多项式P1和P2的乘积 >> a = [1 2]; b = [2 0 -1]; >> c = conv(a, b); poly2sym(c) % 计算 ( x 2)(2x2 1) 2*x^3+4*x^2-x-2
25

2018/10/10
1. if语句 if语句的三种基本语法结构 if(关系运算表达式)
选择结构

MATLAB语句 end if(关系运算表达式) MATLAB语句A else MATLAB语句B end if(关系运算表达式a) MATLAB语句A elseif (关系运算表达式b) MATLAB语句B else (关系运算表达式c) … 2018/10/10 26 end
【例】用一个5次多项式在区间[0,2π]内逼近函数sin(x)
X=linspace(0,2*pi,50);Y=sin(X); [P,S]=polyfit(X,Y,5) %得到5次多项式的系数和误差 plot(X,Y,‘r*',X,polyval(P,X))
10
11
例.现有一组实验数据:x的取值是从1到2之间的数,间隔 为0.1,y的取值为2.1, 3.2, 2.1, 2.5, 3.2, 3.5, 3.4,4.1,4.7,5.0,4.8. 要求分别用二次、三次和七次拟合曲线来拟合这组数据, 观察这三组拟合曲线哪个效果更好?
16
例.用以上4种方法对y cos x在[0,6]上的一维插值效果 进行比较.
17
1 例.用以上4种方法对y ( x [2, 2])选用11个数据点 2 2 x 进行插值并画图比较结果.
>> 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=interp1(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’)
>> 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=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(‘拟合点’,‘二次拟合’,’三次拟合’,’七次 12 拟合’)
3
生成多项式
>> p = [1 0 -2 -5]
3 x 2x 5 %表示多项式
>> r = [0, 1, -1]; poly(r) %生成多项式 x( x 1)( x 1) 根为 0,1,-1 ans = 1 0 -1 0
>> a = [1 2; 3 4]; poly(a) % 生成矩阵的特征多项式
运行结果: r= 12.1229 -5.7345 -0.3884
5
多项式求值
y=polyval(p,X) X可以是向量也可以是矩阵. >> polyval(p,5) %按数组规则计算5处多项式的值 ans = 110 >> subs(sym_p,5) % 符号变量代值 ans = 110 >> X = [2 4 5; -1 0 3; 7 1 5]; >> Y = polyvalm(p, X) %按矩阵规则计算X处多项式的值 Y= 377 179 439 111 81 136 490 253 639
相关文档
最新文档