• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            newplan

            阿基米德在洗澡時發現浮力原理,高興得來不及穿上褲子,跑到街上大喊:Eureka(我找到了)。
            posts - 39, comments - 26, trackbacks - 0, articles - 4
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            龍貝格Romberg算法cpp實現

            Posted on 2008-05-07 15:05 山泉彎延 閱讀(1489) 評論(1)  編輯 收藏 引用 所屬分類: 數值分析
            /*
            Romberg Algorithm 
            開發者:newplan
            開發日期:
            08.05.07 
            */


            /*=======================================*/
            /*INCLUDES*/ 
            #include           
            <cstdlib>
            #include           
            <iostream>
            #include           
            <cmath>
            /*=======================================*/
            /*MACROS  USED IN THIS FILE*/
            #define            MAX       
            20   
            #define            PRECISION 
            0.000008
            /*=======================================*/
            /*DECLARE NAMES IN STL NAMESAPCE */
            using  std::cout;
            using  std::endl;

            /*=======================================*/
            /*CLASS FUNC (FUNCTION OBJECT): THE ORIGINAL FUNCTION WE WANT TO INTEGRAL*/
            class  func{
                   
            public:
                          func(
            double x=1.0):exp(x){}
                          
            double operator()(const double& dnum)const{return pow(dnum,exp);}
                   
            private:
                          
            double exp;
                   };
            /*=======================================*/
            /*CLASS ECHELONFUNC (FUNCTION OBJECT)梯形法的遞推公式*/
            class  echelonFunc{
                   
            public:
                          echelonFunc(
            double begining,double ending,func & myfunc);
                          
            double operator()();
                   
            private:
                           
            double    h;
                           
            int       n;
                           
            double    T;
                           func      myfunc;
                           
            double    begining;
                           
            double    ending ;
                 };
            /*=======================================*/
            echelonFunc::echelonFunc(
            double begining,double ending,func & myfunc)
                          {
                           this
            ->begining=begining;
                           this
            ->ending=ending;
                           this
            ->h=ending-begining;
                           this
            ->n=0;
                           this
            ->T=0;
                           this
            ->myfunc=myfunc;//FUCNTION 
                          }
            /*------------------------------*/
            /* INCREASE FUNCTION 遞推函數*/
            double echelonFunc::operator()()
                          {   
            if(this->n==0)
                              {
                               this
            ->T=h*0.5*(myfunc(this->begining)+myfunc(this->ending));
                               this
            ->n=1;
                               return this
            ->T;
                              }
                              
            double len=0.5*h;
                              
            double sum=0;
                              
            int k=0;
                              
            for(k=0;k<this->n;k++)
                                  {
                                   sum
            +=myfunc(len);
                                   
            len=len+h;
                                  }
                              this
            ->T=0.5*this->T+0.5*h*sum;
                              this
            ->h/=2;
                              this
            ->n*=2;
                              return this
            ->T;
                          }
            /*=======================================*/
            /*THE MAIN CLASS IN THIS PROGRAM*/ 
            class  Romberg{
                   
            public:
                          Romberg(
            double begining,double ending,double exp);
                          ~Romberg();
                   
            private:
                          void RombergCPU();
            /*THE MOST IMPORTANT FUNCTION IN THIS PROGRAM*/
                          echelonFunc 
            *echol; 
                          
            double T[MAX][MAX];/*STO THE ROMBERG TABLE*/       
                   };
            /*------------------------------*/
            Romberg::Romberg(
            double begining ,double ending ,double paraexp)
            {
                func     myfunc(paraexp);
                echol 
            =  new echelonFunc(begining,ending,myfunc);
                RombergCPU();
            }
            /*------------------------------*/
            Romberg::~Romberg()
            {
                 delete echol;
            }
            /*------------------------------*/
            void Romberg::RombergCPU()
            {   clock_t Start; 
            //TIME STARAT
                clock_t 
            End;   //TIME END
                
            double *p[MAX];//WE USE THIS POINTER ARRAY TO ACCELERATE ALGOTITHM
                
            double **q;
                
            int i,j;
                Start 
            = clock();//TIME START FROM HERE
                
            for(i = 0,q = p; q < p+MAX; q++,i++)
                    
            *q= &T[i][0];
                
            double a,b,pows; 
                cout
            <<"-----------------------Romberg Algorithm---------------------"<<endl;
                
            *p[0]=(*echol)();
                cout
            <<"  "<<*p[0]<<endl;
                p[
            0]++;
                
            do{
                   
            *p[0]=(*echol)();
                    cout
            <<"  "<<*p[0];
                    p[
            0]++;
                    
            for(i=1;;i++)
                              {
                                pows
            =pow(4.0,double(i));
                                a
            =pows/(pows-1);
                                b
            =1/(pows-1);
                                
            *p[i]=a*(*(p[i-1]-1))-b*(*(p[i-1]-2));//ROMBERG ALGORITHM
                                cout
            <<"  "<<*p[i];
                                
            if(p[i]==&T[i][0])
                                  {
                                  p[i]
            ++
                                  break;
                                  } 
                                 p[i]
            ++;
                               }
                               cout
            <<endl;//fabs(T[i][0]-T[i-1][0])
                   }
            while(fabs(T[i][0]-T[i-1][0])>PRECISION);
                
                
            End = clock();//TIME END HERE
                
                cout
            <<"-------------------------------------------------------------"<<
                endl
            <<"  TIME SPEND:"<<(double)(End-Start)/CLOCKS_PER_SEC<<endl; 

            /*=======================================*/
            /*MAIN FUNCTION*/
            int main(int argc, char *argv[])
            {  
               Romberg  romberg(
            0,1,1.5);//ROMBERG API :BEGIN(0END(1EXP(1.5)
               system(
            "PAUSE");
               return EXIT_SUCCESS;
            }

            Feedback

            # re: 龍貝格Romberg算法cpp實現  回復  更多評論   

            2008-09-05 17:57 by matdu
            good
            久久久久人妻一区二区三区| 99久久99久久精品国产片果冻 | 99久久99久久精品国产| 久久综合九色综合97_久久久| 中文字幕久久亚洲一区| 国产成人久久精品一区二区三区| 国产精品免费福利久久| 国产精品一区二区久久精品涩爱 | 久久精品国产久精国产思思| 久久99精品久久久久子伦| 久久天堂电影网| 一本一本久久a久久综合精品蜜桃| 久久国产一区二区| 亚洲AV日韩精品久久久久久| 97精品国产97久久久久久免费| 国产亚洲婷婷香蕉久久精品| 久久综合给合综合久久| 91久久九九无码成人网站| 18岁日韩内射颜射午夜久久成人| 91精品国产91久久久久久| 亚洲午夜久久久久久久久电影网| 久久精品中文字幕有码| 久久国产精品免费一区| 久久伊人亚洲AV无码网站| 国产精品久久久久久久| 国产精品美女久久久| 久久人人爽人人爽人人av东京热| 国产精品内射久久久久欢欢| 国产69精品久久久久99| 久久ww精品w免费人成| 久久国产成人精品麻豆| 成人综合久久精品色婷婷| 国产日韩久久久精品影院首页| 国产精品久久久久久久app| 久久亚洲精品国产精品婷婷| 国产精品天天影视久久综合网| 伊人久久大香线蕉av不卡| 婷婷久久综合| 国产精品岛国久久久久| AV色综合久久天堂AV色综合在| 久久青青草原亚洲av无码app |