解方程(迭代)

牛顿迭代法

x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式

解方程

 

Time Limit:   1000MS       Memory Limit:   65535KB
Submissions:   28       Accepted:   13

 

Description
求解方程 sqrt(x)+pow(x, (double)1/3))==a (0<=a<=100)。

 

Input
输入包含多组测试数据,输入文件的第一行包含一个整数t,表示测试数据组数。每组测试数据中只有一行,包含一个整数 a(0<=a<=100)。

 

Output
每组测试数据的输出只占一行,包含一个浮点数(四舍五入保留10位小数),表示方程的解。我们假设X取值范围为(0 =< X < 6666)。

 

Sample Input

3
0
1
2

Sample Output

0.0000000000
0.1850373752
1.0000000000
Hint
注意精度问题,最好将精度值设在1e-14
# include<iostream>
# include<stdio.h>
# include<cmath>
using namespace std;
int a;
double x1,x2;
double f(double x)//相当于f(x)
{
    return sqrt(x)+pow(x,1.0/3)-a;
}
double Df(double x)//相当于f'(x)
{
    return 1/(2*sqrt(x))+1.0/(3*pow(x,2.0/3));
}
int main()
{
    int nCase;
    
    cin>>nCase;
    while(nCase--)
    {
        cin>>a;
        x1=1;
        x2=0;
        if(a==0)
        {
            cout<<"0.0000000000"<<endl;
            continue;
        }
        while(fabs(x1-x2)>=0.00000000000001&&x1>=0&&x2>=0)//迭代
        {
           x2=fabs(x1-f(x1)/Df(x1));
           x1=fabs(x2-f(x2)/Df(x2));
        }
        printf("%0.10lf\n",x1);
    }
    return 0;
}

 

posted on 2012-05-07 09:34  即为将军  阅读(746)  评论(0)    收藏  举报

导航