C 迭代法求开方 牛顿迭代法求根近似值

#include <stdio.h>
#include <math.h>
double f(double x);
double f2(double x);

int main(){

    //利用迭代法求√a的值  
    int a=7;
    double s1=0;
    double s2=0;
    s2=a;

    while( fabs(s1-s2)>1e-5 ){//10^-5
        s1=s2;//进行新的一轮计算  //原来的后一项是现在的第一项
        s2=(s1+a/s1)/2;    
    }
    printf("%lf",s2);
    
    //利用牛顿迭代法求方程的根
    //有这么一个方程2x^3+4x^2+3x-6=0
    //则令f(x)=2x^3+4x^2+3x-6  求出f'(x)=6x^2-8x+3
    //则下一个近似方程解x(n+1)和上一个解x(n)的关系:x(n+1)=x(n)-f((xn))/f'(x(n))
    //下面求来求2x^3+4x^2+3x-6=0方程的解  利用上述代码来求该方程在x=1.5附近的根
    //当f(x)的小于等于到10^-6次方就停止
    double y=1.5;
    double x=1.5;
    while(fabs(y)>(1e-6)){
        y=f(x);
        x=x-y/f2(x);
    
    }
    printf("\n%lf",x);


}

double f(double x){
    return 2*pow(x,3)-4*pow(x,2)+3*x-6;
}

double f2(double x){
    return 6*pow(x,2)-8*x+3;
}

 

posted @ 2013-03-26 13:48  cart55free99  阅读(430)  评论(0编辑  收藏  举报