所属分类: 心理学 心理学术语 数学术语

目录

编辑本段   回目录  

二分法 - 简介

一般地,对于函数f(x),如果存在实数c,当x=c是f(c)=0,那么把x=c叫做函数f(x)的零点

方程即要求f(x)的所有零点。

先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f【(a+b)/2】,

现在假设f(a)<0,f(b)>0,a<b

如果f【(a+b)/2】=0,该点就是零点,

如果f【(a+b)/2】<0,则在区间((a+b)/2,b)内有零点,按上述方法在求该区间中点的函数值,这样就可以不断接近零点

如果f【(a+b)/2】>0,同上

通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,这种方法叫做二分法。

由于计算过程的具体运算复杂,但每一步的方式相同,所以可通过编写程序来运算。

例:(C语言)

方程式为:f(x) = 0,示例中f(x) = 1+x-x^3

编辑本段   回目录  

二分法 - 使用示例:



input a b e: 1 2 1e-5

solution: 1.32472

源码如下:

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <assert.h>

double f(double x)

{

return 1+x-x*x*x;

}

int main()

{

double a = 0, b = 0, e = 1e-5;

printf("input a b e: ");

scanf("%lf%lf%lf", &a, &b, &e);

e = fabs(e);

if (fabs(f(a)) <= e)

{

printf("solution: %lg\n", a);

}

else if (fabs(f(b)) <= e)

{

printf("solution: %lg\n", b);

}

else if (f(a)*f(b) > 0)

{

printf("f(%lg)*f(%lg) > 0 ! need <= 0 !\n", a, b);

}

else

{

while (fabs(b-a) > e)

{

double c = (a+b)/2.0;

if (f(a)* f ( c ) < 0)

b = c;

else

a = c;

}

printf("solution: %lg\n", (a+b)/2.0);
}
return 0;
}

→ 如果您认为本词条还有待完善,请 编辑词条 收藏词条 至个人空间

开放分类:
心理学
心理学术语
数学术语
我来补充
同义词:

进入维吧>>

发表留言

  • 标题:
  • 内容:

    基本信息

    兵临城下6

    相关词条 完善

    暂无相关词条

    英译