zoukankan      html  css  js  c++  java
  • 牛顿迭代法 matlab程序[z]

    1.功能

    本程序采用牛顿法,求实系数高次代数方程

    f(x)=a0xn+a1xn-1+…+an-1x+an=0 (an≠0  (1)

    的在初始值x0附近的一个根。

    2.使用说明

    (1)函数语句

    Y=NEWTON_1(A,N,X0,NN,EPS1)

    调用M文件newton_1.m。

    (2)参数说明

    A n+1元素的一维实数组,输入参数,按升幂存放方程系数。

    N 整变量,输入参数,方程阶数。

    X0 实变量,输入参数,初始迭代值。

    NN 整变量,输入参数,允许的最大迭代次数。

    EPS1 实变量,输入参数,控制根的精度。

    3.方法简介

    解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数

    f(x)=f(x0)+(x-x0)fˊ(x0)+(x-x0)2 +…

    取其线性部分,作为非线性方程f(x)=0的近似方程,则有

    f(x0)+fˊ(x0)(x-x0)=0

    设fˊ(x0)≠0则其解为

    x1=x0-f(x0)/fˊ(x0)

    再把f(x)在x1附近展开成泰勒级数,也取其线性部分作f(x)=0的近似方程。若f(x1)≠0,则得

    x2=x1-f(x1)/fˊ(x1)

    这样,得到牛顿法的一个迭代序列

    xn+1=xn-f(xn)/fˊ(xn)

    4.newton_1.m程序

    function y=newton_1(a,n,x0,nn,eps1)

    x(1)=x0;

    b=1;

    i=1;

    while(abs(b)>eps1*x(i))

    i=i+1;

    x(i)=x(i-1)-n_f(a,n,x(i-1))/n_df(a,n,x(i-1));

    b=x(i)-x(i-1);

    if(i>nn)error(ˊnn is fullˊ);

    return;

    end

    end

    y=x(i);

    i

    end

    程序中调用的n_f.m和n_df.m文件如下:

    function y=n_df(a,n,x)%方程一阶导数的函数
    y=0.0;
    for i=1:n
    y=y+a(i)*(n+1-i)*x^(n-i);
    end

    function y=n_df(a,n,x)

    y=0.0;

    for i=1:n

    y=y+a(i)*(n+1-i)*xˆ(n-i);

    end

    5.程序附注

    (1)程序中调用n_f.m和n_df.m文件。n_f.m是待求根的实数代数方程的函数,n_df.m是方程一阶导数的函数。由使用者自己编写。

    (2)牛顿迭代法的收敛速度:如果f(x)在零点附近存在连续的二阶微商,ξ是f(x)的一个重零点,且初始值x0充分接近于ξ,那么牛顿迭代是收敛的,其收敛速度是二阶的,即平方收敛速度。

    6.例题

    用牛顿法求下面方程的根

    f(x)=x3+2x2+10x-20

    7.运行结果

    >>a=[1,2,10,-20] ;

    >>n=3;

    >>x0=1;

    >>nn=1000;

    >>eps1=1e-8;

    >>y=newton_1(a,n,x0,nn,eps1)

    y=

    1.368808107821373e+000

    i=

    6

    原帖:http://www.ymlib.net/article/sort010/info-123.html

  • 相关阅读:
    mysql语句-DDL语句
    Web框架本质
    HTTP协议那些事儿(Web开发补充知识点)
    利用random模块生成验证码
    前端小练习
    常用模块collections
    强大的图片展示插件,JQuery图片预览展示插件
    笔记本电脑清除BIOS密码
    js中的new Option默认选中
    使用PHPMailer发送邮件
  • 原文地址:https://www.cnblogs.com/begtostudy/p/1807554.html
Copyright © 2011-2022 走看看