交通分配与复杂网络分析

博客包含图论、复杂网络和交通流量分配问题等内容,涉及Matlab、C语言及软件...

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

//二分法!
/*
========================================================
题目:用二分法求解方程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);
}


/*
========================================================

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

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

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

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

=========================================================
*/
阅读更多
版权声明:博主文章可以被非商用转载,但请务必注明出处,因水平有限,难免出错,在此免责。 https://blog.csdn.net/LZX19901012/article/details/46828013
个人分类: C语言—基本算法
上一篇C语言之基本算法22—穷举法求方程近似根
下一篇C语言之基本算法24—黄金分割法求方程近似根
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭