打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
14.2 定积分

14.2 定积分

  • 14.2.1梯形法则

    • 完整代码

    • trap函数

  • 14.2.2 辛普森法则

  • 14.2.3 quad

尽管大多数“可接受的”数学函数可以通过解析方法进行求导,但对于积分来说,情况并非如此。与求导规则不同,积分没有通用的规则。例如,即使是像 这样简单的函数的不定积分也无法通过解析方法找到。因此,我们需要数值方法来求解积分。

这其实相当简单,它依赖于一个事实,即函数 之间的定积分等于由 轴和垂直线 所围成的面积。因此,求解积分的所有数值方法都涉及以更多或更少巧妙的方式估计 下的面积。

14.2.1梯形法则

梯形法则是编程实现起来相当简单的数值积分方法。它将函数 下的面积分成宽度为 的垂直面板,称为步长。如果有 个这样的面板,那么 ,即 。如果我们连接相邻面板与 的交点,我们可以估计 下的面积,其为最终得到的梯形的面积之和。如果我们将这个对积分的近似值称为 ,则

其中 。上式为梯形法则,给出了积分的估计.

这是一个用于实现梯形法则的函数:

function y = trap( fn, a, b, h )
n = (b-a)/h;
x = a + [1:n-1]*h;
y = sum(feval(fn, x));
y = h/2*(feval(fn, a) + feval(fn, b) + 2*y);
  1. 输入参数:

    • fn:要进行积分的函数
    • a:积分区间的起始点
    • b:积分区间的终点
    • h:步长
  2. 计算步长数量 n:根据输入的起始点和终点,以及步长 h,计算步长数量 n,即 (b-a)/h

  3. 计算梯形面板上的 x 值:创建一个长度为 n-1 的向量 x,用于存储梯形面板上的 x 值。通过计算 x = a + [1:n-1]*h 得到每个面板的 x 值。

  4. 计算面板上函数值的总和:使用 feval 函数调用输入的函数 fn,在每个面板的 x 值处计算函数值,并将这些函数值相加。

  5. 计算积分的近似值:使用梯形法则的数值公式计算积分的近似值。首先,计算首尾两个点的函数值,然后将其与面板上函数值的总和相加,并乘以步长 h 的一半。

  6. 返回积分的近似值:将计算得到的近似值 y 返回给调用者。

需要注意的是:

  • 输入的函数 fn 必须在其 .M 文件实现中使用适当的数组操作符,以便能够进行向量化计算。
  • 用户必须选择适当的步长 h,以确保步数 n 是一个整数,可以在函数中进行步数检查。

通过调用这个 trap 函数,可以实现对函数的数值积分,使用梯形法则进行面积估计。


计算函数 在区间 0 到 4 上的积分。在函数 .M 文件中,需要将 定义为 x.^3。可以按照以下方式调用 trap 函数来计算积分估计值:

h = 0.1
s = trap(@f, 04, h)

这将使用步长 来计算积分的近似值为 64.04。如果将步长改为 ,则积分的近似值为 64.0004(精确积分值为 64)。可以观察到,随着步长的减小,积分的估计值变得更加准确。

这个例子假设 是一个连续函数,可以在任意 处进行评估。在实际应用中,函数可能是在离散点上定义的,作为实验结果的一部分提供。例如,一个物体的速度 可能每隔一段时间测量一次,人们可能希望通过速度-时间曲线下的面积来估计行驶距离。在这种情况下,trap 函数需要修改,通过替换 fn 为函数值的向量来处理离散数据。这个修改可以作为一个有趣的练习。另外,你也可以使用 MATLAB 的 interp1 函数来对数据进行插值。

完整代码

% 定义函数 f(x)
function y = f(x)
    y = x.^3;
end

% 梯形法则计算积分估计值的函数
function y = trap(fn, a, b, h)
    n = (b - a) / h;
    x = a + (1:n-1) * h;
    y = sum(feval(fn, x));
    y = h/2 * (feval(fn, a) + feval(fn, b) + 2*y);
end

% 主程序
h = 0.1;  % 步长
a = 0;    % 区间下限
b = 4;    % 区间上限

% 调用 trap 函数计算积分估计值
s = trap(@f, a, b, h);
disp(s);  % 打印积分估计值

trap函数

trap 函数是用来计算梯形法则的积分估计值的。

function y = trap(fn, a, b, h)
  • fn:函数句柄(function handle),指定要进行积分的函数。函数句柄用 @ 符号后跟函数名的方式来表示。
  • a:积分区间的下限。
  • b:积分区间的上限。
  • h:步长,定义每个梯形面板的宽度。

函数主体:

    n = (b - a) / h;
    x = a + (1:n-1) * h;
    y = sum(feval(fn, x));
    y = h/2 * (feval(fn, a) + feval(fn, b) + 2*y);
  • 首先根据步长 h 计算出面板的数量 n
  • [a, b] 区间上生成每个面板上的 x 值,存储在向量 x 中。
  • 使用 feval 函数,在每个面板的 x 值处计算函数值,并将这些值相加得到面板上函数值的总和。
  • 最后,根据梯形法则的数值公式,计算积分的近似值 y

返回值:

  • y:计算出的积分的近似值。

使用时,需要提供要进行积分的函数的函数句柄,设置积分区间的下限 a 和上限 b,以及所需的步长 h,并调用 trap 函数即可计算积分的近似值。

示例用法:

h = 0.1;  % 步长
a = 0;    % 区间下限
b = 4;    % 区间上限

% 调用 trap 函数计算积分估计值
s = trap(@f, a, b, h);

以上示例中,trap 函数被用来计算函数 f(x) = x^3 在区间 [0, 4] 上的积分估计值,步长为 0.1。计算结果存储在变量 s 中。根据需求,可以对 abh 进行调整以适应不同的积分计算。

14.2.2 辛普森法则

Simpson's rule(辛普森规则)是一种数值积分方法,比梯形法则更准确,通常在尝试其他更复杂的方法之前应使用它。辛普森规则将要积分的函数 的区域分成垂直条带,但与用直线连接点 不同的是,每个连续的三个点被拟合成一个抛物线。为了确保总是有偶数个面板,通常选择步长 ,使得面板的数量为 ,即 。使用与之前相同的符号,辛普森规则通过以下公式估计积分值:

将这个公式编码为函数.M文件留做练习。

辛普森规则具有一个有趣的额外优势:它能精确地积分三次多项式(可以证明)。因此,如果你尝试在任意限制下应用辛普森规则来计算 的积分,你会发现令人惊讶的是,它给出的结果与精确的数学解相同。


下面是将辛普森规则公式编码为函数.m文件的示例代码:

function S = simpsons_rule(f, a, b, n)
    h = (b - a) / (2 * n);
    
    % 计算奇数索引和偶数索引的函数值总和
    sum_odd = 0;
    sum_even = 0;
    for i = 1:n-1
        x = a + 2*i*h;  % 奇数索引处的x值:a + 2i*h
        sum_odd = sum_odd + feval(f, x);
        
        x = a + (2*i+1)*h;  % 偶数索引处的x值:a + (2i+1)*h
        sum_even = sum_even + feval(f, x);
    end
    
    % 计算积分估计值
    S = (h/3) * (feval(f, a) + feval(f, b) + 2*sum_odd + 4*sum_even);
end

上述代码定义了一个名为 simpsons_rule 的函数。它接受以下参数:

  • f:积分函数的函数句柄。
  • a:积分区间的下限。
  • b:积分区间的上限。
  • n:面板的数量,这决定了步长(h)的大小。

函数的主体中,首先根据步长公式计算步长 h。然后使用循环计算奇数索引和偶数索引处的函数值总和。最后,使用辛普森规则的公式计算积分的近似值,并将结果返回。

使用此函数,可以进行以下示例调用:

f = @(x) x.^3;  % 定义积分函数
a = 0;          % 区间下限
b = 2;          % 区间上限
n = 10;         % 面板的数量

S = simpsons_rule(f, a, b, n);  % 调用辛普森规则函数计算积分

disp(S);  % 输出积分的近似值

以上示例中,我们使用积分函数 f(x) = x^3 在区间 [0, 2] 上应用辛普森规则来计算积分的近似值。我们选择 10 个面板来进行估计。计算结果存储在变量 S 中,并通过 disp 函数输出。根据需要,你可以调整函数的参数来适应不同的积分计算。

14.2.3 quad

quad函数是MATLAB中用于数值积分(quadrature)的函数。它可以用于计算定积分,即对一个给定函数在指定区间上的积分值。quad函数的语法如下:

Q = quad(fun, a, b)
Q = quad(fun, a, b, tol)
Q = quad(fun, a, b, tol, args)

参数说明:

  • fun:代表要进行积分的函数,可以是匿名函数、函数句柄或函数名称。
  • ab:代表积分区间的上下界。
  • tol:代表可接受的积分误差,默认为1e-6。较小的误差值会增加计算时间,但提供更精确的结果。
  • args:可选参数,传递给 fun 函数的附加参数。

quad函数使用的是自适应数值积分算法,它根据积分区间内的函数变化情况自动调整积分的步长。该算法会将积分区间分成多个小段,并在每个小段上进行数值积分,然后将结果相加得到最终的积分值。

quad函数返回的结果是一个数值,代表了对指定函数在指定区间上的数值积分值。请注意,quad函数仅适用于连续的函数。对于不连续或具有特殊性质的函数,可能需要使用其他数值积分方法或手动处理。

使用quad函数时,可以通过调整容差(tol)参数来控制积分的精确度和计算效率。较小的容差值将产生更准确的积分结果,但可能需要更长的计算时间。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
介绍数学分析内容体系中体现的函数\极限\连续\可导\积分\级数思想的产生,发展,内涵,本质及应用
matlab 实验二 定积分的近似计算
大学高等数学: 第四章第一讲定积分的概念与性质
数值分析第五版答案(全)
数与图(18)——求积分
7.1:定积分的概念和基本性质
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服