您的位置:首页 > 编程语言 > C语言/C++

C语言之基本算法23—二分法求方程近似根

2015-07-10 11:08 302 查看
//二分法!

/*

========================================================

题目:用二分法求解方程3x^3-2x^2-16=0的近似解。

=========================================================

*/

#include <stdio.h>

#include <math.h>

double hs(double t)

{

return 3*t*t*t-2*t*t-16;//注意一定是单调函数,否则会得到局部解。考试时如果该函数是单调的,就可以用二分法快速求解!

}

void main()

{

double x0,x1,x2,f0,f1,f2;

printf("方程为:\n");

printf("3x^3-2x^2-16=0\n");

while ((f1*f2)>0)

{

printf("边界:\nx1=");

scanf("%lf",&x1);

printf("x2=");

scanf("%lf",&x2);

f1=hs(x1);

f2=hs(x2);

if((f1*f2)>0)

printf("\n请扩大区间!重新输入");

}

while(fabs(f0)>1e-9)

{

x0=(x1+x2)/2;

f0=hs(x0);

if ((f0*f1)>0)

{

x1=x0;

f1=f0;

}

else

{

x2=x0;

f2=f0;

}

}

printf("解得:\nx=%.4lf\n",x0);

}

/*

========================================================

评:思路是先找到两个不点使得对应的函数值异号(在零点两侧),这可以

通过将两点距离放大来实现,然后不断更新区间,总使得两点异号直到区间

足够小,则可近似得到此问题的解。二分法最符合人的思维模式,逻辑简单!

容易掌握!相比牛顿迭代法和穷举法,写程序略显麻烦!

=========================================================

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: