1:第二章(1)二分法求解非线性方程:#include#include#definef(x)((x*x-1)*x-1)voidmain(){floata,b,x,eps;intk=0;printf("intputeps\n");/*容许误差*/scanf("%f",&eps);printf("a,b=\n");for(;;){scanf("%f,%f",&a,&b);if(f(a)*f(b)>=0)/*判断是否符合二分法使用的条件*/printf("二分法不可使用,请重新输入:\n");elsebreak;}do{x=(a+b)/2;k++;if(f(a)*f(x)vO)/*如果 f(a)*f(x)vO,则根在区间的左半部分*/b=x;elseif(f(a)*f(x)>0)/*否则根在区间的右半部分*/a=x;elsebreak;}while(fabs(b-a)>eps);/*判断是否达到精度要求,若没有达到,继续循环*/x=(a+b)/2;/*取最后的小区间中点作为根的近似值*/printf("\nTherootisx=%f,k=%d\n",x,k);}运行结果:intputeps0
00001a,b=2,-5Therootisx=1
324721,k=20Pressanykeytocontinue总结:本题关键在于两个端点的取值和误差的判断,此程序较容易
二分法收敛速度较快但缺点是只能求解单根
(2)牛顿法求解非线性方程:#include#includefloatf(floatx)/*定义函数 f(x)*/{return((-3*x+4)*x-5)*x+6;}floatf1(floatx)/*定义函数 f(x)的导数*/{return(-9*x+8)*x-5;}voidmain(){floateps,x0,x1=1
0;printf("inputeps:\n");sca