数值微分与数值积分
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
专题六数值微积分与方程求解6.1 数值微分与数值积分
☐数值微分
☐数值积分
1.数值微分
(1)数值差分与差商
微积分中,任意函数f(x)在x 0点的导数是通过极限定义的:
h
x f h x f x f h )()(lim
)('0
0-+=→h
h x f x f x f h )
()(lim
)('0
00
0--=→h
h x f h x f x f h )
2/()2/(lim
)('0
--+=→
)
()()(000
x f h x f x
f -+=∆)
()()(0
h x f x f x f --=∇)
2/()2/()(0
h x f h x f x f --+=δ如果去掉极限定义中h 趋向于0的极限过程,得到函数在x 0点处以h (h>0)为步长的向前差分、向后差分和中心差分公式: 向前差分: 向后差分: 中心差分:
函数f(x)在点x 0的微分接近于函数在该点的差分,而f 在点x 的导数接近于函数在该点的差商。
h
x f h x f x
f )
()(≈
)('0
00
-+h
h x f x f x f )
()(≈
)('0
00
--h
h x f h x f x f )
2/()2/(≈
)('0
--+向前差商: 向后差商: 中心差商:
当步长h 充分小时,得到函数在x 0点处以h (h>0)为步长的向前差商、
向后差商和中心差商公式:
(2)数值微分的实现
MATLAB提供了求向前差分的函数diff,其调用格式有三种:
☐dx=diff(x):计算向量x的向前差分,dx(i)=x(i+1)-x(i),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,按行计算差分。
注意:diff函数计算的是向量元素间的差分,故差分向量元素的个数比原向量少了一个。同样,对于矩阵来说,差分后的矩阵比原矩阵少了一行或一列。
另外,计算差分之后,可以用f(x)在某点处的差商作为其导数的近似值。
例1 设f(x)=sin x,在[0,2π]范围内随机采样,计算f'(x)的近似值,并与理论值f'(x)=cos x进行比较。
>> x=[0,sort(2*pi*rand(1,5000)),2*pi];
>> y=sin(x);
>> f1=diff(y)./diff(x);
>> f2=cos(x(1:end-1));
>> plot(x(1:end-1),f1,x(1:end-1),f2);
>> d=norm(f1-f2)
d =
0.0433
2.数值积分
(1)数值积分基本原理
在有些情况下,应用牛顿—莱布尼兹公式有困难,例如,当被积函数的原函数无法用初等函数表示,或被积函数是用离散的表格形式给出的。这时就需要用数值解法来求定积分的近似值。
在高等数学中,计算定积分依靠微积分基本定理,只要找到被积函数f(x)的原函数大F(x),则可用牛顿—莱布尼兹(Newton-Leibniz )公式:
⎰-=b
a a F
b F x
x f
)
()(d )(
求定积分的数值方法多种多样,如梯形法、辛普森(Simpson )法、高斯求积公式等。它们的基本思想都是将积分区间[a ,b]分成n 个子区间[x i ,x i+1],i=1,2,…,n ,其中x 1=a ,x n+1=b ,这样求定积分问题就分解为下面的求和问题:
在每一个小的子区间上定积分的值可以近似求得,从而避免了牛顿—莱布尼兹公式需要寻求原函数的困难。
⎰∑⎰=+=
=
b
a n
i
x x i i
x
x f x
x f S
1
1
d )(d )(
(2)数值积分的实现
☐基于自适应辛普森方法
[I,n]=quad(filename,a,b,tol,trace)
☐基于自适应Gauss-Lobatto方法
[I,n]=quadl(filename,a,b,tol,trace)
其中,filename是被积函数名;a和b分别是定积分的下限和上限,积分限[a,b]必须是有限的,不能为无穷大(Inf);tol用来控制积分精度,默认时取
tol=10-6;trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,默认时取trace=0;返回参数I即定积分的值,n为被积函数的调用次数。
例2 分别用quad 函数和quadl 函数求定积分的近似值,并在相同的积分精度下,
比较被积函数的调用次数。
x d x
14
1
2
⎰
+>> format long
>> f=@(x) 4./(1+x.^2); >> [I,n]=quad(f,0,1,1e-8) I =
3.141592653733437 n = 61
>> [I,n]=quadl(f,0,1,1e-8) I =
3.141592653589806 n = 48
>> (atan(1)-atan(0))*4 ans =
3.141592653589793 >> format short