积分

Integration

  • 符号积分
  • 数值积分
    • trapz
    • quad, quadl, quadv
  • 数值二重积分
    • dblquad

int方法

  1. 定义
  • int 被称为符号积分法,结果都是准确值
  • int(f, x)
  1. 用法
>> syms x
>> y1=1/(1+x^4);
>> fy1=int(y1)
fy1 =
2^(1/2)*atan(2^(1/2)*x*(1/2 - 1i/2))*(1/4 + 1i/4) + 2^(1/2)*atan(2^(1/2)*x*(1/2 + 1i/2))*(1/4 - 1i/4)

>> y2=(x*exp(x))/(1+x)^2;
>> fy2=int(y2,0,1)
fy2 =
exp(1)/2 - 1

>> y3=1/(x^2+2*x+3); 
>> fy3=int(y3,-inf,+inf)
fy3 =
(pi*2^(1/2))/2

trapzcumtrapz

  1. 定义:
  • trapz 和 cumtrapz 函数都是基于梯形积分的函数,trapz 就是 Trapezoidal(梯形)。使用的方法就是“无限等分求和”。
    • 将积分区间划分为一定数量的等间距的子区间,然后将每段子区间上的函数曲线用一段直线近似,该直线经过由小区间端点对应的原曲线上的两个端点。所以,从本质上讲,梯形积分只不过是一种 “分段线性近似”。
  • 对于高次函数(次数>=2)时,梯形积分在划分区间数目一定的情况下可能会很变得不精确(尤其是当被积函数不连续或震荡性很大时),而且,在子区间数固定的情况下,被积函数次数越高,梯形积分精度就越差。
  • 为了使得梯形积分变得更加精确,你需要用更小的间隔来划分更多的子区间,即用更多的子区间来近似。
  • cumtrapz函数和trapz函数使用方法类似,但是返回的结果不一样。前面的cum是cumulation的意思,也就是累积,相当于是不断地从第一个值累积到当前的结果。
  1. 用法举例
% trapz 用法
>> x=0:0.05:1;
>> y=x.^3-2.*x-3;
>>I=trapz(x,y)
I =
   -3.7494

% cumtrapz 用法
>> x=0:0.1:1;
>> y=x.^3-2.*x-3;
>> Z=cumtrapz(x,y)
Z =
    0   -0.3100   -0.6395   -0.9878   -1.3532   -1.7337   -2.1267   -2.5287 -2.9360   -3.3440   -3.7475

quad

  1. 定义:
  • MATLAB提供的quad()函数是基于自适应辛普森法设计的,
  • 该函数的调用格式为: [q,fcnt] = quad(fun,a,b,tol,trace,p1,p2,...)
    • fun是被积函数,可以是字符表达式、内联函数、匿名函数和M函数;
    • a,b是定积分的上限和下限;
    • tol为指定的误差限,缺省值:1e-6;
    • trace提供中间输出 [fcnt a b-a q] ,若trace=0,则quad不提供中间输出;非0则展现输出
    • p1,p2,...是函数fun的附加参数。
    • q是返回的数值积分;fcnt返回函数评估的次数。
  • 另外,MATLAB还提供了一个新的函数quadl(),也称为 高精度Lobatto积分法 。其调用格式与quad()函数完全一致,使用的算法是自适应Lobatto算法,其精度和速度均远高于quad()函数,所以在追求高精度数值解时建议使用该函数。
  • 自适应Gauss-Kronrod数值积分。z = quadgk(Fun,a,b)
  • 积分法矢量化自适应simpson数值积分。z = quadv(Fun,a,b)。这个函数的优点在于同时计算多个积分。
  1. 用法
>>F = @(x)1./(x.^3 - 2.*x -5)
F =
  function_handle with value:
    @(x)1./(x.^3-2.*x-5)

>>quad(F, 0, 2)
ans =
   -0.4605
   
% quadv 方法
>> F = @(x,n)1./((1:n) + x.^2)
F =
  function_handle with value:
    @(x,n)1./((1:n)+x.^2)
>> quadv(@(x)F(x,6), 0, 1)
ans =
    0.7854    0.4352    0.3023    0.2318    0.1881    0.1582

数值二重积分

  1. 定义: I=dblquad(f,a,b,c,d,tol,trace),求f(x,y)在[a,b]×[c,d]区域上的二重积分。
  2. 用法举例
>> f = @(x,y)exp(-x.^2/2).*sin(x.^2 + y)
f =
  function_handle with value:
    @(x,y)exp(-x.^2/2).*sin(x.^2+y)
>> dblquad(f, -2, 2, -1, 1)
ans =
    1.5745
原文地址:https://www.cnblogs.com/rongyupan/p/12662525.html