您的位置:首页 > 编程语言

PAT编程基础 5-18 二分法求多项式单根 (20分)

2017-01-17 15:45 148 查看

5-18 二分法求多项式单根 (20分)

二分法求函数根的原理为:如果连续函数f(x)f(x)在区间[a, b][a,b]的两个端点取值异号,即f(a)f(b)<0f(a)f(b)<0,则它在这个区间内至少存在1个根rr,即f(r)=0f(r)=0。

二分法的步骤为:



输入样例:

3 -1 -3 1

-0.5 0.5

输出样例:

0.33

分析:

二分法的定义上面已经描述的很清楚了,只需要把每个分步骤写出来即可

AC代码:

#include<stdio.h>

double f (double a[], double x);

int main ()
{
double a[4];
int i;
for (i=3; i>=0; i--) {
scanf("%lf", &a[i]);
}

double low, high;
scanf("%lf %lf", &low, &high);
double mid = ( low + high) /2;
//区间长度大于给定阈值,并且中点値不为零
while (f(a, mid) != 0 && (high - low) > 0.001) {
//如果左端点处值为零,即左端点为根,输出
if (f(a, low) == 0) {
mid = low;
break;
}
//如果右端点处值为零,即右端点为根,输出
if (f(a, high) == 0) {
mid = high;
break;
}
//如果f((a+b)/2)与f(low)同号
if (f(a, mid) * f(a, low) < 0) {
high = mid;
} else {
//如果f((a+b)/2)与f(high)同号
low = mid;
}
mid = (low + high) / 2;
}

printf("%.2f\n", mid);

return 0;
}

double f (double a[], double x) {
return a[3] * x * x * x + a[2] * x * x + a[1] * x + a[0];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PAT基础编程