-
用迭代法求 x=√5
#include<stdio.h> #include<math.h> /* 用迭代法求 x=√5 求平方根的迭代公式为:X(n+1)=(Xn+a/Xn)/2 */ int algo01(){ float x1,x2; float a=5; x2=a/2; //要先预估一个值x1,其实可以随便找,通常取x1=a/2 do{ x1=x2; x2=(x1+a/x1)/2; //平方根的迭代公式 }while(fabs(x1-x2)>=1e-5); //如果不满足精确度则一直做 printf("迭代法求平方根,该数的平方根约为:%f\n",x2); } int main(){ algo01(); }
-
牛顿迭代法求方程f(x)=2x ^ 3-4x ^ 2+3x-6=0在1.5附近的根
#include<stdio.h> #include<math.h> /* 牛顿迭代法求方程f(x)=2x^3-4x^2+3x-6=0在1.5附近的根 对f(x)求导后f'(x)=6x^2-8x+3 */ int algo02(){ float x1,x2; float fx1,fx2; x2=1.5; //在1.5附近的根 do{ x1 = x2; fx1 = 2*x1*x1*x1 - 4*x1*x1 + 3*x1 - 6; //f(x) fx2 = 6*x1*x1 - 8*x1 + 3; //f'(x) x2 = x1 - fx1/fx2; //x2 = x1 - f(x1)/f'(x) }while(fabs(x1-x2)>=1e-5); //如果不满足精确度则一直做 printf("牛顿迭代法求解方程,该方程的根约为:%f\n",x2); } int main(){ algo02(); }
-
二分法求方程的根
#include<stdio.h> #include<math.h> /* 二分法求方程的根 给定精确度ξ,用二分法求函数f(x)零点近似值的步骤如下: 1 确定区间[a,b],验证f(a)•f(b)<0(这是前提,选取的区间必须满足这个条件),给定精确度ξ 2 求区间(a,b)的中点c 3 计算f(c) (1) 若f(c)=0,则c就是函数的零点; (2) 若f(a)•f(c)<0,则令b=c; (3) 若f(c)•f(b)<0,则令a=c. (4) 判断是否达到精确度ξ:即若|a-b|<ξ,则得到零点近似值a(或b),否则重复2-4. */ float fx(float x){ //求出方程在x处的解 return 2*x*x*x - 4*x*x + 3*x - 6; } void algo03(){ float x1,x2; float fx1,fx2; float tmp; float mid; do{ printf("请输入x1和x2【可以输入-15和10】:\n"); scanf("%f%f", &x1,&x2); if (x1>x2){ //令x1<x2 tmp = x1; x1 = x2; x2 = tmp; } fx1 = fx(x1); fx2 = fx(x2); }while(fx1*fx2>0); //确保fx1*fx2<0才可以用此方法 if(fabs(fx1)<=1e-5) //如果满足精确度直接打印结果 printf("二分法求解方程,该方程的根约为:%f\n", x1); else if(fabs(fx2)<=1e-5) //如果满足精确度直接打印结果 printf("二分法求解方程,该方程的根约为:%f\n", x2); else{ while(fabs(x1-x2)>=1e-5){ //如果不满足精确度则一直做 mid=(x1+x2)/2; //求x1和x2的中点值mid if(fx(mid)*fx2<0) x1 = mid; //在【mid,x2】中去找根 else x2 = mid; //在【x1,mid】中去找根 } printf("二分法求解方程,该方程的根约为:%f\n", x2); //x1和x2相差很小 } } int main(){ algo03(); }
C语言求方程根
最新推荐文章于 2023-10-20 22:21:11 发布