牛顿迭代法(含辗转相除法原理):近似求解方程的根

结论:迭代序列: x (n+1)=  x (n)- f ( x(n) ) / f '( x(n) )

(附C++代码)

(通过不断作切线找切线与x轴交点重复,交点不断向根逼近)

牛顿迭代法:在实数和复数域求方程的近似根,由泰勒级数前几项寻找

计算方法:

设 x 是 f(x) = 0的根,选取 x0 作为 x 初始近似值,过点( x0, f(x ) )做曲线y = f(x)的切线L,则L的方程为y = f(x0)+f '(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0) / f '(x0),称 x1为x的一次近似值。过点(x1 , f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/ f '(x1),称x2为x的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为x的n+1次近似值,上式称为牛顿迭代公式

解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… 取其线性部分(一次),作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x0)+f'(x0)(x-x0)=0 设f'(x0)≠0则其解为x1=x0-f(x0)/f'(x0) 这样,得到牛顿法的一个迭代序列:x(n+1)= x(n)-f(x(n) ) / f '(x(n) )。

//求3元一次方程ax^3+bx^2+cx+d=0的解

//比如 x^3-27=0,我们就可以输入1 0 0 -27,这样我们就可以得到一个解

#include<iostream>

#include<cmath>

using namespace std;

double diedai(double a,double b,double c,double d,double x)

{
    while(abs(a*x*x*x+b*x*x+c*x+d)>0.000001)

       x=x-(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c);

    return x;
}

int main()

{
   

    double a,b,c,d;

    double x=10000.0;

    cout<<"请依次输入方程四个系数:";

    cin>>a>>b>>c>>d;

    x=diedai(a,b,c,d,x);

    cout<<x<<endl;
    
    return 0;
}

迭代法:又称辗转法,通过变量的旧值 推导新值的方法

辗转相除法:最大公因数:gcd(a,b)=gcd(b,a mod b);

证:设a=kb+r,则r=a-kb,设m为a,b的公因数,则a%m=b%m=0;所以r%m=0,所以m为a%b的公因数。

反之,设m为b,a mod b的公因数,则a%m=0,所以m为a的公因数。

所以a,b的公因数与b,a mod b的公因数相同,所以最大公因数也相同

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值