C语言 二分法求方程
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/04 15:46:15
C语言 二分法求方程
#include <stdio.h>
#include <assert.h>
double f(double x)
{
return 2 *x*x*x - 4 *x*x + 3 *x - 6;
}
//利用零点存在定律,二分求解方程
double dichotomy(double a,double b,double min_len,double (*f)(double)){
assert(a <= b);
assert(f(a) * (b) <= 0);
if(f(a) == 0.0) return a;
if(f(b) == 0.0) return b;
double m;
for (m = (a+b)/2; b - a > min_len && f(m) != 0.0; m = (a+b)/2) {
f(a)*f(m) < 0 ? (b = m) : (a = m);
}
return m;
}
int main(){
double a,b;
scanf("%lf%lf",&a,&b);
printf("%lf\n",dichotomy(a, b, 0.001, f));
}min_len是精确度
#include <assert.h>
double f(double x)
{
return 2 *x*x*x - 4 *x*x + 3 *x - 6;
}
//利用零点存在定律,二分求解方程
double dichotomy(double a,double b,double min_len,double (*f)(double)){
assert(a <= b);
assert(f(a) * (b) <= 0);
if(f(a) == 0.0) return a;
if(f(b) == 0.0) return b;
double m;
for (m = (a+b)/2; b - a > min_len && f(m) != 0.0; m = (a+b)/2) {
f(a)*f(m) < 0 ? (b = m) : (a = m);
}
return m;
}
int main(){
double a,b;
scanf("%lf%lf",&a,&b);
printf("%lf\n",dichotomy(a, b, 0.001, f));
}min_len是精确度