Mathematics(1):积分和求导 2019-05-09

论一个文化课选手的自我修养。

导数

常用公式

\[ \begin{aligned} (C)'&=0\\ (x^\mu)'&=\mu x^{\mu-1}\\ (\sin x)'&=\cos x\\ (\cos x)'&=-\sin x\\ (\tan x)'&=\sec^2 x\\ (\cot x)'&=-\csc^2 x\\ (\sec x)'&=\sec x \tan x\\ (\csc x)'&=-\csc x \cot x\\ (a^x)'&=a^x \ln a\\ (e^x)'&=e^x\\ (\log_ax)'&=\frac{1}{x\ln a}\\ (\ln x)'&=\frac{1}{x} \end{aligned} \]

求导法则

这里设讨论的函数均可导

  • 和差积商 \[ \begin{aligned} (f(x)\pm g(x))'&=f'(x)\pm g'(x)\\ (cf(x))'&=cf'(x)\\ (f(x)g(x))'&=f'(x)g(x)+f(x)g'(x)\\ (\frac{f(x)}{g(x)})'&=\frac{f'(x)g(x)+f(x)g'(x)}{g^2(x)} \end{aligned} \]

  • 反函数求导

\[ [f^{-1}(x)]'=\frac{1}{f'(x)} \]

  • 链式法则

    \[ \begin{aligned} h(x)&=f(g(x))\\ h'(x)&=f'(g(x))g'(x) \end{aligned} \]

定积分

直观地说,对于一个给定的正实值函数\(f(x)\)在一个实数区间上的定积分\(\int_a^b f(x)dx\)可以理解为在坐标平面上,由曲线\((x,f(x))\)直线\(x=a,x=b\)以及轴围成的曲边梯形的面积值(一种确定的实数值)。

对于一个积分\(\int_a^bf(x)\mathrm{d}x\)其中\(\text{dx}\)\(\text{delta x}\)的缩写,表示变量的微增量,\(\text{dx}\)成为积分变量。\(\int\)为积分号,而\(f(x)\)是被积函数。

定积分与不定积分的区别在于,它积分出来后的值是一个常数而不是一个函数。

性质

  • a=b时 \[ \int_a^bf(x)\mathrm{d}x = 0 \]

  • a>b 时 \[ \int_a^bf(x)\mathrm{d}x=-\int_b^af(x)\mathrm{d}x \]

  • 代数和的积分等于积分的代数和 \[ \int_a^b [g(x)\pm f(x)]\mathrm{d}x=\int_a^bf(x)\mathrm{d}x\pm \int_a^bg(x)\mathrm{d}x \]

  • 定积分的可加性 \[ \int_a^b f(x)\mathrm{d}x+\int_b^cf(x)\mathrm{d}x=\int_a^cf(x)\mathrm{d}x \]

  • 积分中值定理

    如果\(f(x)\)\([a,b]\)上连续,那么至少存在一个点\(\varepsilon\)满足 \[ \int_a^b f(x)\mathrm{d}x=f(\varepsilon)\times (b-a) \]

公式

  • 牛顿·莱布尼茨公式 如果\(f(x)\)\([a,b]\)上的连续函数,并且有\(F'(x)=f(x)\),则 \[ \int _ a^b f(x)\mathrm{d}x=F(b)-F(a) \]

  • 基本积分公式(就是基本导数公式的逆) \[ \begin{aligned} \int k\mathrm{d}x&=kx+c\\ \int x^\mu \mathrm{d}x&=\frac{x^{\mu+1}}{\mu+1}+c\\ \int \frac{\mathrm{d}x}{x}&=\ln |x|+c\\ \int k^x \mathrm{d}x&=\frac{k^x}{\ln k}+c \end{aligned} \]

  • 换元积分法

    在计算定积分的时候,有时为了而方便变形,可能需要换元来简化运算。 假设函数\(f(x)\)在区间\([a,b]\)上连续,且函数\(x=\varphi(t)\)满足条件\(\varphi(\alpha)=a,\varphi(\beta)=b\)\(\varphi(t)\)\([\alpha,\beta]\)上具有连续导数,且其值域\(R_\varphi=[a,b]\),则有 \[ \int_a^b f(x)\mathrm{d}x=\int_{\alpha}^{\beta}f[\varphi(t)]\varphi'(t)\ \mathrm{d}t \] 需要注意的是,用\(x=\varphi(t)\)把原来的变量\(x\)代换成新变量\(t\)的时候,积分限也要变成相应于新变量\(t\)的积分限。

    在遇到类似\(\sqrt{x^2-a^2},\sqrt{x^2+a^2},\sqrt{a^2-x^2}\)的式子时,通常采取分别令\(x=\pm a \sec t,x=\pm a \tan t, x=\pm a \sin t\)进行换元。如果要计算定积分,只需在变换后的积分限\(\alpha\)\(\beta\)下计算相应的定积分即可。

    注意,如果要替换x,那么\(\mathrm{d}x\)中的\(x\)同样是需要替换的。

Simpson's rule

simpson积分公式对于不超过3次的多项式是正确的。 \[ \int_a^b f(x)\mathrm{d}x \approx \frac{b-a}{6}\left[f(a)+4f\left(\frac{a+b}{2}\right)+f(b)\right] \]

  • 自适应simpson积分

    当递归两边和直接算的误差绝对值很小时直接返回,否则递归计算。

例题

「1」The area

Description:给出下图中P1P2P3的坐标,保证P1是抛物线的顶点,求阴影部分面积。

Solution:

方法一

首先我们可以通过这三个点算出抛物线解析式\(f(x)\)和直线的解析式\(g(x)\),那么\(f(x)-g(x)\)\(\text{p2.x}\to \text{p3.x}\)这个范围上的积分就是要求的面积。

\(h(x)=f(x)-g(x)\)也就是要求 \[ \int_{\text{p2.x}}^{\text{p3.x}}h(x)\mathrm{d}x \]\(h(x)=ax^2+bx+c\)\[ \begin{aligned} &\int_{\text{l}}^{\text{r}}(ax^2+bx+c)\ \mathrm{d}x\\ &=a\int_{\text{l}}^{\text{r}}x^2\mathrm{d}x+b\int_{\text{l}}^{\text{r}}x\ \mathrm{d}x+c\int_{\text{l}}^{\text{r}}1\ \mathrm{d}x\\ &=a\frac{r^3-l^3}{3}+b\frac{r^2-l^2}{2}+c \end{aligned} \] 最后一步用到了牛顿·莱布尼茨公式

方法二

因为只有二次,可以直接套用Simpon's rule而且能保证正确性。 \[ \int_a^b f(x)\mathrm{d}x \approx \frac{b-a}{6}\left[f(a)+4f\left(\frac{a+b}{2}\right)+f(b)\right] \] 代码

int T;
pair<db, db>p1,p2,p3;
int main(){
    gi(T);
    while(T--){
        scanf("%lf%lf%lf%lf%lf%lf",&p1.fr,&p1.se,&p2.fr,&p2.se,&p3.fr,&p3.se);
        db a,b,c,x,y;
        a=(p2.se-p1.se)/((p2.fr-p1.fr)*(p2.fr-p1.fr));
        b=(-2*p1.fr*a);
        c=p1.se-b*p1.fr-p1.fr*p1.fr*a;
        x=(p3.se-p2.se)/(p3.fr-p2.fr),y=p3.se-p3.fr*x;
        b-=x;c-=y;
    //integral transfrom
        printf("%.2lf\n",a*(p3.fr*p3.fr*p3.fr-p2.fr*p2.fr*p2.fr)/3+b*(p3.fr*p3.fr-p2.fr*p2.fr)/2+c*(p3.fr-p2.fr));
    //simpson's rule
        double mid=(p3.fr+p2.fr)/2.0;
        double calc=(a*mid*mid+b*mid+c);
        printf("%.2lf\n",((p3.fr-p2.fr)/6.0)*((a*p2.fr*p2.fr+b*p2.fr+c)+(a*p3.fr*p3.fr+b*p3.fr+c)+calc*4.0)); 
    }
    return 0;
}

「2」Ellipse

Description:给出椭圆的解析式,求蓝色部分面积。

Solution:

首先化简解析式 \[ \begin{aligned} \frac{x^2}{a^2}+\frac{y^2}{b^2}&=1\\ y^2&=\frac{a^2b^2-b^2x^2}{a^2}\\ y&=\sqrt{\frac{a^2b^2-b^2x^2}{a^2}} \end{aligned} \] 然后答案就是 \[ \begin{aligned} &\int_L^R \sqrt{\frac{a^2b^2-b^2x^2}{a^2}} \ \mathrm{d}x\\ &=\frac{b}{a}\int_L^R \sqrt{a^2-x^2} \ \mathrm{d}x\\ \end{aligned} \] 问题变成了算\(\int_L^R \sqrt{a^2-x} \ \mathrm{d}x\),其实这个式子在上面的换元法那里已经出现过,我们用\(\varphi(x)=a\sin(x)\)换元

\(x=a\sin u \to u=\arcsin\left(\frac{x}{a}\right),\mathrm{d}x=a \cos(u)\ \mathrm{d}u\) \[ \begin{aligned} &\int_L^R \sqrt{a^2-x^2} \ \mathrm{d}x\\ &=\int_{\arcsin\left(\frac{L}{a}\right)}^{\arcsin\left(\frac{R}{a}\right)} (a\cos(u)\sqrt{a^2-a^2\sin^2(u)} \ )\mathrm{d}u\\ &=a^2\int_{\arcsin\left(\frac{L}{a}\right)}^{\arcsin\left(\frac{R}{a}\right)} (\cos(u) \sqrt{1-\sin^2(u)} )\ \mathrm{d}u\\ &=a^2\int_{\arcsin\left(\frac{L}{a}\right)}^{\arcsin\left(\frac{R}{a}\right)} cos^2(u) \ \mathrm{d}u\\ &=a^2\int_{\arcsin\left(\frac{L}{a}\right)}^{\arcsin\left(\frac{R}{a}\right)} \frac{\cos(2u)+1}{2} \ \mathrm{d}u\\ &=a^2\int_{\arcsin\left(\frac{L}{a}\right)}^{\arcsin\left(\frac{R}{a}\right)} (\frac{\cos(2u)}{2}+\frac{1}{2}) \ \mathrm{d}u\\ &=a^2\left[\frac{\frac{\sin(2\arcsin\left(\frac{R}{a}\right))}{2}-\frac{\sin(2\arcsin\left(\frac{L}{a}\right))}2}{2}+\frac{\arcsin\left(\frac{R}{a}\right)-\arcsin\left(\frac{L}{a}\right)}{2}\right]\\ \end{aligned} \] 第三行用到的是三角函数基本公式,第五行是二倍角公式,最后一步把\(2u\)整体考虑然后牛顿·莱布尼茨公式可以推导。

所以答案为 \[ 2ab\left[\frac{\frac{\sin(2\arcsin\left(\frac{R}{a}\right))}{2}-\frac{\sin(2\arcsin\left(\frac{L}{a}\right))}2}{2}+\frac{\arcsin\left(\frac{R}{a}\right)-\arcsin\left(\frac{L}{a}\right)}{2}\right] \] 乘二是因为只算了一半。

代码

当然也是可以simpon's rule的,只不过要改成自适应simpon积分。

int T;
const db eps=1e-10;
db a,b,l,r;
db F(db x){
    return b*sqrt(1-((x*x)/(a*a)));
}
db f(db l,db r, db ans){
    db mid=(l+r)/2.0;
    db left =((mid-l)/6.0)*(F(l)+4.0*F((l+mid)/2.0)+F(mid));
    db right=((r-mid)/6.0)*(F(mid)+4.0*F((r+mid)/2.0)+F(r));
    if(abs(ans-(left+right))<eps)return ans;
    else return f(l,mid,left)+f(mid,r,right);
}
int main(){
    gi(T);
    while(T--){
        scanf("%lf%lf%lf%lf",&a,&b,&l,&r);
    //integral transfrom
        //db calc=a*b*((sin(2*asin(r/a))/2.0-sin(2*asin(l/a))/2.0)+asin(r/a)-asin(l/a));
    //simpon's rule
        printf("%.3lf\n",2*f(l,r,((r-l)/6.0)*(F(l)+4.0*F((r+l)/2.0)+F(r))));
    }
    return 0;
}