牛顿法求最小值c语言,二分法和牛顿法求解非线性方程(c语言)

《二分法和牛顿法求解非线性方程(c语言)》由会员分享,可在线阅读,更多相关《二分法和牛顿法求解非线性方程(c语言)(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(x)0) /* 否则根在区间的右半部分 */a=。

2、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,-5The root is x=1., k=20Press any key to continue总结:本题关键在于两个端点的取值和误差的判断,此程序较容易。二分法收敛速度较快,但缺点是只能求解单根。(2)牛顿法求解非线性方程:#include #include float f(flo。

3、at 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.总结:关键是牛顿迭代的应用,程序中最大缺点是函数及其导数已唯一给出确定不可求的随意函数的根,牛顿法比二分法收敛快,可以求重根。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值