用C#編寫二分法解一元非線性方程

來源:互聯網
上載者:User

在計算方法裡有一種求一元非線性方程的解法,叫做二分法。

簡單介紹如下:

函數F(x)在區間[a,b] 上連續,假定在區間內有唯一實根,計為x*

二分法的思想為:首先確定有根區間,將區間二等分,通過判斷F(x)的符號,逐步將有根區間縮小,直至有根區間足夠小,便可求出滿足精度要求的近似根。

然後給出一例題和C#的編程解法:

//用二分法求方程f(x)=x^4-x-10.27=0在(1,2)上的根。精確到10^(-2)
using System;

class Dichotomy
{    
    static void Main()
    {
        int k = -1;    //記錄迴圈索引
        double a = 1;    //下限
        double b = 2;    //上限
        double x = 0;    //所求的根
        
        Console.Write("k   a \t         b \t      x \t   F(x) \t       a-b\n");
        
        //第一次計算
        x = (a+b)/2;
        k++;
            
        Console.Write("{0,-4}{1,-13}{2,-13}{3,-13}{4,-20}{5}\n",k,a,b,x,F(x),a-b);
        
        while(true)
        {
            
            k++;
            double f = F(x);
            
            if(f < 0)
            {
                a = x;
            }
            else if(f > 0)
            {
                b = x;
            }
            x = (a+b)/2;
            if((b - a) < 0.01)
            {
                Console.Write("{0,-4}{1,-13}{2,-13}{3,-13}{4,-20}{5}\n",k,a,b,x,f,a-b);
                break;
            }
            
            Console.Write("{0,-4}{1,-13}{2,-13}{3,-13}{4,-20}{5}\n",k,a,b,x,f,a-b);
            
        }
        Console.ReadLine();            
    }
    
    private static double F(double x)
    {
        return Math.Pow(x,4) - x - 10.27;
    } 
}

輸出結果為:

k   a            b            x            F(x)                a-b
0   1            2            1.5          -6.7075             -1
1   1.5          2            1.75         -6.7075             -0.5
2   1.75         2            1.875        -2.64109375         -0.25
3   1.75         1.875        1.8125       0.214619140625      -0.125
4   1.8125       1.875        1.84375      -1.29024841308594   -0.0625
5   1.84375      1.875        1.859375     -0.557734031677246  -0.03125
6   1.859375     1.875        1.8671875    -0.176621873378753  -0.015625
7   1.859375     1.8671875    1.86328125   0.0177218760550026  -0.0078125

可見b7 - a7 約等於0.0078<10^(-2),從而|x*-x7|<=0.5*(b7 - a7 )<=0.5*10^(-2),也就是滿足題目的精度要求,所以滿足要求的根為:x*約等於1.863

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.