自适应辛普森法,曲线积分,二分法(桥上的绳索,LA 3485)

来源:互联网 发布:java 指定时间执行 编辑:程序博客网 时间:2024/04/27 19:58

就是本题让我又翻出了半年未动的数学分析讲义,把曲线积分以及不定积分又复习了一遍。


如果已知函数值想求自变量而反函数又难以解出的话,可以利用函数的一些性质,比如单调性,然后二分自变量求解。

如果是单峰函数的话,可以先三分求出极值点,然后转化成两个单调函数。


其他就是纯数学问题了。


然后书上还给出了一个适应性更广的解法,那就是自适应辛普森法,当函数积不出来时,只好用数值积分来计算答案。

关于自适应辛普森法的详解:

http://blog.csdn.net/xl2015190026/article/details/53518077


代码

#include<bits/stdc++.h>using namespace std;const double eps=1e-3;int D,H,B,L;double w;double f(double x,double a){    return 4*a*(x/2*sqrt(1/a/a/4+x*x)+1/a/a/8*log(x+sqrt(1/a/a/4+x*x)));}double len(double h){    double a=4*h/w/w;    return f(w/2,a)-f(0,a);}int main(){    int T;    scanf("%d",&T);    for(int t=1;t<=T;t++)    {        scanf("%d %d %d %d",&D,&H,&B,&L);        int n=int(ceil(double(B)/D)+0.5);        w=double(B)/n;        double l=0;        double r=H;        while(r-l>eps)        {            double m=(l+r)/2;            if(len(m)>double(L)/n) r=m;            else l=m;        }        printf("Case %d:\n",t);        printf("%.2lf\n",H-l);        if(t!=T) puts("");    }    return 0;}


0 0
原创粉丝点击