首页 > 其他 > 详细

P4525 【模板】自适应辛普森法1

时间:2019-10-02 18:17:17      阅读:100      评论:0      收藏:0      [点我收藏+]

P4525 【模板】自适应辛普森法1

题目描述

  • 给定\(a,b,c,d,L,R,\)计算积分技术分享图片

  • 结果保留至小数点后6位。

  • 数据保证计算过程中分母不为0且积分能够收敛。

输入格式

  • 一行,包含\(6\)个实数\(a,b,c,d,L,R\)

输出格式

  • 一行,积分值,保留至小数点后\(6\)位。

输入输出样例:

输入:

1 2 3 4 5 6

输出:

2.732937


题解

公式题,结论:
\(\int\frac{cx+d}{ax+b}dx=\frac{(ad-bc)ln|ax+b|+acx}{a^2}\)

证明如下:\((\frac{(ad-bc)ln|ax+b|+acx}{a^2})'\)

\(=\frac{((ad-bc)ln|ax+b|)'+(acx)'}{a^2}\)

\(=\frac{(ad-bc)}{a^2}(ln|ax+b|)'+\frac{c}{a}\)

\(f(x)=ln|x|,g(x)=ax+b,\)

根据链式法则,\((ln|ax+b|)'=(f(g(x)))'=g'(x) * f'(g(x))=a * \frac{1}{ax+b}\)

∴原式 $ =\frac{(ad-bc)}{a^2} * a * \frac{1}{ax+b}+\frac{c}{a}$

\(=\frac{(ad-bc)}{a} * \frac{1}{ax+b}+\frac{c}{a}\)

\(=\frac{ad-bc}{a(ax+b)}+\frac{c}{a}\)

\(=\frac{ad-bc+c(ax+b)}{a(ax+b)}\)

\(=\frac{ad+acx}{a(ax+b)}\)

\(=\frac{d+cx}{ax+b}\)

证毕

但是这题有坑点,着实有坑到我:

  1. \((\frac{1}{x})'\)时忘记套上绝对值,会 wa 两个点

  2. \(a=0\)的时候需要特判,重新积分可得\(\int\frac{cx+d}{b}dx=\int(\frac{c}{b}x+\frac{d}{b})dx=\frac{c}{2b}x^2+\frac{d}{b}x,\)不这么做会 wa 四个点

代码

极其简单

#include<bits/stdc++.h>
using namespace std;
double a,b,c,d,l,r;
int main(){
    cin>>a>>b>>c>>d>>l>>r;
    if(a==0){
        printf("%.6lf",(r*r-l*l)*c/b/2+d*(r-l)/b);
        return 0;
    }
    printf("%.6lf",(a*c*(r-l)+(d*a-b*c)*(log(abs(a*r+b))-log(abs(a*l+b))))/a/a);
    return 0;
}

P4525 【模板】自适应辛普森法1

原文:https://www.cnblogs.com/xiong-6/p/11617643.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!