牛顿迭代法求根

前言

帮朋友做的一个题目,关于牛顿迭代法求方程的根. 不难,但是费了我很长时间,以前的知识,重新拾起来却很耗时间。今天做一记录,一来加深印象,二来备必要时查看。

1、牛顿迭代法的基本知识

参考资料:Newton’s Method and Loops

上面的资料阐述很详细,我就不多加补充。

2、问题简述

用牛顿迭代法求 9x2sinx=0 在[0,1]内的一个根。

3、问题求解

1、建立EquaNewton.m文件

function [k,x,f_value]=EquaNewton(f,Df,x0,eps,N)
fprintf( ' k x f\n');
f_value=f(x0);
for k=1:N
    x=x0-f_value/Df(x0);
    f_value=f(x);
    fprintf(  '%3d, %12.11f, %12.11f\n',k,x,f_value)
    if abs(x-x0)<eps
        return
    else
        x0=x;
        if k==N
            warning('算法超出最大迭代次数!');
        end
    end
end

参数解释:
f:原函数
Df: 原函数的导数
x0:初始迭代值
eps:结果的精度
N: 最大的迭代次数

2、命令行窗口运行

f=inline(‘9*x^2 - sin(x) - 1’);
Df=inline(‘18*x - cos(x)’);
x0=1;
eps=1e-5;
N=1e5;

运行:

EquaNewton(f,Df,x0,eps,N)

结果:

EquaNewton(f,Df,x0,eps,N)
k x f
1, 0.58999696669, 1.57650928396
2, 0.42894795297, 0.24005282000
3, 0.39370649299, 0.01142925889
4, 0.39185206418, 0.00003160878
5, 0.39184690704, 0.00000000024
ans =
5

取最后的结果:0.39184690704

以上是个人的总结,有不妥之处,麻烦在评论中指出.

你可能感兴趣的:(matlab,牛顿迭代法,求根)