MATLAB编程基础第7讲--数值微积分、多项式

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

18
4.多项式的除法 c=deconv(v, u):v为被除数,u为除数,q返回商,余数为r。
• 例3-33求(2x3+4x2+8x+3)\(x2+2x+3) • v = [2 4 8 3]; • u = [1 2 3]; • % 生成多项式向量 • c = conv(v,u) • % 计算多项式乘积 • c= • 2 8 22 31 30 9 • [q1,r1] = deconv(c,v) • % 求商,整除r1为0,商多项式与u相同 • q1 = • 123 • r1 = • 000000 • [q2,r2] = deconv(v,u) • % 多项式求商,带余数
2019/5/15
14
• 3.8.2多项式的运算 1.多项式的根 R=roots(P):求多项式向量P的根
• p = [1 -6 -72 -27]; • % 多项式向量p • r = roots(p) • % 求多项式的根
2019/5/15
15
2.多项式的值
y=polyval(p,x):计算多项式向量为p变量为x时的数值y,x可以是向量也可以是矩阵
• A = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18]; • % 生成1维矩阵
• A1 = reshape(A,6,3)' • % 转换为3×6维矩阵
• A1 =

123456

7 8 9 10 11 12

13 14 15 16 17 18
• B1 = diff(A1) • % 求1维1阶差分
2019/5/15
19
4.deconv多项式除运算
a=[1 2 3];
c = [4.00 13.00 28.00 27.00 18.00]
d=deconv(c,a)
d =4.00
5.00
6.00
[d,r]=deconv(c,a) 余数
c除a后的整数
2019/5/15
20
5.多项式微分
matlab提供了polyder函数多项式的微分。
2019/5/15
6
• 3.7.2 一元函数的数值积分
数值积分的实现方法
1.变步长辛普生(Simpson)法(精度较高,较常使用)
基于变步长辛普生法,MATLAB给出了quad函数来求定积分。 该函数的调用格式为:
[I,n]=quad('fname',a,b,tol,trace)
其中fname是被积函数名。a和b分别是定积分的下限和上限。 tol用来控制积分精度,缺省时取tol=0.001。trace控制是否 展现积分过程,若取非0则展现积分过程,取0则不展现, 缺省时取trace=0。返回参数I即定积分值,n为被积函数的 调用次数。
c = (x2+2x+3)(4x2+5x+6)
a=[1 2 3];b=[4 5 6];
c=conv(a,b)
X1=polyder(a,b)
201X9/52/15=polyder(c)
22
2019/5/15
5
数值积分 数值积分基本原理
求解定积分的数值方法多种多样,如简单的梯形 法、辛普生(Simpson)•法、牛顿-柯特斯(NewtonCotes)法等都是经常采用的方法。
它们的基本思想都是将整个积分区间[a,b]分成n个 子样求区定间积[xi分,xi+问1]题,就i=1分,2解,…为,n求,和其问中题x1。=a,xn+1=b。这
2019/5/15
7
• 函数部分 • function f=quad1(x) • f=1./(x.^3-2*x-5); • %编制函数m文件
• 调用命令 • Q = quad('quad1',0,2) • % 在同一目录下,计算积分值 • Q=
• -0.4605 • •
2019/5/15
8
求定积分。 (1) 建立被积函数文件fesin.m。
i=1,2,…,n-1。
DX=diff(X,n):计算X的n阶向前差分。例如, diff(X,2)=diff(diff(X))。
DX=diff(A,n,dim):计算矩阵A的n阶差分,dim=1时(缺省状 态),按列计算差分;dim=2,按行计算差分。
2019/5/15
2
例1 差分运算示例 命令如下:
• % 创建3阶魔方矩阵

• P2 = poly(A)
• % 计算方阵的特征多项式
• P2 =
• 1.0000 -15.0000 -24.0000 360.0000
• S2 = poly2str(P2,'s')
• % 转换成变量为s的标准形式
• S2 =
• s^3 - 15 s^2 - 24 s + 360
b=4 6 6 4
poly2str(b,'x')
ans 2019/5/15 =4 x^3 + 6 x^2 + 6 x + 4
21
5.多项式微分
polyder(p): 求p的微分 polyder(a,b): 求多项式a,b乘积的微分 [p,q]=polyder(a,b): 求多项式a,b商的微分
例: a(x)=x2+2x+3; b(x)=4x2+5x+6;
12
3.8 多项式
• 3.8.1 多项式的构造 使用行向量表示多项式的系数,行向量中各元素按多项式 次数从高到低排列。即多项式P(x)=anxn+an-1xn1+…+a1x+a0的系数向量P为[an an-1…a1 a0]。
P=poly(A):通过n阶方阵A生成特征多项式p,A为特征多项式 的根,满足 P(A)=anAn+an-1An-1+…+a1A+a0
例3-31计算多项式的值
• p = [3 2 1];
• % 创建一个多项式向量
• x = [5,7,9];
• % 变量为向量形式
• yx = polyval(p,x)
• % 计算多项式的值
• yx =
• 86 162 262
• A = pascal(4)
• % 变量为矩阵形式
• A=

1111

1234
P=为po多ly(项r):式通的过根向,量即r=满[r足1 r(2x…-r1r)n](方x-r阵2)A…生(x成-rn多)=项an式xn,+向a量n-1元xn-素 1+…+a1x+a0
S=poly2str(P,’s’):将多项式系数行向量表达形式P转换成变量 为s的标准多项式形式S。
2019/5/15
function f=fesin(x) f=exp(-0.5*x).*sin(x+pi/6);
(2) 调用数值积分函数quad求定积分。 [S,n]=quad('fesin',0,3*pi) S=
0.9008 n=
77
2019/5/15
9
• 2. 自适应Lobatto法(精度较高,最常使用) • q=quadl(fun,a,b) • q=quadl(fun,a,b,tol) • • % 采用内联函数形式,第二个参数为变量 • 例3-25求Q=sin2x+cosx从2*pi到0的定积分 • f = inline('sin(2*x)+cos(x).^2','x'); • Q = quadl(f,0,2*pi) • % 求取积分值 • Q=
• B1 =

666666

666666
• B2 = diff(A1,1,2) • % 求2维1阶差分
• B2 =

11111

11111

11111
• B3 = diff(A1,2)
• % 求1维2阶差分
• B3 =

000000
2019/5/15
3
• 2. 梯度和偏导数 二元及多元函数F(x,y,…)的求导
• s= • x^5 + 2 x^4 + 6 x^3 + 2 x^2 + 4 x + 12
• 训练任务: (x4+2x+6)(x3+2x+6)
2019/5/15
17
3.conv,convs多项式乘运算
例:a(x)=x2+2x+3; b(x)=4x2+5x+6; c = (x2+2x+3)(4x2+5x+6)

1 3 6 10

1 4 10 20
• ya = polyval(p,A)
• % 计算多项式的值
• ya =

6

6

6

6
6
6
6
17
34
57
34 121 321
57 321 1241
2019/5/15
16
3.多项式的乘法
c=conv(u,v):求向量为u的多项式与向量为v的多项式的乘积c。
• 例3-32求(x2+2x+6)(x3+2)的乘积 • a = [1 2 6]; • b = [1 0 0 2]; • % 生成多项式向量 • c = conv(a,b) • % 计算乘积 • • s = poly2str(c,'x') • % 标准形式表示 • c= • 1 2 6 2 4 12
第七讲
MATLAB编程基础 之
数值微积分、多项式
2019/5/15
1
3.7 MATLAB数值积分与微分
3.7.1 差分和偏导数 1. 差分 在MATLAB中,没有直接提供求数值导数的函数,只有计算
向前差分的函数diff,其调用格式为: DX=diff(X):计算向量X的向前差分,DX(i)=X(i+1)-X(i),
• 3.1416 • 训练任务:请采用编制m函数求该函数积分 •
2019/5/15
10
3.7.3 多重数值积分
使用MATLAB提供的dblquad函数就可以 直接求出上述二重定积分的数值解。 该函数的调用格式为:
I=dblquad(f,a,b,c,d,tol,trace)
该函数求f(x,y)在[a,b]×[c,d]区域上的二 重定积分。参数tol,trace的用法与函 数quad完全相同。
命令格式:
polyder(p): 求p的微分
polyder(a,b): 求多项式a,b乘积的微分
[p,q]=polyder(a,b): 求多项式a,b商的微分
例:a=[1 2 3 4 5]; poly2str(a,'x')
ans = x^4 + 2 x^3 + 3 x^2 + 4 x + 5
b=polyder(a)
FX=gradient(F) [FX,FY]=gradient(F) […]=gradient(F,h)
2019/5/15
4
例2求二元函数的偏导数
• % 生成二元函数 • v = -2:0.2:2; • [x,y] = meshgrid(v); • z = x .* exp(-x.^2 - y.^2); • % 绘制曲面,如图3-4所示 • figure(1) • mesh(x,y,z); • [px,py] = gradient(z,.2,.2); • % 求偏导数 • figure(2) • contour(v,v,z) • % 绘制等高线,如图3-5所示 • hold on • quiver(v,v,px,py) • % 绘制矢量场图,小箭头表示梯度 • hold off •
I=dblquad('fxy',-2,2,-1,1)
ki
I=
1.57449318974494
ki =
1038
(3)匿名函数方法
f = @(x,y)y*sin(x)+x*cos(y);
% 编写匿名函数,将句柄赋给f
S = dblquad(f,pi,2*pi,0,pi)
% 计算二重积分
2019/5/15
2019/5/15
11
计算二重定积分
(1) 建立一个函数文件fxy.m:
function f=fxy(x,y)
global ki;
ki=ki+1;
%ki用于统计被积函数的调用次数
f=exp(-x.^2/2).*sin(x.^2+y);
(2) 调用dblquad函数求解。
global ki;ki=0;
13
例3-29求多项式
• r = [1 2 3];
• % 生成向量r
• P1 = poly(r)
• % 计算根为r的多项式
• P1 =

1 -6 11 -6
• S1 = poly2str(P1,'x')
• % 转换成变量为x的标准形式
• S1 =
• x^3 - 6 x^2 + 11 x - 6
• A = magic(3)a=[1 2 3];b=[4 5 6];
c=conv(a,b) or =conv([1 2 3],[4 5 6])
c = 4.00 13.00 28.00 27.00 18.00
p=poly2str(c,'x')
p = 4 x^4 + 13 x^3 + 28 x^2 + 27 x + 18
2019/5/15
相关文档
最新文档