二分法和牛顿法求解非线性方程(c语言)(共2页).doc
《二分法和牛顿法求解非线性方程(c语言)(共2页).doc》由会员分享,可在线阅读,更多相关《二分法和牛顿法求解非线性方程(c语言)(共2页).doc(2页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上(1)二分法求解非线性方程:#include#include #define f(x) (x*x-1)*x-1) void main() float a,b,x,eps; int k=0; printf(intput epsn);/* 容许误差 */ scanf(%f,&eps); printf(a,b=n); for(;) scanf(%f, %f,&a ,&b); if(f(a)*f(b)=0) /* 判断是否符合二分法使用的条件 */ printf(二分法不可使用,请重新输入:n); else break; do x=(a+b)/2; k+; if(f(a)*f
2、(x)0) /* 如果f(a)*f(x)0) /* 否则根在区间的右半部分 */ a=x; else break; while(fabs(b-a)eps);/*判断是否达到精度要求,若没有达到,继续循环*/ x=(a+b)/2; /* 取最后的小区间中点作为根的近似值 */ printf(n The root is x=%f, k=%dn,x,k);运行结果:intput eps0.00001a,b=2,-5 The root is x=1., k=20Press any key to continue总结:本题关键在于两个端点的取值和误差的判断,此程序较容易。二分法收敛速度较快,但缺点是只能
3、求解单根。 (2)牛顿法求解非线性方程:#include #include float f(float x) /* 定义函数f(x) */ return(-3*x+4)*x-5)*x+6; float f1(float x) /* 定义函数f(x)的导数 */ return (-9*x+8)*x-5; void main() float eps,x0,x1=1.0; printf(input eps:n); scanf(%f,&eps); /* 输入容许误差 */ do x0=x1; /* 准备下一次迭代的初值 */ x1=x0-f(x0)/f1(x0); /* 牛顿迭代 */ while(fabs(x1-x0)eps); /*当满足精度,输出近似根*/ printf(x=%fn,x1);程序运行结果:x=1.总结:关键是牛顿迭代的应用,程序中最大缺点是函数及其导数已唯一给出确定不可求的随意函数的根,牛顿法比二分法收敛快,可以求重根。专心-专注-专业
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二分法 牛顿 求解 非线性 方程 语言
限制150内