zoukankan      html  css  js  c++  java
  • 自适应Simpson法与积分初步

    前言

    不知道为什么,今天感觉想要写一下数学的东西,然后就看了一下我还有这个模板不会,顺手写了一下。

    没有学过微积分的最好还是看一下求导为好。

    求导

    听说很多人都不会求导,我写一下吧qwq

    (f(x)=ax^2+bx+c)

    那么显然这个东西求导的话就是:

    (f'(x)=frac{ riangle{y}}{ riangle{x}})

    那么( riangle{y}=f(x+ riangle{x})-f(x))

    你把这个东西拆开:

    [ riangle{y}= \ f(x+ riangle{x})-f(x) \ =a*(x+ riangle{x})^2-a*x^2+b*(x+ riangle{x})-b*x+c-c \ =a*(x^2+ riangle{x}^2+2*x* riangle{x})-a*x^2+b*x-b*x+b* riangle{x} \ =a* riangle{x}^2+2*a*x* riangle{x}+b* riangle{x} ]

    然后考虑一下除一下就是:

    [f'(x)=frac{ riangle{y}}{ riangle{x}} \ =frac{a* riangle{x}^2+2*a*x* riangle{x}+b* riangle{x}}{ riangle{x}} \ =a riangle{x}+2*a*x+b ]

    然后我们又发现(lim_{ riangle{x}->0} riangle{x})

    所以化简就是:

    (f'(x)=2*a*x+b)

    由此我们还可以得到一些比较好的东西:

    ((x^n)'=n*x^{n-1})

    与:

    ((g(x)*f(x))'=g(x)centerdot f'(x)+g'(x)centerdot f(x))

    然后把两个搞在一起就是:

    [(c*f(x))'=c*f'(x) ]

    大概入门就只要这么点东西吧。

    积分

    定义就是曲面围成的面积。

    然后就是许多的式子qwq(这个直接背记就好了。)

    当然如果有网的话也可以查。

    还有一个比较需要记住的公式:

    可导函数(f(x))在区间([a,b])的弧长

    (int_a^bsqrt{1+f'(x)}dx)

    我突然发现我自己越来越不会算区间,凉凉了。

    开始

    假定我们现在已经有了一个函数(f(x)),现在要求这样子的积分:

    [int_a^bf(x)dx ]

    Simpson公式

    [int_a^bf(x)dxapproxfrac{ riangle{x}}{3}(y_0+4*y_1+y_2)+frac{ riangle{x}}{3}(y_2+4*y_3+y_4)+... ]

    然后直接自适应Simpson法套进去就好了.

    然后?
    没有了qwq

    代码实现

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<map>
    #include<iostream>
    using namespace std;
    #define ll long long
    #define re register
    #define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
    inline int gi(){
        int f=1,sum=0;char ch=getchar();
        while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
        return f*sum;
    }
    const double eps=1e-12;
    double a,b,c,d,l,r;
    double F(double x){
        return (c*x+d)/(a*x+b);
    }
    double Simpson(double a,double b){
        double c=a+(b-a)/2;
        return (F(a)+4*F(c)+F(b))*(b-a)/6;
    }
    double simpson(double a,double b,double eps,double A){
        double c=a+(b-a)/2;
        double L=Simpson(a,c),R=Simpson(c,b);
        if(fabs(L+R-A)<=eps*15)return L+R+(L+R-A)/15;
        return simpson(a,c,eps/2,L)+simpson(c,b,eps/2,R);
    }
    double Ask(double a,double b,double eps){
        return simpson(a,b,eps,Simpson(a,b));
    }
    int main(){
        scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&l,&r);
        printf("%.6lf
    ",Ask(l,r,eps));
        return 0;
    }
    
  • 相关阅读:
    How to use django with mod_wsgi ¶
    How to install Apache2 (CentOS 5.4)
    Review Board
    代理
    你的第一个Javascript服务器端程序(一)
    程序员的十层楼(6~7层)
    用你自己的插件扩展jQuery(Extend jQuery with Your Very Own Plugin)
    程序员的十层楼(1~5层)
    C#到Java byte类型冲突的解决
    Hadoop出现allocate memory错误的解决
  • 原文地址:https://www.cnblogs.com/mleautomaton/p/10265280.html
Copyright © 2011-2022 走看看