matlab实现数值积分 【二】(integral函数)

如果被积函数的数学表达式已知,但解析解不易求,可使用数值积分的方法求解积分。

函数调用格式

函数调用格式

应用举例

例1:求解数值解并检验其精度

计算积分 f ( x ) = 2 π ∫ 0 1.5 e − t 2 d t f(x)=\frac{2}{\sqrt{\pi}} \int_0^{1.5} {e^{-t^2} {\rm d} t} f(x)=π 201.5et2dt

f = @(x) 2/sqrt(pi)*exp(-x.^2);  % //匿名函数
y = integral(f,0,1.5)  % //数值求解

结果为 y = y= y=0.96610514647531

求解解析解:
syms x, y0=vpa(int(2/sqrt(pi)*exp(-x^2),0,1.5),60)
结果为: y 0 = y_0= y0=0.96610514647531

结论:可以看出,默认选项下数值解函数integral()便可保证高精度的数值解。

例2:分段函数积分

给定如下分段函数:
f ( x ) = { e x 2 , 0 ≤ x ≤ 2 80 4 − sin ⁡ ( 16 π x ) , 2 < x ≤ 4 f(x)= \begin{cases} e^{x^2} , & 0 \leq x \leq 2 \\ \frac{80}{4 - \sin(16\pi x)} , & 2 < x \leq 4 \\ \end{cases} f(x)={ex2,4sin(16πx)80,0x22<x4
计算积分值 I = ∫ 0 4 f ( x ) d x I=\int_{0}^{4} f(x) {\rm d} x I=04f(x)dx

  • 绘制 f ( x ) f(x) f(x)填充图
x=[0:0.01:2, 2+eps:0.01:4,4]; 
y=exp(x.^2).*(x<=2)+80./(4-sin(16*pi*x)).*(x>2); 
x=[eps,x,4-eps]; y=[0,y,0]; fill(x,y,'g') %//绘制填充图

f(x)填充图

  • 求解与验证
f = @(x) exp(x.^2).*(x<=2)+80./(4-sin(16*pi*x)).*(x>2); 
I1 = integral(f,0,4)   %//数值解
I2 = integral(f,0,4,'RelTol',1e-20)   %//提高精度
syms x
f = piecewise( x<=2, exp(x^2),  x>2, 80/(4-sin(16*pi*x)) ); 
I0 = vpa(int(f,x,0,4))   %//解析解

结果为:

变量
I 0 I_0 I0(精确解析解)57.76445012505301 033331523538518
I 1 I_1 I1(正常数值解)57.7644501250 4850495815844624303
I 2 I_2 I2(高精度数值解)57.76445012505301 690453052287921

例3:与梯形法比较

重新计算积分
∫ 0 3 π 2 cos ⁡ ( 15 x ) d x \int_{0}^{\frac{3\pi}{2}} \cos (15x) {\rm d} x 023πcos(15x)dx

f = @(x) cos(15*x); 
S=integral(f,0,3*pi/2,'RelTol',1e-20)

结论:和梯形法相比,速度和精度明显提高。

例4:大范围积分

计算积分 ∫ 0 100 cos ⁡ ( 15 x ) d x \int_{0}^{100} \cos (15x) {\rm d} x 0100cos(15x)dx

f = @(x)cos(15*x); 
I1 = integral(f,0,100,'RelTol',1e-20)  %//数值解
syms x 
I0 = int(cos(15*x),x,0,100); vpa(I0)   %//解析解

解析解: I 0 = − 0.066260130460443564274928241303306 I_0= -0.066260130460443564274928241303306 I0=0.066260130460443564274928241303306
数值解: I 1 = − 0.066260130460282923303694246897066 I_1= -0.066260130460282923303694246897066 I1=0.066260130460282923303694246897066

例5:广义积分的数值计算

计算 ∫ 0 ∞ e − x 2 d x \int_{0}^{\infty} e^{-x^2} {\rm d} x 0ex2dx

f = @(x) exp(-x.^2); 
I1 = integral(f,0,inf,'RelTol',1e-20)  %//数值解
syms x
I0 = int(exp(-x^2),0,inf); vpa(I0)     %//解析解

解析解: I 0 = 0.88622692545275801364908374167057 I_0= 0.88622692545275801364908374167057 I0=0.88622692545275801364908374167057
数值解: I 1 = 0.88622692545275805198201624079957 I_1= 0.88622692545275805198201624079957 I1=0.88622692545275805198201624079957

例6:含参函数数值积分

绘制积分函数 I ( α ) I(\alpha) I(α)曲线 I ( α ) = ∫ 0 ∞ e − α x 2 sin ⁡ ( α x 2 ) d x I(\alpha) = \int_{0}^{\infty} e^{-\alpha x^2} \sin (\alpha x^2) {\rm d} x I(α)=0eαx2sin(αx2)dx

a = 0:0.1:4;
f = @(x)exp(-a*x.^2).*sin(a.^2*x);
I = integral(f,0,inf,'RelTol',1e-20,'ArrayValued',true);
plot(a,I),  xlabel('\alpha'),  ylabel('I(\alpha)')

含参函数数值积分

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页