(六)计算机数值方法之Simpson求积算法

文章详细介绍了如何使用Simpson算法在C++中求解定积分方程,提供了一个包含函数sin(x)/x和atan(x)/x的代码示例,并展示了如何设置积分精度。
摘要由CSDN通过智能技术生成

数学问题:

 利用Simpson算法求解定积分方程

\int_{0}^{1}\frac{\arctan x}{x}dx,eps=10^{-7}

解决代码:

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
double fuction(double , int );
double SimpsonIntegral(double, double, double, int);

int main()
{
    string l;
    double a, b, eps; int num;
    cin >> l;
    cin >> a >> b;
    cin >> eps;
    cin >> num;
    cout << fixed << setprecision(6) << SimpsonIntegral(a, b, eps, num);
    return 0;
}
double fuction(double x, int a)
{
    if (a == 1)
        return sin(x) / x;
    if (a == 2)
        return atan(x) / x;
}
double SimpsonIntegral(double a, double b, double eps, int n)
{      
    if (a == 0) a = 0.0000001;
    double h = b - a, s, s1, s2;
    int p = 1, k;
    s1 = h / 6 * (fuction(a, n) + 4 * fuction((a + b) / 2, n) + fuction(b, n));
    s = 2 * fuction(a + 0.25 * h, n) - fuction(a + 0.25 * h, n) + 2 * fuction(a + 0.75 * h, n);
    s2 = 0.5 * s1 + s * h / 6;
    h = 0.5 * h;
    p = 2 * p;

    do
    {
        h = 0.5 * h;
        p = 2 * p;
        s1 = s2;
        s2 = 0;
        double q = a, qq = a + h;
        for (k = 0; k < p; k++)
        {
            s2 += h / 6 * (fuction(q, n) + 4 * fuction((q + qq) / 2, n) + fuction(qq, n));
            q += h;
            qq += h;

        }

    } while (fabs(s2 - s1) > eps);
    return s2;
    
}

使用方法:

第一行是字符串。

第二行是2个数字,第一个为积分下限:a,第二个为积分上限:b,a、b中间用一个空格相连

第三行是1个精度数,为积分精度:eps

第四行是1个数,为被积函数表达式的序号:funNum。

其中本文代码给出这些函数供选择:

函数fun              序号funNum

sin(x)/x                    1

atan(x)/x                   2

测试输入:

SimpsonIntegral

0 1

1e-7

1

预期输出:

0.946083

问题解决:

计算结果为:

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值