用牛顿迭代法求方程的根

用牛顿迭代法求方程的根(C语言)

题目要求:牛顿迭代法是一种重要的基本的求方程根的方法。现有方程为axˆ3+bxˆ2+cx+d=0,系数a,b,c,d的值一次为1,2,3,4,由主函数输入。求x在1附近的一个实根。

思路:

  1. 首先,设fx=axˆ3+bxˆ2+cx+d,则可在坐标图上画出fx。此时fx与横坐标的交点即为方程的,现在来求这个解的值
  2. 当x0=1时,fx=ax0ˆ3+bx0ˆ2+cx0+d
  3. 在(x0,fx)上作fx的切线,切线的斜率f为fx求导,得f=3axˆ2+2bx+c,交横坐标于(x1,0)点
  4. 根据三角函数定理,有f=fx/(x0-x1),转换得x1=x0-fx/f
  5. 可以看到,x1比x0离方程的解更接近
  6. 此时在(x1,fx1)上进行上述同样的操作。可以看到,切线与横坐标的交点离方程的解越来越近
  7. 如此循环,可以设置当(x1-x0)的绝对值小于1e-5即停止循环,最后的x1即为方程的近似解,可以通过放大或缩小1e-5的值来获得更为粗略或者精确的解

如图所示:

在这里插入图片描述

以下是具体代码:

#include <stdio.h>
#include <math.h>
int main()
{
    double newton_method(int a, int b, int c, int d);
    int a,b,c,d;
    double root;
    printf("please enter a,b,c,d: ");
    scanf("%d %d %d %d",&a,&b,&c,&d);
    root=newton_method(a,b,c,d);
    printf("The root is: %f\n",root);
    return 0;
}


double newton_method(int a, int b, int c, int d)
{
    double x1,x0,fx,f;
    x1=1.0;
    while(fabs(x1-x0)>=1e-5)
    {
        x0=x1;
        fx=a*x0*x0*x0+b*x0*x0+c*x0+d;
        f=3*a*x0*x0+2*b*x0+c;
        x1=x0-fx/f; 
    }
    return(x1);
}
  • 39
    点赞
  • 173
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值