回覆列表
  • 1 # 使用者9612754563896

    二分法的基本思路是:任意兩個點x1和x2,判斷區間(x1,x2)內有無一個實根,如果f(x1)與f(x2)符號相反,則說明有一實根。接著取(x1,x2)的中點x,檢查f(x)和f(x2)是否同號,如果不同號,說明實根在(x,x2)之間,如果同號,在比較(x1,x),這樣就將範圍縮小一半,然後按上述方法不斷的遞迴呼叫,直到區間相當小(找出根為止)!比如用二分法求f(x)=x^3-6x-1=0的實根。程式碼如下(已除錯):#include "math.h"main(){ float x,x1,x2; float F(float x,float x1,float x2); printf("請輸入區間[x1,x2]\n"); scanf("%f%f",&x1,&x2); printf("x=%f\n",F(x,x1,x2));}float F(float x,float x1,float x2){ float f,f1,f2; do { f1=pow(x1,3)-6*x1-1.0; f2=pow(x2,3)-6*x2-1.0; }while(f1*f2>0); //確保輸入的x1,x2使得f1,f2符號相反 do { x=(x1+x2)/2; //求x1,x2的中點 f=pow(x,3)-6*x-1.0; if(f1*f>0) //當f與f1符號相同時 {x1=x;f1=f;} else if(f2*f>0) //當f與f2符號相同時 {x2=x;f2=f;} }while(fabs(f)>1e-6); //判斷條件fabs(f)>1e-6的意思是f的值非常0 return x;}輸入:1 5則輸出:x=2.528918輸入:-10 10則輸出:x=2.528918

  • 中秋節和大豐收的關聯?
  • 路由器之間透過ip定址,那麼資料包中的mac資訊是怎麼變化的?