牛顿迭代法原理及C++实现

牛顿迭代法

牛顿迭代法的思想是将非线性函数(原方程)线性化(切线方程),以线性方程的解逐步逼近非线性方程的解。
在这里插入图片描述

算法步骤

步骤1:设x*是f(x)= 0 的根,选取x0作为x*初始近似值,并设f(x), f(x)和f’’(x) 在x*附近连续。过点(x0,f(x0)) 做曲线y=f(x)的切线L,L的方程为y=f(x0)+f’(x0)(x-x0) ,这里其实是f(x)在x0处的一阶Taylor展开,求出L与x轴交点的横坐标x1= x0-f(x0)/f’(x0) ,称x1 为x0 的一次近似值。

步骤2:过点(x1,f(x1)) 做曲线 的切线,并求该切线与x轴交点的横坐标 x2= x1-f(x1)/f’(x1) ,称x2为x*的二次近似值。

步骤3:重复以上过程,得 x*的近似值序列xk+1= xk-f(xk)/f’(xk),其中xk+1,称为 的k+1次近似值,上式称为牛顿迭代公式。

步骤4:在迭代序列收敛的情况下,取满足精度的迭代值 xk作为方程的根x* 的近似值。

算法流程

在这里插入图片描述

例题

用牛顿迭代法求解方程x3-3x-1=0 在x0=2 附近的根,精确到小数点后第四位。

代码实现

#include "stdio.h"
#include "math.h"
main()
{
 float x0,x1=2;
 int i=0;
 printf("\nx%d=%7.6f",i,x1);
 i++;
 do
   {
    x0=x1;
    x1=x0-(x0*x0*x0-3*x0-1)/(3*x0*x0-3);  //代码求导搞不定,只能手动求导了,囧~
    printf("\nx%d=%7.6f",i,x1);
    i++;
   }while(fabs(x1-x0)>=0.000001);
 printf("\nx=%5.5f",x1);
}

计算结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值