区间二分法在非线性方程的数值解法中算是最简单的方法了;我这里给出的是最原始的二分法,没有经过优化的代码。
#include <iostream>
#include <cstdio>#include <cmath>
#include <algorithm>
using namespace std;
double f(double x){
return 1-x-sin(x);
}//这是返回要处理的函数的值, 大家可以根据自己的需求改变。
int main()
{
double a,b,s;
printf("请输入a,b的值,及精度\n");
scanf("%lf%lf%lf",&a,&b,&s);
int k = 0;
if((f(a)*f(b))>0)
{
printf("请输入a,b的值,及精度\n");
scanf("%lf%lf%lf",&a,&b,&s);
}
while(1){
if((f(a)*f(b))==0)
{
if(f(a)==0)
{
printf("%lf %d\n",a,k);
break;
}
else
{
printf("%lf %d\n",b,k);
break;
}
}
else
{
double m = (a+b)/2;
double n = a-b;
if(fabs(n)<s)
{
printf("结果:%lf ,迭代次数%d\n",m,k);
break;
}
else
{
if((f(a)*f(b))>0)
{
a = m;
}
else b = m;
}
}
k++;
}//while循环是整个代码的核心。
return 0;
}