自适应辛普森法 学习笔记
对于一个二次函数
于是
以上即为辛普森公式。
普通辛普森法
为了求
Code:
int n = 1e7;
double calc(double l, double r) {
double h = (r - l) / (2 * n), res = f(l) + f(r);
for (int i = 2; i < 2 * n; ++i)
res += f(l + i * h) * (i & 1? 2: 4);
return res * h / 3;
}
自适应辛普森法
考虑到当分割出的二次函数在该区间内已经足够接近原函数时,可以直接使用该积分值;而当二次函数仍不够接近时还需再分割,于是可以考虑分别用辛普森公式计算区间
P4525 【模板】自适应辛普森法 1 AC Code:
#include <cstdio>
#define simpson(l, r) ((r - l) * (f(l) + f(r) + 4 * f((l + r) / 2)) / 6)
#define f(x) (double(c * (x) + d) / (a * (x) + b))
#define abs(x) ((x) >= 0? (x): -(x))
using namespace std;
double a, b, c, d, L, R;
double calc(double l, double r, int step, double sps) {
double mid = (l + r) / 2;
double fl = simpson(l, mid), fr = simpson(mid, r);
if (abs(fl + fr - sps) <= 1e-6 && step < 0)
return sps;
else
return calc(l, mid, step - 1, fl) + calc(mid, r, step - 1, fr);
}
int main() {
scanf("%lf %lf %lf %lf %lf %lf", &a, &b, &c, &d, &L, &R);
printf("%lf", calc(L, R, 12, simpson(L, R)));
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)