实验五 用Newton法计算方程的根

时间:2026-01-19

佛山科学技术学院

实课程名称 实验项目 专业班级 指导教师

数值分析 用 Newton 法和 steffensen 加速法计算方程的根 姓名 学号 成 绩 日 期

一. 实验目的 1、 在计算机上用迭代法求非线性方程 f ( x) 0 的根。 二. 实验要求

1、按照题目要求完成实验内容;2、写出相应的 Matlab 程序; 3、给出实验结果(可以用表格展示实验结果); 4、分析和讨论实验结果并提出可能的优化实验。 5、写出实验报告。 三. 实验步骤 1、 用 Matlab 编写 Newton 法和 Steffensen 加速法程序 2、用 Newton 法求解书本 P229 例题 4,Steffensen 加速法计算 P255 例题 1。 3、用调试好的程序解决如下问题 求e5x

sin x x 3 20 0 的根,其中控制精度 eps 10 10 ,最大迭代次数 M 40 。

编制计算函数值的程序: 四. 实验结果 1、用 Matlab 编写 Newton 法和 Steffensen 加速法程序; 利用 Newton 法求方程的根: function [x_star, index, it]=Newton(fun, x, ep, it_max) % 求解非线性方程的 Newton 法,其中 % fun(x) --- 需要求根的函数, % 第一个分量是函数值,第二个分量是导数值 % x --- 初始点。

% % % % % % %

ep --- 精度,当|(x(k)-x(k-1)|<ep 时,终止计算。省缺为 1e-5 it_max --- 最大迭代次数,省缺为 100 x_star --- 当迭代成功时,输出方程的根, 当迭代失败时,输出最后的迭代值。 index --- 当 index=1 时,表明迭代成功, 当 index=0 时,表明迭代失败(迭代次数 >= it_max) 。 it --- 迭代次数。

if nargin <4 it_max=100; end if nargin <3 ep=1e-5; end index=0; k=1; while k<=it_max x1=x; f=feval(fun, x); if abs(f(2))<ep break; end x=x-f(1)/f(2); if abs(x-x1)<ep index=1; break; end k=k+1; end x_star=x; it=k; 利用 steffensen 加速迭代方法: function [x_star, index, it]=steffensen(phi, x, ep, it_max) % Steffensen 加速方法 % phi(x) --- 迭代函数 % x --- 初始点。 % ep --- 精度,当|(x(k)-x(k-1)|<ep 时,终止计算。省缺为 1e-5 % it_max --- 最大迭代次数,省缺为 100 % x_star --- 当迭代成功时,输出方程的根, % 当迭代失败时,输出最后的迭代值。 % index --- 当 index=1 时,表明迭代成功, % 当 index=0 时,表明迭代失败(迭代次数 >= it_max) 。 % it --- 迭代次数。 if nargin <4 it_max=100; end if nargin <3 ep=1e-5; end index=0; k=1; while k<=it_max x1=x; y=feval(phi,x); z=feval(phi,y); x=x-(y-x)^2/(z-2*y+x); if abs(x-x1)<ep index=1; break; end k=k+1; end

x_star=x; it=k; 2、用 Newton 法求解书本 P229 例题 4,Steffensen 加速法计算 P255 例题 1。 用 Newton 法计算书本 P229 例题 4。 (求方程 f(x)=x^3-x-1=0 在区间[1,2]内的根) fun=inline('[x^3-x-1,3*x^2-1]'); [x_star,index,it]=Newton(fun,1.5) 书本 P255 例题 1:求 x=x^3-1 在 x0=1.5 附近解。 phi=inline('x^3-1'); [x_star,index,it]=steffensen(phi,1.5)

3、用调试

好的程序解决如下问题 求e5x

sin x x 3 20 0 的根,其中控制精度 eps 10 10 ,最大迭代次数 M 40 。

编制计算函数值的程序: 由上面利用 Newton 法求方程的根的程序知: % ep --- 精度,当|(x(k)-x(k-1)|<ep 时,终止计算。省缺为 1e-5 % it_max --- 最大迭代次数,省缺为 100 if nargin <4 it_max=100; end if nargin <3 ep=1e-5; end 我们只需改动:it_max=40; ep=1e-10, 其余不变 。

,

:

fun=inline('[exp(5*x)-sin(x)+(x)^3-20,5*exp(5*x)-cos(x)+3*(x)^2]'); [x_star,index,it]=Newton(fun,0.5),可得: x_star = index = 1 it = 6 同理,在 steffensen 加速迭代方法的程序中,我们只需改动:it_max=40; ep=1e-10, 其 余不变 。利用以上程序,我们只需输入: phi=inline('exp(5*x)-sin(x)+(x)^3-20'); [x_star,index,it]=steffensen(phi,0.5)可得: x_star = 0.637246094753909 index = 0 it = 41 0.602596203566521

五. 讨论分析 当初始值选取离零点较远时将导致算法无法使用,例如第三题,将初始值改为 2 就无法计 算出结果了,显示如下

例如求 e

5x

sin x x 3 20 0 的根,其中控制精度 eps 10 10 ,最大迭代次数

M 40 ,在 steffensen 加速迭代方法的程序中,我们只需改动:it_max=40; ep=1e-10, 其余不变 。利用以上程序,我们只需输入: phi=inline('exp(5*x)-sin(x)+(x)^3-20'); [x_star,index,it]=steffensen(phi,0.5)可得: x_star = 0.637246094753909 index = 0 it = 41

观察上述结果,index = 0,it = 41 表明迭代失败,所以使用以上方法估计的时候,应该尽量估计出解的范围,偏离不应过大,距离增加迭代次数增加,也有可能迭代失败 六. 改进实验建议 根据上述分析,我认为,应该先对函数作一个简图,方便知道解的大概位置,然后我 们才将这个大概值代入 Newton 法或者 Steffensen 中进行求解。

当然,我们可以用其他数学软件实现 Newton 迭代法,我们可以用 z-z 超级画

板,其操作流程为:牛顿迭代法的公式是:xn+1=xn-f(xn)/f'(xn)。 下面我们就用牛顿迭代法设计程序求方程 f(x)=ln(x)+2*x-6 的近似解。 (一)观察方程 f(x)=0 的零点位置 (1)显示坐标系的坐标刻度。 (2)作出函数 y=ln(x)+2*x-6 的图像,如下图所示:

可以观察到方程的根在区间[2,3]上,我们可以设定近似解的初始值为 2。 (二)设计求方程近似解的程序 (1)在程序工作区中输入: f(x){ln(x)+2*x-6;} 执行后,返回结果为: >> f(x) # 这表示在计算机已经完成了函数 f(x)的定义。 (2)定义 f(x)的导函数 g(x),在程序工作区中输入: Diff(f(x),x); 执行后,返回结果为: …… 此处隐藏:2545字,全部文档内容请下载后查看。喜欢就下载吧 ……

实验五 用Newton法计算方程的根.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219