百练 迭代法解方程 2697

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值