2697:迭代法解方程
总时间限制:
-
2000ms
内存限制:
-
65536kB
描述
-
对函数y = f(x) = x*x*x + x + a(其中a大于0)。要直接求y=0时x的取值并不容易,但因为y是单调递增的函数,我们可以利用这个性质求x的近似值。取x1=-a,显然f(-a)小于0,取x2=0,显然f(a)大于0。我们规定近似误差不超过b(比如b=0.001)。这时我们取x=(x2-x1)/2,再判断(x2-x1)是否小于b,如果小于b,x就是我们要求的值,否则我们需要判断f(x)的取值,如果f(x)大于0,令x2=x,重新求解;如果f(x)小于0,令x1=x,也重新求解;如果f(x)恰好等于0,则以此x应作为最终x的取值。我们把这种求解的过程称为迭代法。
输入
-
第一行为数据数量n。其余个行每行包含两个浮点数a和b。
输出
-
输出为n行,每行输出对应的x和y的值。
样例输入
-
3
23 0.01
23 0.001
23 0.0001
样例输出
-
-2.726196 0.012314
-2.726547 0.004137
-2.726767 -0.000974
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i;
double x,b,a;
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%lf %lf",&a,&b);
if(a>0){
x = (-a-0)/2;
}
if(x<0){
while(x<0){
x=(a-0)/2;
}
}
if(x>0){
while(x>0){
x=(-x);
}
}
if(x==0 || x<b){
printf("%lf %lf\n",x,x*x*x+x+a);
}
}
return 0;
}