首页 > 其他分享 >辛普生公式和龙贝格递推的实现

辛普生公式和龙贝格递推的实现

时间:2022-10-10 19:58:52浏览次数:33  
标签:辛普生 S2 T2 T1 double C2 include 递推 龙贝格

如题,数值分析编程作业

 

代码:

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<map>
#include<vector>
using namespace std;
typedef long long LL;
#define INF 1e18
#define endl '\n'
const int N = 5e2 + 10;
#define PI acos(-1) 
double eps;
double f(double x)
{
    if (x == 0)return 1;
    return sin(x) / x;
}

double Xinpson(double a, double b, int n)
{
    double h = (b - a) / n;
    double S = (f(b) - f(a));
    double x = a;
    for (int k = 0; k < n; k++)
    {
        S += 4 * f(x + h / 2) + 2 * f(x);
        x += h;
    }
    return S*(h/6);
}
double longbeige(double a,double b)
{
    double T1, T2, S1, S2, C1, C2, R1, R2;
    double h = (b - a);
    T1 = h/2 * (f(a) + f(b));
    int k = 1;
    while (1)
    {
        double x = a + h / 2;
        double S = 0;
        while (x < b)
        {
            S += f(x);
            x += h;
        }
        T2 = T1 / 2 + S * h / 2;
        S2 = T2 + (T2 - T1) / 3;
        if (k == 1)
        {
            k++;
            h /= 2;
            T1 = T2;
            S1 = S2;
            continue;
        }
        C2 = S2 + (S2 - S1) / 15;
        if (k == 2)
        {
            k++;
            h /= 2;
            C1 = C2;
            S1 = S2;
            T1 = T2;
            continue;
        }
        R2 = C2 + (C2 - C1) / 63;

        if (k == 3)
        {
            k++;
            h /= 2;
            C1 = C2;
            S1 = S2;
            T1 = T2;
            R1 = R2;
            continue;

        }
        if (fabs(R2 - R1) < eps)
            break;
        k++;
        h /= 2;
        C1 = C2;
        S1 = S2;
        T1 = T2;
        R1 = R2;

    }
    return R2;
}
int main()
{

    
    printf("%.8lf\n",Xinpson(0, 1, 4));
    eps = 1e-9;
    printf("%.10lf", longbeige(0, 1));
    

    return 0;
}

 

<iframe height="240" id="embedVideo" src="//remove.video/adv" style="position: absolute; top: 0; left: 0; border: none; visibility: hidden" width="320"></iframe> <iframe id="embedVideo" src="//remove.video/adv" style="position: absolute; top: 0; left: 0; border: none; visibility: hidden"></iframe>

标签:辛普生,S2,T2,T1,double,C2,include,递推,龙贝格
From: https://www.cnblogs.com/codingMIKU/p/16776943.html

相关文章

  • 费解的开关[二进制、递推]
    题面传送门[https://www.acwing.com/problem/content/description/97/]分析考虑逐行分析,以行递推如果不再改变第一行,则满足题意的点击方案最多1种理由是:如果第i行某一......
  • 现代功率谱估计(2):Levinson-Durbin递推方法求解AR模型参数
    现代功率谱估计(2):Levinson-Durbin递推方法求解AR模型参数p阶AR模型的差分方程形式和系统函数分别为:令\(z=e^{jw}\),则AR模型输出的功率谱密度为:AR模型的系统输出信号......
  • 实例89 辛普生数值积分
    #include<stdio.h>#include<math.h>doubleFunction(double);doubleSIMP1(double,double,int);doubleSIMP2(double,double,double);voidmain(){doubl......
  • 递推
    递推百度之星递推题(用矩阵乘法加速,用费马小定理缩小)思路:因为只有1->0的情况是0,其他都是1,所以我们考虑递推。$f[n]=2^n-f[n-1]\(,\)2^n$是所有情况,因此唯一可......
  • 矩阵递推斐波那契数列
      斐波那契数列都很熟悉,它满足,\(F_{n}=\begin{cases}1&n\leqslant2\\F_{n-1}+F_{n-2}&n>2\end{cases}\)。因为\(F_n\)从第三项开始是不断的递推下去的,所以......
  • 划分数列(ybtoj递推练习题1)
    题目描述给定一个长度为n的数列 ,要求划分最少的段数,使得每一段要么单调不降,要么单调不升。输入格式第一行一个整数 。接下来n个数表示数列 。......
  • YBTOJ 递推算法合集
    错排问题令\(dp[i]\)表示一个\(i\)的排列的方案数。考虑当前插入一个数\(i\),那么考虑一个位置\(pos\),显然\(pos\)有\(i-1\)种选择假设\(i\)放在了\(......
  • 1033 [NOIP2017]逛公园 记忆化搜索 比最短路长k的方案数 dp递推算方案数
     链接:https://ac.nowcoder.com/acm/contest/26077/1033来源:牛客网题目描述策策同学特别喜欢逛公园。公园可以看成一张N个点M条边构成的有......
  • 1044 [HAOI2012]ROAD dijkstra递推求最短路径数+生成反向最短路拓扑图 计算以每个点为
     链接:https://ac.nowcoder.com/acm/contest/26077/1044来源:牛客网题目描述C国有n座城市,城市之间通过m条单向道路连接。一条路径被称为最短路,当......
  • 传球游戏【NOIP2018普及组T3】(ybtoj 递推例题2)
    题目描述上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。游戏规则是这样的: 个同学站成一个圆圈,其中的一个同学手里拿着一......