• <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>

               /**
              對分法求非線性方程的根  

               算法思想:在區間[a,b]間找到所有根,從a開始搜尋,步長h.
                  對每一個子區間[xi ,xi+1],    xi+1 = xi +h:
            1.若f(xi) = 0, xi為實根,從xi +h/2 繼續搜索2.若f(xi+1) = 0, xi+1為實根,  從  xi+1+h/2 繼續搜索
            3..若f(xi) f(xi+1) >0, 當前子區間無實根, 從xi+1繼續搜索
            4...若f(xi) f(xi+1) <0, 當前子區間有實根 ,二分搜索尋找根(當然,只能找到一個根)
            注意步長h的選擇, 過大導致漏根, 過小導致計算量增大.
                                                                           
            《數值計算方法與算法》-2 Editon -科學出版社 P86
            《C#數值計算算法編程》 p207

             代碼維護:2007.04.20   pengkuny
            **/ 

            #include<iostream>
            #include
            <cmath>

            using namespace std;

            #define epsilon 0.00001  //精度

            double func(double x)//方程表達式
            {
                
            double y;
                y 
            = (((((x-5)*x+3)*x+1)*x-7)*x+7)*x-20;  //范例方程,6次方程,至多六個實根
                return y;
            }


            /**
            nNumRoots:實根個數的預估值
            x[]:記錄搜索到的所有實根,
            xStart: 區間的左端點
            xEnd :  區間的右端點
            Step :  搜索求根時采用的步長
            返回:求得的實根的數目
            */

            int getRootBisect(int nNumRoots, double x[], double xStart, double xEnd, double Step)
            {
                
            int n,js;
                
            double z,y,z1,y1,z0,y0;

                
            // 根的個數清0
                n = 0

                
            // 從左端點開始搜索
                z = xStart; 
                y 
            = func(z);

                
            // 循環求解
                while ((z<=xEnd+Step/2.0&& (n!=nNumRoots))
                

                    
            if (fabs(y)<epsilon)
                    

                        n
            ++
                        x[n
            -1= z;
                        z 
            = z+Step/2.0
                        y 
            = func(z);
                    }

                    
            else
                    

                        z1 
            = z+Step; 
                        y1 
            = func(z1);

                        
            if (fabs(y1)<epsilon)
                        

                            n
            ++
                            x[n
            -1]=z1;
                            z
            =z1+Step/2.0
                            y
            =func(z);
                        }

                        
            else if (y*y1>0.0)
                        

                            y
            =y1; 
                            z
            =z1;
                        }

                        
            else
                        

                            js
            =0;//是否找到根的標志
                            while (js==0)
                            

                                
            if (fabs(z1-z)<epsilon)
                                

                                    n
            ++
                                    x[n
            -1]=(z1+z)/2.0;
                                    z
            =z1+Step/2.0; y=func(z);
                                    js
            =1;
                                }

                                
            else//對分搜索
                                
                                    z0
            =(z1+z)/2.0
                                    y0
            =func(z0);
                                    
            if (fabs(y0)<epsilon)
                                    

                                        x[n]
            =z0; 
                                        n
            ++
                                        js
            =1;
                                        z
            =z0+Step/2.0
                                        y
            =func(z);
                                    }

                                    
            else if ((y*y0)<0.0)
                                    

                                        z1
            =z0; 
                                        y1
            =y0;
                                    }

                                    
            else 
                                    

                                        z
            =z0; 
                                        y
            =y0;
                                    }

                                }

                            }

                        }

                    }

                }


                
            // 返回實根的數目
                return(n);
            }


            int main()
            {
                cout
            <<"對分法求解非線性方程:"<<endl;

                
            double a = -2.5, b = 5;
                
            double *x= new double[6];

                
            int n = getRootBisect(6, x, a, b, 0.2);
                cout
            <<"共有"<<n<<"個根:"<<endl;
                
            for (int i =0; i<n; i++)
                
            {
                    cout
            <<"  "<<x[i];
                }

                cout
            <<endl;

                system(
            "pause");
                
            return 0;
            }

             

            posted on 2007-04-20 19:35 哈哈 閱讀(1676) 評論(1)  編輯 收藏 引用

            評論:
            # re: 對分法求非線性方程的根 2008-05-18 11:52 | ijhokh
            chaoxi  回復  更多評論
              
            日本久久久久亚洲中字幕| 久久国产免费观看精品| 久久久久国产精品麻豆AR影院| 国产精品99久久精品| 久久免费视频观看| 久久久久久国产精品免费免费| 久久国产成人亚洲精品影院| 一本色综合久久| 久久精品视频免费| 99精品国产免费久久久久久下载| 国产成人无码精品久久久性色| 国产精品一久久香蕉国产线看| 久久99久久无码毛片一区二区| 国内精品人妻无码久久久影院导航| 久久精品免费一区二区三区| 久久这里的只有是精品23| 国产精品久久网| 97精品依人久久久大香线蕉97| 久久国产精品波多野结衣AV| 久久夜色精品国产噜噜亚洲AV| 国产精品午夜久久| 国产一级做a爰片久久毛片| 亚洲欧美精品一区久久中文字幕| 国产精品久久99| 久久久久亚洲Av无码专| 久久久无码精品亚洲日韩蜜臀浪潮| 久久香蕉综合色一综合色88| 性做久久久久久久| 亚洲AV无码久久精品狠狠爱浪潮| 久久精品一区二区三区中文字幕| 国内精品人妻无码久久久影院 | 亚洲精品无码久久毛片| 久久九九有精品国产23百花影院| 久久香综合精品久久伊人| 久久综合色老色| 天堂无码久久综合东京热| 国产高潮久久免费观看| 久久国产影院| 无码任你躁久久久久久老妇App| 亚洲乱码日产精品a级毛片久久 | 久久久久亚洲AV综合波多野结衣 |