簡體   English   中英

復合辛普森規則代碼不斷得到錯誤的輸出?

[英]Composite simpson rule code keep getting wrong output?

算法:在此處輸入圖像描述

我正在嘗試實現這個復合辛普森規則,它將計算以下積分: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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM