在计算方法里有一种求一元非线性方程的解法,叫做二分法。
简单介绍如下:
函数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


浙公网安备 33010602011771号