数值计算学习笔记

一:数值积分

问题描述:求

仅说明    Simpon公式,以二次曲线逼近的方式取代矩形或者提醒面积,在EXP极小的情况下可以求得近似面积解

[图片源于他人BLOG]

long double simpson(long double l,long double r)
{
    long double mid=l+(r-l)/2.0;
    return (r-l)*(f(l)+4.0*f(mid)+f(r))/6.0;
}

例题:HDU1724

题意:求得L,R的积分解,套用simpson公式

BUG:为什么卡long double不得解,毕竟long double的精度不低于double?

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<math.h>
#define PI acos(-1.0)
#define pb push_back
#define F first
#define S second
#define debug puts
using namespace std;
typedef long long ll;

const int N=5e3+5;
const int MOD=1e9+7;
const int INF=0x3f3f3f3f;

double a,b,l,r,eps=1e-6;
double f(double t){
    return b*sqrt((1-t*t/a/a));
}

double simpson(double l,double r)
{
    double mid=l+(r-l)/2.0;
    return (r-l)*(f(l)+4.0*f(mid)+f(r))/6.0;
}

double solve(double l,double r,double eps){
    double mid=(l+r)/2;
    if(fabs(simpson(l,r)-simpson(l,mid)-simpson(mid,r))<eps)    return simpson(l,r);
    else    return solve(l,mid,eps/2)+solve(mid,r,eps/2);
}

int main(void){
    int t;
    cin>>t;
    while(t--){
        cin>>a>>b>>l>>r;
        printf("%.3f\n",2*solve(l,r,eps));
    }
    return 0;
}

例题:bzoj2178未完待续


二:高阶代数方程求根

猜你喜欢

转载自blog.csdn.net/Haipai1998/article/details/80280268