F#实现Simpson's Rule求数值积分

简介: 我们知道,微积分的求值是比较复杂的。一般来说,求积分有定积分和不定积分之分。不定积分需要求出具体的表达式,但被积函数非常复杂时,求解非常费劲,非常可能找不到原函数。而定积分给定了区间范围,可以利用数值方法,利用F#实现对积分的数值计算。

     我们知道,微积分的求值是比较复杂的。一般来说,求积分有定积分和不定积分之分。不定积分需要求出具体的表达式,但被积函数非常复杂时,求解非常费劲,非常可能找不到原函数。而定积分给定了区间范围,可以利用数值方法,利用微分的本质原理来进行积分数值计算。当前,微积分的数值计算方法很多,比如常见的有如下算法:梯形规则,辛普森规则和龙贝格规则。

1 Simpson's Rule原理

     下面我们介绍一下辛普森规则如何求数值积分,积分的数值本质上就是被积函数f(x)下的面积,定积分f(x) 在[a,b]上的数值就是被积函数f(x)在x轴a和b围起来的面积。当按照x轴方向,分成非常多的份,每一个份∇x就是非常小的微分单位,比如0.00001,这样曲线的面积,就可以近似看成是梯形或者方形和三角形的和等。下面给出辛普森规则的推导公式:

1(35).jpg

此公式也有其他的表现形式,但是基本原理相同。它也称作Simpson’s 1/3 rule 。公式来自: http://www.numericmethod.com/About-numerical-methods/numerical-integration/simpson-s-rule  

2 F#Simpson's Rule实现

     结合如上的算法公式,用F#语言可实现数值积分的计算,代码如下:

moduleNumMethodletrecNIntfab=letnumSteps=1000000leth=double(b-a) / (double(numSteps))
letmutablevalueEven=double(0.)
letmutablevalueOdd=double(0.)
fori=0tonumStepsdoifi%2<>0thenvalueOdd<-valueOdd+f( a+h*double(i))
elsevalueEven<-valueEven+f(a+h*double(i))
        (f(a)+f(b)+4.0*valueOdd+2.0*valueEven)*(h/3.0)

    这里的微分步长numSteps可以根据需要进行调整,理论上,越大应该精确度越高,但是性能越差。算法的本质就是在区间[a,b]上去划分成N个小区域,然后计算每个小区域的面积,而小区域的面积的一边虽然是曲线f(x),但由于间距很小,可用直线近似替代。最后将每个小区域的面积相加即可完成数值积分的近似计算。

3 测试

     下面给定一些函数来进行定积分数值的计算测试,代码如下:

lettest=letf1x=2.+cos(2.*sqrt(x))
letz=NIntf10.12.0printfn"%f"z//3.169783 //3.1697776595193/////////////////////////letf2x=2.*xletz=NIntf21.2.0printfn"%f"z//3.000004  // 3 

由测试可知,在一定的精确度下,数值积分的结果与实际的积分结果还是比较接近的。

相关文章
|
缓存 前端开发 Java
13:SpringBoot跨域解决方案-Java Spring
13:SpringBoot跨域解决方案-Java Spring
697 0
|
数据安全/隐私保护
fiddler抓包-查看get与post请求参数
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/81566563 Fiddler抓包3-查看get与post请求 前言 前面两篇关于Fiddler抓包的一些基本配置,配置完之后就可以抓到我们想要的数据了,接下来就是如何去分析这些数据。
7055 0
|
7月前
|
机器学习/深度学习 监控 数据可视化
人体跌倒识别检测项目|全流程源码+数据集+可视化界面+一键训练部署
本项目基于 YOLOv8 模型和 PyQt5 图形界面工具,构建了一个 人体跌倒识别系统,旨在通过计算机视觉技术监测老年人等群体的跌倒行为。项目提供了完整的 源码、数据集、训练流程、以及开箱即用的检测程序,确保用户能够快速搭建并部署自己的跌倒识别系统。
人体跌倒识别检测项目|全流程源码+数据集+可视化界面+一键训练部署
|
9月前
|
数据采集 人工智能 自然语言处理
AI时代KPI管理全指南:2025年六项工具横向测评与最佳实践
KPI(关键绩效指标)管理正从传统考核向融合目标、过程与数据的智能化系统演进。本文详解其技术架构与实施路径,解析主流工具功能特性,提供科学选型建议。内容涵盖KPI体系设计、数据采集、分析反馈及热点问题解决方案,助力企业构建数据驱动的高效绩效管理系统,实现战略闭环管理。
1340 0
|
机器学习/深度学习 数据采集 人工智能
GeneralDyG:南洋理工推出通用动态图异常检测方法,支持社交网络、电商和网络安全
GeneralDyG 是南洋理工大学推出的通用动态图异常检测方法,通过时间 ego-graph 采样、图神经网络和时间感知 Transformer 模块,有效应对数据多样性、动态特征捕捉和计算成本高等挑战。
416 18
GeneralDyG:南洋理工推出通用动态图异常检测方法,支持社交网络、电商和网络安全
|
算法 API 调度
深入探索:在std::thread中创建并管理QEventLoop的全面指南(一)
深入探索:在std::thread中创建并管理QEventLoop的全面指南
553 1
|
Web App开发 前端开发 JavaScript
用electron打包前端应用初体验
用electron打包开发桌面应用遇到的各种问题和解决办法
|
监控 关系型数据库 MySQL
基于AnolisOS8.6+PolarDB-X部署ZABBIX6.0
在AnolisOS-8.6-x86_64-minimal虚拟环境中,使用VirtualBox配置2 vCPU,4G RAM和60 vDisk,下载并安装PolarDB-X,包括libaio和ncurses-devel依赖。创建polarx用户,设置权限和目录结构,编写my.cnf配置文件,然后初始化并启动PolarDB-X。接着安装ZABBIX 6.0,创建数据库、用户及权限,导入数据,并编辑Zabbix配置文件以匹配PolarDB-X。最后,重启相关服务,启用并检查状态,通过指定IP访问Zabbix Web界面,注意初始账号密码为Admin / zabbix。
|
Web App开发 编解码 iOS开发
iOS字体像素与磅的对应关系
iOS字体像素与磅的对应关系
1863 1
WXM
|
Java 应用服务中间件 网络安全
Eclipse运行SSM/SSH项目教程
Eclipse运行SSM/SSH项目教程
WXM
754 0

热门文章

最新文章