前言
不知道为什么,今天感觉想要写一下数学的东西,然后就看了一下我还有这个模板不会,顺手写了一下。
没有学过微积分的最好还是看一下求导为好。
求导
听说很多人都不会求导,我写一下吧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;
}