计算几何_求面积_辛普森积分公式

本文介绍了一种数值积分方法——辛森普公式,并通过具体实例展示了如何使用该公式进行高精度数值积分计算。文章提供了详细的代码实现,并讨论了递归精度控制策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

附上一道水(模板)题

https://vjudge.net/problem/HDU-1724

和一道我认为卡精度要命的题(当然 是用这个方法被卡得要命的...)   

https://vjudge.net/problem/HDU-5858

 

/* %.17f的答案

附上 HDU-5858的答案   : 0.29276251905757444

/*
----3-----
0.29139233981798940
0.29256905497842256
0.29269850120464480
0.29275620952824744
0.29276135677808401
0.29276230281685778
0.29276248841316299
0.29276251530238584
0.29276251829065014
0.29276251894032201
0.29276251904563999
0.29276251905757444
0.29276251906022166
0.29276251906063600
0.29276251906068307
*/

*/

 

const double eps = 1e-18; // 精度 

double fx(double x) {
    // ToDo: 这儿填充自己的公式.   关于x轴区间[a, b]的公式
    // 注意: 如果求的是多个区域, 但是端点一致.那么可以一起放到fx中计算. 
//    eg: 曲线 y=2*x 与x轴的面积. (是积分求面积的 所以有正负.) 
//  return 2 * x; 
}

// 辛森普公式 
// 原理采用一条抛物线 不断二分逼近原曲线,即真实值.  
// 曲线是: Ax^2 + Bx + C 
// 这是计算过程.  AutoFix 是自适应求解的过程 时间复杂度和求解的eps精度有很大的关系. 
// 也就是说, 如果精度要求不是很高的水题可以用 辛森普公式 sososo 嗖嗖嗖嗖 
double XPS_GX(double left, double right) { return (fx(left) + 4.0 * fx((left + right) / 2.0) + fx(right) ) / 6.0 * (right - left); }


// 两种写法 
// @left , right [left, right]
// @val   ----> result
// @jeps  ----> 迭代后更新的精度. 原理我不知道. 
double AutoFix(double left, double right, double val, double jeps) {
    double mid = (left + right) / 2.0;
    double lval = XPS_GX(left, mid), rval = XPS_GX(mid, right);
    if (fabs(val - lval - rval) <= 15.0 * jeps) return lval + rval + (lval + rval - val) / 15.0; // 再减去 DeTa 减少误差
    return AutoFix(left, mid, lval, jeps / 2.0) + AutoFix(mid, right, rval, jeps / 2.0); // 迭代  jeps / 2.0 貌似会提高精度 原理不知道. 
}
/* 
double AutoFix(double left, double right, double val) {
    double mid = (left + right) / 2.0;
    double lval = XPS_GX(left, mid), rval = XPS_GX(mid, right);
    if (fabs(val - lval - rval) <= eps) return val;
    return AutoFix(left, mid, lval) + AutoFix(mid, right, rval);
}
*/ 

 

转载于:https://www.cnblogs.com/cgjh/p/9419103.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值