1. 程式人生 > >《C語言及程式設計》實踐參考——二分法解方程

《C語言及程式設計》實踐參考——二分法解方程

【專案2-二分法解方程】
  二分法是在電腦科學中很重要的一種方法,用於查詢產生二分查詢演算法,還可以用在很多場合。
  可以用二分法解方程。
  對於區間[a,b]上連續不斷且f(a)·f(b)<0的函式y=f(x),通過不斷地把函式f(x)的零點所在的區間一分為二,使區間的兩個端點逐步逼近零點,進而得到零點近似值的方法叫二分法。
  假設要求方程f(x)=0的解,給定精確度ξ。其演算法是:

1 確定區間[a,b],驗證f(a)·f(b)<0
2 求區間(a,b)的中點c
3 判斷
(1) 若f(a)·f(c)<0,則令b=c;
(2) 若f(c)·f(b)<0,則令a=c.
4 判斷f(c)是否達到精確度ξ:即若┃f(c)┃<ξ,則x=c就是使f(x)接近零點的近似值,否則重複2-4.
  請按照上面的演算法,程式設計序求解方程f(x)=2x^3-5x^2+3x-6=0,要求精確到0.00001

[參考解答]

#include <stdio.h>
double f(double); //f(x)函式
int main()
{
    double a,b,c;
    do
    {
        printf("請輸入一個範圍x0 x1:");
        scanf("%lf %lf", &a, &b); //嘗試輸入a和b的值,即確定可能解所在的區間

    }
    while(f(a)*f(b)>=0); //要求這兩點上的函式值異號,從而保證[a, b]之間有解
            printf("在[%.2f, %.2f]間,方程將有一個根\n",a, b);
    do
    {
        c=(a+b)/2;
        if(f(a)*f(c)<0) //二分法判斷函式值包含0的X取值區間
        {
            b=c;
        }
        else
        {
            a=c;
        }
    }
    while((f(c)>1e-5)||(f(c)<-1e-5));//判斷根c是否在接近函式值0的精確範圍內
    printf("方程的根為:%.5f\n",c);
    return 0;
}
double f(double x)
{
    return(3*x*x*x-5*x*x+3*x-6);
}