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

C语言之基本算法24—黄金分割法求方程近似根

2015-07-10 11:23 323 查看
//黄金分割法!

/*

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

题目:用黄金分割法求解3*x*x*x-2*x*x-16=0的根。

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

*/

#include<stdio.h>

#include <math.h>

#define E 1e-8

double hs(double x)

{

return 3*x*x*x-2*x*x-16;

}

double gen(double a,double b)

{

double x,fx,fa,fb,g;

g=(sqrt(5)-1.0)/2;

fa=hs(a);

fb=hs(b);

while(fabs(b-a)>E)

{

x=g*(b-a)+a;

fx=hs(x);

if(fa*fx>0)

{

a=x;

fa=fx;

}

else if(fb*fx>0)

{

b=x;

fb=fx;

}

}

return x;

}

main()

{

double a,b,t,fa,fb;

while(fa*fb>0)

{

printf("输入估计区间:\na=");

scanf("%lf",&a);

printf("输入估计区间:\nb=");

scanf("%lf",&b);

fa=hs(a);

fb=hs(b);

}

t=gen(a,b);

printf("方程:3*x*x*x-2*x*x-16=0\n");

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

}

/*

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

评:

黄金分割法效率高,但是对初学者来说编写程序比较麻烦,相比而言穷举法程序编写

简单,但效率低下,不过其适用范围很广,只要给定区间,就可以穷举!对于简单方程

的求解,穷举法很容易实现!在没有办法的情况下,穷举法是可以采取的!

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

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