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