小新的技术天地

Make It Works !

博客园 首页 新随笔 联系 订阅 管理

在计算方法里有一种求一元非线性方程的解法,叫做二分法。

简单介绍如下:

函数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

 

posted on 2004-12-11 16:04  小新0574  阅读(4318)  评论(4编辑  收藏  举报