| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 437 人关注过本帖
标题:矩形积分和辛普生积分为什么和书上不一样?帮忙看下~
只看楼主 加入收藏
韩雨航
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2012-1-12
结帖率:57.14%
收藏
 问题点数:0 回复次数:1 
矩形积分和辛普生积分为什么和书上不一样?帮忙看下~
矩形积分:
#include<iostream>                                    //???????结果不对???????
#include<fstream>
#include<cmath>
using namespace std;
//--------------------
double g(double x);
double rectangle(double a,double b,double(*f)(double));
//---------------------------------------------------------
int main()
{
    ifstream in("integral.txt");
    cout<<fixed;
    cout.precision(3);
    for(double b;in>>b;)
        cout<<rectangle(1,b,g)<<endl;                        
}
//------------------------------
double g(double x)
{
    return 1/x;
}
//-------------------------
double rectangle(double a,double b,double(*f)(double))
{
    long double w=b-a,sumnew=w*(f(a)+f(b))/2,sumold=0;
    for(int n=1;fabs(sumnew-sumold)>=1e-4;n*=2)               
    {
        sumold=sumnew;
        sumnew=0;
        for(int i=0;i<n;++i)                                
        {
            sumnew+=f(a+w*(i+0.5)/n);                    //共n个小矩形时第i个矩形的中间位置坐标a+w*(i+0.5)/n
            sumnew*=w/n;                                //切割第n次宽度为w/n
        }
        return    sumnew;
    }
}
辛普生积分:
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
//--------------------
double g(double x);
double simpson(double a,double b,double(*f)(double));
//---------------------------------------------------------
int main()
{
    ifstream in("integral.txt");
    cout<<fixed;
    cout.precision(9);
    for(double b;in>>b;)
        cout<<simpson(1,b,g)<<endl;                        //第三个参数为函数指针!!!
}
//------------------------------
double g(double x)
{
    return 1/x;
}
//-------------------------
double simpson(double a,double b,double(*f)(double))
{
    double h=b-a,t2=h*(f(a)+f(b))/2,t1,i1=t2,i2=0;            //i1老积分,i2新积分。
    for(int n=1;fabs(i1-i2)>=1e-4;n+=n,h/=2.0)                    
    {
        t1=t2;i1=i2;
        double sigma=0;                                        //sigma=0初值        
        for(int i=0;i<n;++i)                                
            sigma+=f(a+h*(i+0.5));                            //共n个小矩形时第i个矩形的中间位置坐标a+w*(i+0.5)/n
        t2=(t1+sigma*h)/2;                                //切割第n次宽度为w/n
        i2=(4*t2-t1)/3;
        return    i2;
    }
}

integral。txt:
3
27.64738
0.0493
0.99954
0.0000557
100001
书上结果是:
1.099
3.320
-3.010
-0.000
-9.767
11.513
搜索更多相关主题的帖子: include double 
2012-02-09 11:58
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
收藏
得分:0 
。。。估计是代码问题啊,原理有没?贴上来看看

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-02-20 12:22
快速回复:矩形积分和辛普生积分为什么和书上不一样?帮忙看下~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034954 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved