实验五用Newton法计算方程的根.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
五. 讨论分析
当初始值选取离零点较远时将导致算法无法使用,例如第三题,将初始值改为2就无法计算出结果了,显示如下
例如求020sin 35=-+-x x e x 的根,其中控制精度1010-=eps ,最大迭代次数40=M ,在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 超级画
板,其操作流程为:
牛顿迭代法的公式是:x n+1=x n-f(x n)/f'(x n)。
下面我们就用牛顿迭代法设计程序求方程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);
执行后,返回结果为:
>> 2+1/x #
得到了f(x)的导函数。
继续输入:
g(x){2+1/x;}
这表示在计算机已经完成了函数g(x)的定义。
(3)在下面输入:
NewtonMethod(x0,h)
{
x=x0-f(x0)/g(x0);
if(abs(x-x0)<=h){return x;}
else{NewtonMethod(x,h);}
}
}
执行后,返回结果为:
>> NewtonMethod(x0,h) #