gpt4 book ai didi

c++ - 复合Simpson规则代码不断输出错误?

转载 作者:行者123 更新时间:2023-12-02 10:23:01 26 4
gpt4 key购买 nike

Algorthim:enter image description here

我正在尝试实现此复合Simpson规则,该规则将计算以下积分:1 / sqrt(x),其结果应为:2

但是,我一直得到错误的输出,例如1.61663

#include <cmath>
#include <iostream>
using namespace std;

double f(double n)
{

return 1/sqrt(n);
}

double simpson(double a, double b, double n)
{

double x0=f(a)+f(b);
double h=(b-a)/(n);
double x1=0,x2=0;
double x=0;
for(int i = 1 ; i <n;i++){
x=a+(i*h);
if(i%2==0)
{
x2=x2+f(x);
}
else
{
x1=x1+f(x);
}
}
x1=(h*(x0+2*x2+4*x1))/3;
return x1;
}

int main(){

cout<<"Integral is: "<<" "<<simpson(0.0004,1,20)<<" "<<endl;
}

最佳答案

问题不在于您的代码,而在于您要集成的功能。随着x变为零,此函数发散到无穷大。衍生产品也有所不同。

对于[a, 1]小的a区间,错误项受O[1/(N^4 a^4.5)]限制。这就是为什么要计算此间隔内的积分,网格应该非常密集以获得合理的误差范围。
simpson(0.0004, 1, N)产生以下值:

N      Result         Error
--------------------------------
20 2.549041009 0.5890
200 1.986462457 0.0265
2000 1.960181808 1.8181e-4
20000 1.960000049 4.9374e-8
200000 1.960000000 5.0810e-12

实际上,对于较大的 N,我们越来越接近精确值 1.96,并且出现 O(1/N^4)错误。

关于c++ - 复合Simpson规则代码不断输出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59235159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com