目录
前言
此部分铺垫两个基本的数学概念。
(一)振荡函数的积分
工程问题中有时需要计算如下两种形式的积分:
通常。当
很大时,
与
在区间(a,b)内与x轴会有很多个交点,此函数也被称之为振荡函数。同样地,当
很大时,
与
在区间(a,b)内与x轴也会有很多个交点,对上述函数的积分也称之为振荡函数积分。
(二)反常(广义)积分
反常积分包括两种:
1. 无界函数的反常积分
设函数f(x)在区间[a,b)上连续,b为奇异点,若对且
,称极限
为无界函数f(x)在[a,b)上的反常积分
。
2. 无穷区间上的反常积分
设对任何大于a的实数b,f(x)在[a,b)上均可积,则称极限为f(x)在无穷区间
上的反常积分
。
一. quadgk()函数在MATLAB中的运用
quadgk()函数是MATLAB基于Gauss-Kronrod算法(自适应高斯-勒让德积分法)实现的数值积分函数,该函数可以用来求解振荡函数的积分、广义积分甚至是复数积分。调用格式为:
[q,errbnd]=quadgk(fun,a,b,param1,val1,param2,val2,...)
解释:
fun是被积函数,可以是字符表达式、内联函数、匿名函数和M函数;
a,b是积分的上限和下限,它们可以为-inf和inf;
parami,vali是指相关属性名及其属性值;
返回的errbnd是绝对误差的近似边界。
二. 基于MATLAB的特殊函数积分
例题一 无穷积分
计算。
解:
MATLAB代码:
clc;clear;
format long
f1=@(x)exp(-x.^2); % 定义被积函数
I1=quadgk(f1,0,inf) % quadgk函数求解无穷积分
运行结果:I1 =0.886226925452758
例题二 间断函数积分
解:
MATLAB代码:
clc;clear;
f2=@(x)x.^5.*exp(-x).*sin(x); % 定义被积函数
[I2,errbnd] = quadgk(f2,1,10,'Waypoints',[2 5])
% 其中2,5为间断点,f(2)和f(5)具体取值不影响积分
运行结果:
I2 =-10.940771682195068
errbnd =3.317415541455360e-14
例题三 振荡积分
解:
MATLAB代码:
clc;clear;
f3=@(x)exp(x).*cos(1000*x);
I3_quad=quad(f3,0,pi) % quad函数求解,实际上结果是错的
I3_quadgk=quadgk(f3,0,pi,'MaxIntervalCount',1000) % quadgk函数求解
运行结果:
I3_quad =-0.001476265473678
I3_quadgk =2.214067045838708e-05
例题四 复数积分
解:
MATLAB代码:
clc;clear;
i=sqrt(-1);
f4=@(x)exp(-x.^2-i*x).*sin((7+2i)*x); % 定义被积函数
I4=quadgk(f4,2,6-5i) % 调用quadgk函数求解复数积分问题
运行结果:I4 =-0.924460417702932 +25.792072810727397i
结论
求解积分的函数在MATLAB中不止一个。
- quad函数适用于精确地较低,被积函数平滑性较差的数值积分
- 相比quad函数,quadl函数的精确度较高,被积函数也较为平滑
- quadgk函数的精确度最高,可以计算振荡被积函数。同时支持无限区间并且可以处理端点处的适度奇异性。此函数还可以解决沿分段性路径的围道积分。
- quadv函数将数组值fun的quad向量化。