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);
}
/*
================================================================
评:
黄金分割法效率高,但是对初学者来说编写程序比较麻烦,相比而言穷举法程序编写
简单,但效率低下,不过其适用范围很广,只要给定区间,就可以穷举!对于简单方程
的求解,穷举法很容易实现!在没有办法的情况下,穷举法是可以采取的!
================================================================
*/
/*
================================================================
题目:用黄金分割法求解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);
}
/*
================================================================
评:
黄金分割法效率高,但是对初学者来说编写程序比较麻烦,相比而言穷举法程序编写
简单,但效率低下,不过其适用范围很广,只要给定区间,就可以穷举!对于简单方程
的求解,穷举法很容易实现!在没有办法的情况下,穷举法是可以采取的!
================================================================
*/
相关文章推荐
- C++ Socket编程步骤
- C++ 对进程各种操作函数
- C++MFC编程笔记day06 MFC向导、MFC绘图类使用
- C语言之基本算法23—二分法求方程近似根
- 实例分析用指针访问二维数组的几种方法
- c++primer要点-表达式
- C++中公有继承、保护继承、私有继承的区别
- chapter17test1
- c++primer要点-字符串、向量和数组
- C语言实现二叉树的递归遍历和非递归遍历
- C语言中结构体内存分配机制
- [转] 值得推荐的C/C++框架和库
- C++中关于使用到CString的若干问题
- C语言之基本算法22—穷举法求方程近似根
- 【C++】实现一个简洁版的class String
- 关于C++子类父类成员函数的覆盖和隐藏
- C++处理JSON示例
- c++primer 要点-变量和基本类型
- C语言之基本算法21—可逆素数
- Java C# .net 和 C C++ 跨平台的区别