当前位置: 首页 > news >正文

数值积分:通过复合梯形法计算

在物理学和工程学中,很多问题都可以通过数值积分来求解,特别是当我们无法得到解析解时。数值积分是通过计算积分区间内离散点的函数值来近似积分的结果。在这篇博客中,我将讨论如何使用 复合梯形法 来进行数值积分,并以一个简单的计算为例,展示如何使用该方法,并附带Matlab程序。

数值积分的基本原理

数值积分的基本思想是将一个连续的积分问题转化为离散的求和问题,通常是通过将积分区间划分成若干小的子区间。

复合梯形法

复合梯形法就是其中的一种方法,它的基本原理如下:

  1. 首先,将积分区间分为 n 个小区间,每个小区间的宽度为 h。
  2. 然后,利用梯形公式近似每个小区间内函数的积分:
    在这里插入图片描述

将积分区间 [ a , b ] [a, b] [a,b] 划分为 n n n 等分,则每个小区间的宽度为: h = b − a n h = \frac{b - a}{n} h=nba
因此,积分可以表示为:
I = ∫ a b f ( x ) d x = ∑ k = 0 n − 1 ∫ x k x k + 1 f ( x ) d x I = \int_a^b f(x) \, dx = \sum_{k=0}^{n-1} \int_{x_k}^{x_{k+1}} f(x) \, dx I=abf(x)dx=k=0n1xkxk+1f(x)dx
每个子区间 [ x k , x k + 1 ] [x_k, x_{k+1}] [xk,xk+1] 上的积分使用梯形公式,得到:
∫ x k x k + 1 f ( x ) d x ≈ h 2 [ f ( x k ) + f ( x k + 1 ) ] \int_{x_k}^{x_{k+1}} f(x) \, dx \approx \frac{h}{2} \left[ f(x_k) + f(x_{k+1}) \right] xkxk+1f(x)dx2h[f(xk)+f(xk+1)]
因此,整个区间的积分为:
I = ∫ a b f ( x ) d x = ∑ k = 0 n − 1 ∫ x k x k + 1 f ( x ) d x ≈ ∑ k = 0 n − 1 h 2 [ f ( x k ) + f ( x k + 1 ) ] = h 2 { [ f ( x 0 ) + f ( x 1 ) ] + [ f ( x 1 ) + f ( x 2 ) ] + … + [ f ( x n − 2 ) + f ( x n − 1 ) ] + [ f ( x n − 1 ) + f ( x n ) ] } = h 2 [ f ( x 0 ) + 2 ∑ k = 1 n − 1 f ( x k ) + f ( x n ) ] = h 2 [ f ( a ) + f ( b ) ] + h ⋅ ∑ k = 1 n − 1 f ( x k ) \begin{aligned} I&= \int_a^b f(x) dx = \sum_{k=0}^{n-1} \int_{x_k}^{x_{k+1}} f(x) \, dx \\ &\approx \sum_{k=0}^{n-1} \frac{h}{2} \left[ f(x_k) + f(x_{k+1}) \right] \\ &= \frac{h}{2} \{ [ f(x_0) + f(x_1)] + [f(x_1) + f(x_2)] +\dots \\ &+ [f(x_{n-2}) + f(x_{n-1})] + [f(x_{n-1}) + f(x_{n})] \} \\ &= \frac{h}{2} \left[ f(x_0) + 2\sum_{k=1}^{n-1} f(x_k) + f(x_n) \right] \\ &= \frac{h}{2} \left[ f(a)+f(b) \right] + h \cdot \sum_{k=1}^{n-1}f(x_k) \\ \end{aligned} I=abf(x)dx=k=0n1xkxk+1f(x)dxk=0n12h[f(xk)+f(xk+1)]=2h{[f(x0)+f(x1)]+[f(x1)+f(x2)]++[f(xn2)+f(xn1)]+[f(xn1)+f(xn)]}=2h[f(x0)+2k=1n1f(xk)+f(xn)]=2h[f(a)+f(b)]+hk=1n1f(xk)
其中:
x k x_k xk 是区间内的离散点: x k = a + k ⋅ h x_k = a + k \cdot h xk=a+kh
f ( x ) f(x) f(x) 是被积函数。
最后一项称为复化梯形公式,记为:
T n = h 2 [ f ( a ) + 2 ∑ k = 1 n − 1 f ( x k ) + f ( b ) ] T_n = \frac{h}{2} \left[ f(a) + 2 \sum_{k=1}^{n-1} f(x_k) + f(b) \right] Tn=2h[f(a)+2k=1n1f(xk)+f(b)]

误差:若 f ( x ) ∈ C 2 [ a , b ] f(x) \in C^2[a, b] f(x)C2[a,b],其求积余项
R n ( f ) = − b − a 12 h 2 f ′ ′ ( η ) , 其 中 η ∈ [ a , b ] R_n(f) = -\frac{b-a}{12} h^2 f^{\prime\prime}(\eta), \ 其中 \eta \in [a, b] Rn(f)=12bah2f(η), η[a,b] 可以看出误差是 h 2 h^2 h2阶,复化梯形公式是收敛的。此外, T n T_n Tn 的求积系数均为正,由定理 2 知复化梯形公式是稳定的。

复合梯形法的实现步骤

  1. 计算区间两端的函数值:这是梯形法中的基础项,计算 f ( a ) f(a) f(a) f ( b ) f(b) f(b)
  2. 计算区间中间点的函数值:计算区间内的所有点 f ( x 1 ) , f ( x 2 ) , … , f ( x n − 1 ) f(x_1), f(x_2), \dots, f(x_{n-1}) f(x1),f(x2),,f(xn1)
  3. 应用梯形公式:将所有小区间的结果加总,得到整个积分的近似值。

复合梯形法的代码实现 (Matlab)

例如,考虑函数 f ( x ) = ln ⁡ ∣ tanh ⁡ ( x ) ∣ 2 f(x) = \ln |\tanh(x)|^2 f(x)=lntanh(x)2 在区间 [ 0 , 2 π ] [0, 2\pi] [0,2π] 上的积分。使用复合梯形法来计算该积分:
∫ 0 2 π ln ⁡ ∣ tanh ⁡ ( x ) ∣ 2 d x ≈ h 2 [ ln ⁡ ∣ tanh ⁡ ( 0 ) ∣ 2 + 2 ∑ i = 1 n − 1 ln ⁡ ∣ tanh ⁡ ( x i ) ∣ 2 + ln ⁡ ∣ tanh ⁡ ( 2 π ) ∣ 2 ] \begin{aligned} \int_0^{2\pi} \ln |\tanh(x)|^2 \, dx & \approx \frac{h}{2} \left[ \ln |\tanh(0)|^2 + 2 \sum_{i=1}^{n-1} \ln |\tanh(x_i)|^2 + \ln |\tanh(2\pi)|^2 \right] \end{aligned} 02πlntanh(x)2dx2h[lntanh(0)2+2i=1n1lntanh(xi)2+lntanh(2π)2]
下面是使用复合梯形法实现数值积分的 MATLAB 代码:

% 定义积分区间
a = 0;       % 积分下限
b = 2*pi;    % 积分上限
n = 100;     % 将区间分成 100 个小区间
step = (b - a) / n;  % 每个小区间的宽度
x = a:step:b;  % 生成区间内的离散点% 定义被积函数
f = @(x) log(abs(tanh(x)))^2;  % 这里使用一个简单的示例函数% 复合梯形法积分
T0 = (step/2) * (f(a) + f(b));  % 计算区间两端的函数值
T1 = 0;
for i = 1:(n-1)T1 = T1 + (step) * f(x(i+1));  % 求和中间点的函数值
end
integral_result = T0 + T1;  % 得到积分结果% 输出结果
disp(['积分结果:', num2str(integral_result)]);
http://www.lryc.cn/news/537626.html

相关文章:

  • AcWing——3624. 三值字符串
  • 【JavaEE进阶】验证码案例
  • Uniapp 短视频去水印解析工具开发实现
  • 计算机网络-八股-学习摘要
  • 编程速递-庆祝Delphi诞生30周年!
  • 每天五分钟深度学习框架pytorch:搭建谷歌的Inception网络模块
  • 性能测试流程、主流性能工具
  • DeepSeek4j 已开源,支持思维链,自定义参数,Spring Boot Starter 轻松集成,快速入门!建议收藏
  • 无耳科技 Solon v3.0.8 发布,Java 企业级应用开发框架
  • 【吾爱出品】针对红警之类老游戏适用WIN10和11的补丁cnc-ddraw7.1汉化版
  • 使用 playwright 自定义 js 下载的路径和文件名
  • Kafka分区管理大师指南:扩容、均衡、迁移与限流全解析
  • 3.从零开始学会Vue--{{生命周期,工程化,组件化}}
  • Python--网络编程
  • 【java】方法的基本内存原理(栈和堆)
  • SQLMesh 系列教程4- 详解模型特点及模型类型
  • SpringBoot(接受参数相关注解)
  • hbase合并队列超长问题分析
  • FPGA的星辰大海
  • 认识vue-admin
  • STM32、GD32驱动TM1640原理图、源码分享
  • spring boot 对接aws 的S3 服务,实现上传和查询
  • PH热榜 | 2025-02-12
  • 通过例子学 rust 个人精简版 1-1
  • HTTP的前世今生:如何塑造现代互联网的交互方式?
  • Flutter_学习记录_动画的简单了解
  • 【java】for (int num : numbers) { System.out.print(num + “ “); } for里的是什么意思
  • 内容中台驱动企业CMS架构优化与高效策略
  • 我用 Cursor 开发了一款个人小记系统
  • 百问网(100ask)提供的烧写工具的原理和详解;将自己编译生成的u-boot镜像文件烧写到eMMC中