这两天写了圆交和圆并
圆交和圆并都有非常优美的O(n^2logn)算法,AekdyCoin有讲
但是像这种求面积的题还可以用Simpson积分法
简单的说就是将一段函数积分用二次函数积分拟合
一听这种搞法就知道是乱搞……但是很多时候比较有用……
嗯……像是求圆并的话,可以这样做
将x轴某一点上各个圆并所对应的长度视为函数值,用Simpson积分拟合
圆并在x轴上某一点对应的长度比较好算

如图,蓝色的那一段就是这一点对应的函数值,那么实际上就是每个圆和直线求一次交,得到的一段线段再做一次线段覆盖
看的出来复杂度是比较高的……每求一次函数值就是O(n)
具体的拟合怎么做呢
对于一段区间(l,r)我们首先计算f(l),f(r),f(mid)
然后(l,r)对应的拟合积分就是(f(l)+f(r)+4*f(mid))*(r-l)/6
然后再分别计算(l,mid),(mid,r)的积分
如果误差<eps,认为这一段拟合正确,否则递归计算两个区间
又好想又好写~~
问题是,这样做真是乱搞的……
在做得时候要注意几个问题
一是最好确保积的这一段函数是连续的,否则极有可能出现4个峰分别在mid两边,你积出来得0的情况……
二是注意精度……如果输出要求精确到几位,你的eps最好比他高几个数量级……否则容易出错……而精度设高的代价为非常慢……
综上所述,Simpson积分法虽然不失为一个非常优秀的算法
但是由于他的种种问题,在可以想出正解或者有比他更好的算法的时候尽量少用……
优点就是适用范围广,好想好实现
如果没想出什么更好的算法就尽管用吧,总比没分好……
但是如果是ACM或者TC,CF之类的需要全部AC的慎用……或者eps精度高一点……
话说这样的考试一般不会出积分才能过的题吧……
SPOJ CIRU的代码 //此题为裸圆并
P.S:
bzoj上有道和这个一模一样的圆并,但是eps得设到1e-13才能AC,可见Simpson积分十分不稳定啊
分享到:
相关推荐
自适应 Simpson 积分算法(MATLAB 及 C++ 实现代码) 在计算数学中,数值积分是计算一个函数在某个区间上的积分近似值的过程。自适应 Simpson 积分算法是一种常用的数值积分方法,通过递归地将积分区间分割成小区间...
数值计算方法中关于复化Simpson积分和复化梯形积分的c语言程序源代码,并提供相应误差估算
自适应 Simpson 积分算法(MATLAB 及 C++ 实现代码) 自适应 Simpson 积分算法是 numerical analysis 中一种常用的数值积分方法。它可以用来对定积分进行近似计算。该算法的主要思想是将积分区间不断地分割成小区间...
本文将详细讨论几种常见的数值积分方法,包括标题中提到的Legendre多项式、复化Simpson积分以及Simpson规则,这些都是数值积分的重要工具。 首先,让我们从基本的梯形法则开始,它是最简单的数值积分方法之一。梯形...
复化Simpson公式是数值积分领域中一种高效且精确的方法,主要用于近似求解定积分。在数学分析中,定积分是衡量曲线下的面积、物理问题中的总能量或概率等概念的重要工具。然而,某些函数的原函数无法用基本函数表达...
Simpson积分法是一种数值积分方法,它利用多项式插值的思想来近似函数的积分。这种方法以简洁有效著称,尤其适用于光滑连续的函数。以下是对Simpson积分法及其相关变种的详细阐述。 ### Simpson积分法 Simpson积分...
数值积分课程需编制自适应的Simpson公式,此代码采用递归函数,函数中采用了fcnchk函数,matlab6.5及以下版本会报错,只需将函数定义语句改成inline函数即可
在数值分析中,Simpson公式是一种基于多项式插值的数值积分方法,适用于计算定积分。它假设被积函数在某一小区域内可以用二次多项式近似表示,进而通过求解这个二次多项式的积分来估算原函数的积分值。 **基本形式...
### Simpson积分器与时域积分对比频域积分 在数学计算和工程应用中,积分是解决许多实际问题的重要工具之一。对于信号处理领域而言,如何高效准确地进行积分运算尤为重要。本文将通过一个具体的MATLAB代码示例来...
本实验主要探讨了两种常用的数值积分方法——复化梯形公式和复化Simpson公式,这两种方法在计算复杂的数学问题时非常实用,尤其是在数值计算类课程中。 复化梯形公式是梯形法则的扩展,它将积分区间划分为多个小的...
本压缩包中包含的MATLAB程序着重于几种常见的数值积分方法,如复化梯形法则、复化辛普森法则(Simpson)以及复化科茨(Cotes)法则。下面将详细解释这些方法以及它们在MATLAB中的实现。 1. **复化梯形法则**:复化...
1. 常用的数值积分方法(特别是梯形法、Simpson方法、 Cotes公式、Romberg算法以及Gauss 求积公式)的原理;2. 复合梯形公式,复合Simpson公式,Romberg算法的程序
"JiFen.rar_simpson_simpson积分_梯形公式_梯形求积分_梯形积分公式"这个压缩包文件主要涉及到的是两种常用的数值积分方法:Simpson法则和梯形法则。这些方法用于近似解决那些不能直接通过解析方式求解的积分问题。 ...
文章的基金项目部分提到了江西省高等学校教学研究省级立项课题《关于在高校数学教学中应用试验教学的研究》,这表明本研究可能也与高等教育教学改革相关,即通过MATLAB平台进行的复合Simpson数值积分法的研究与实践...
复化simpson公式计算定积分,matlab程序实现,需要输入积分函数、上下限和所分步数,希望能对大家的学习有帮助。
simpson积分法求函数的积分,有利于积分算法得到所需要的值
自适应 Simpson 积分算法的 MATLAB 及 C++ 实现代码 自适应 Simpson 积分算法是一种数值积分方法,用于计算定积分的近似值。该算法通过自适应地选择积分区间和步长,从而提高计算精度。以下是对自适应 Simpson 积分...
Simpson二重积分数值算法,注释比较详细
在给定的标题和描述中,我们关注的是三种数值积分方法:复化梯形积分法、复化Simpson积分法和Gauss-Legendre求积法,这些方法在VC(Visual C++)环境下被实现,并有MATLAB测试程序作为辅助验证。 1. **复化梯形积分...
变步长simpson积分c语言程序,期中f函数就是是被积函数。如果要改被积函数请改f函数