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);
}
/*
========================================================
评:思路是先找到两个不点使得对应的函数值异号(在零点两侧),这可以
通过将两点距离放大来实现,然后不断更新区间,总使得两点异号直到区间
足够小,则可近似得到此问题的解。二分法最符合人的思维模式,逻辑简单!
容易掌握!相比牛顿迭代法和穷举法,写程序略显麻烦!
=========================================================
*/
/*
========================================================
题目:用二分法求解方程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);
}
/*
========================================================
评:思路是先找到两个不点使得对应的函数值异号(在零点两侧),这可以
通过将两点距离放大来实现,然后不断更新区间,总使得两点异号直到区间
足够小,则可近似得到此问题的解。二分法最符合人的思维模式,逻辑简单!
容易掌握!相比牛顿迭代法和穷举法,写程序略显麻烦!
=========================================================
*/
相关文章推荐
- 实例分析用指针访问二维数组的几种方法
- 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++ 跨平台的区别
- 基于C++的C语言词法分析器
- leetcode 3sum c语言
- C++ 引用
- 浅谈C语言中的联合体