牛顿法求解非线性方程组的论文

牛顿法求解非线性方程组的论文

问:牛顿迭代法解非线性方程组
  1. 答:一元非线性方程的牛顿迭代公式和原理
    以一元非线性方程 f(x)=0 为例,对函数 f(x)进行Taylor级数展开(只展开至线性项)得
    f(x) = f(x0)+f'(x0)(x-x0)
    所以方程可写成
    f(x0)+f'(x0)(x-x0) = 0
    其中x0是给定的已知值,肆胡源则不难推导出方程的解(当然,只是近似解,毕竟Taylor展开过程中只取了线性项)
    x = x0 - f(x0) / f'(x0)
    其中x不是真实解,但是相比之前的x0更靠近真实解了,因此可以多重复几次上述过做脊程,裂态从而使得到的解非常接近准确值。所以,对于一元非线性方程,牛顿拉夫逊迭代公式为:
    x(k+1) = x(k) - f(x(k))/ f'(x(k))
    根据Taylor级数的几何意义我们可以从几何上形象的看牛顿迭代法的求解f(x)=0的过程。
    第一次迭代x1 = x0 - f(x0)/ f'(x0),其中f(x0)/ f'(x0)的几何意义很明显,就是x0到x1的线段长度(这可以从直角三角形的知识得到)。第二次迭代x2= x1 - f(x1)/ f'(x1),其中f(x1)/ f'(x1)的几何意义很明显,就是x1到x2的线段长度。同理可以进行第三次迭代第四次迭代,可以明显的看出x的取值在不断逼近真实解x*。
问:跪求用牛顿迭代法解非线性方程组,急!!
  1. 答:下面的是用MATLAB的
    牛顿迭代~
    %manewton.m
    function x=manewton(fun,dfun,x0,ep,N)
    %用途:用牛顿法求解旦卜非线性方程f(x)=0
    %格式:x=manewton(fun,dfun,x0,ep,N) fun和dfun分别为表示f(x)的
    %函指衫数句唯迟腔柄,x0为迭代初值,ep为精度(默认1e-4),N为最大迭代
    %次数(默认为500),x返回近似根
    if nargin<5,N=500;end
    if nargin<4,ep=1e-4;end
    k=0;
    while k<N
    x=x0-feval(fun,x0)/feval(dfun,x0);
    if abs(x-x0)<ep
    break;
    end
    x0=x; k=k+1;
    end
    if k==N, warning('已达迭代次数上限'); end
    disp(['k=',num2str(k)])
问:求解非线性方程组的牛顿迭代法的具体思想及方法并附有matlab 源程序
  1. 答:function x=Newton(fname,dfname,x0,e,N)
    %用途:Newton迭代法解非线性方程f(x)=0
    %fname和dfname分州扮神缺姿别表示f(x)及其导函数的M函数句柄或内嵌函数表达式
    %x0为迭代初值,e为精度(默认值1e-7)
    %x为返回数值解,并显示计算过程,设置迭代册亏次数上限N以防发散(默认500次)
    %实例:解方程ln(x+sin(x))=0
    %在matlab窗口中输入:Newton(@(x)log(x+sin(x)),@(x)(1+cos(x))/(x+sin(x)),0.1)
    if nargin<5,N=500;end
    if nargin<4,e=1e-7;end
    x=x0;x0=x+2*e;k=0;
    fprintf('x[%d]=%12.9f\n',k,x)
    while abs(x0-x)>e&&k<N
    k=k+1;
    x0=x;x=x0-feval(fname,x0)/feval(dfname,x0);
    fprintf('x[%d]=%12.9f\n',k,x)
    end
    if k==N
    fprintf('已达到迭代次数上限');
    end
    上面的程序段只是一个思路,你可以自己再理解一下,其实matlab中有一个内部函数fsolve,就可以直接求解非线性方程组的,很简单好用的!
    祝你解决问题!
  2. 答:# include <姿槐stdio.h>搜册薯
    # include <math.h>
    int main ()
    {
    double x1,x0,f,f1;
    x1 = 1.5;
    do
    {
    x0 = x1;
    f = ((2 * 0 - 4) * x0 + 3)* x0 - 6;
    f1 = (6 * x0 - 8) * x0 + 3;
    x1 = x0 - f /世者 f1;
    }while (fabs(x1 - x0) >= 1e-5);
    printf ("%5.2f\n",x1);
    return 0;
    }
牛顿法求解非线性方程组的论文
下载Doc文档

猜你喜欢