题目:用牛顿法求方程x-cos(x)=0的实根(精确到1E-6)。
(1)要求用函数调用。
(2)进一步研究和弦截法作比较。
算法分析:
(1) 此题是利用牛顿方法解一元非线性方程的根。(牛顿法是把非线性方程局部线性化的一种方法,它在单根附近具有较高的收敛速度。)所以首先我们应先给出估计的根,先对方程x-cos(x)=0变形,令y1=x,y2=cos(x),则两函数图象的交点,就是方程x-cos(x)=0的根,这里利用Matlab作图估计根的值。
在Matlab命令行中输入,并运行:
>>x=-2:0.01:2;
>>y1=cos(x);
>>y2=x;
>>plot(x,y1,x,y2);
>>grid on;
可得下图:
从图中可以很容易得到根x的初值可选0.6。
(2)利用牛顿法的迭代公式x1=x0-(f(x0)/f’(x0));这里首先取x0=0.6,代入迭代公式,然后判断x1与x0之差的绝对值是否小于精度,如果小于精度,则停止,即得出根x的值,如果不小于精度,则继续迭代,直到符合精度为止。
Matlab代码如下:
(1)funNewton.m函数文件为:
(2)Newton.m脚本文件为:
在Matlab的命令行中输入(因为我的程序文件保存为:Newton.m脚本文件,funNewton.m函数文件):
>>Newton
x=0.739085133215161
结果分析:
在Matlab的命令行中输入:
>>format long
>>fzero('x-cos(x)',0)
ans=0.739085133215161
经比较可知:牛顿法的结果有一定的误差,但是牛顿方法由于在单根附近有良好的收敛性,所以与其他方法得出的结果相比误差较小。但是牛顿方法有个缺点:它只在根附近局部收敛。所以所我们在给定X的初值时尤为重要,如果给的初值离真值过远。那么用牛顿法可能永远也找不到此方程的解。对于这种情况,我们可以先利用工具软件(如:Matlab)画出草图,确定根的大致位置。牛顿法的每一步迭代都要计算一次导数值,而在计算机中,计算一次导数的近似值比计算函数值要麻烦的多。所以我们可以用弦截法,其迭代公式为:x2=x1-((x1-x0)/f(x1)-f(x0))*f(x1).
当f(x)在x*的某一个邻域内具有二阶连续导数,且f’(x)!=0,初值x0,x1落在此邻域内,弦截
法是收敛的。
此文为本人原创!如需使用,请注明出处!
分享到:
相关推荐
mulNewton 用牛顿法法求非线性方程组的一个根 mulDiscNewton 用离散牛顿法法求非线性方程组的一个根 mulMix 用牛顿-雅可比迭代法求非线性方程组的一个根 mulNewtonSOR 用牛顿-SOR迭代法求非线性方程组的一个根 ...
matlab实现牛顿迭代法求解非线性方程组教学文稿.pdfmatlab实现牛顿迭代法求解非线性方程组教学文稿.pdfmatlab实现牛顿迭代法求解非线性方程组教学文稿.pdfmatlab实现牛顿迭代法求解非线性方程组教学文稿.pdfmatlab...
matlab实现牛顿迭代法求解非线性方程组
mulNewton 用牛顿法法求非线性方程组的一个根 mulDiscNewton 用离散牛顿法法求非线性方程组的一个根 mulMix 用牛顿-雅可比迭代法求非线性方程组的一个根 mulNewtonSOR 用牛顿-SOR迭代法求非线性方程组的一个根 ...
最新matlab实现牛顿迭代法求解非线性方程组.pdf最新matlab实现牛顿迭代法求解非线性方程组.pdf最新matlab实现牛顿迭代法求解非线性方程组.pdf最新matlab实现牛顿迭代法求解非线性方程组.pdf最新matlab实现牛顿迭代法...
最新matlab实现牛顿迭代法求解非线性方程组.docx最新matlab实现牛顿迭代法求解非线性方程组.docx最新matlab实现牛顿迭代法求解非线性方程组.docx最新matlab实现牛顿迭代法求解非线性方程组.docx最新matlab实现牛顿...
资源名:MATLAB_牛顿法求解非线性方程组_源程序代码 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及...
此资源是我自己以前写的一篇随笔(word格式),对牛顿迭代法进行了讲解,并利用matlab进行一元非线性方程以及多元非线性方程组的仿真,附带详细注释,并输出每次迭代的结果,对于学习牛顿迭代法和matlab的新手会有...
本程序为:用牛顿迭代法求解非线性方程2*(x^3)-4*(x^2)+3x-6=0在1.5附近的根的具体程序。
简述了 牛顿--拉夫逊迭代求解的方法,用于多元非线性方程组求解,提供了简单理解的案例,并给出了完整可以运行的matlab代码,提供了matlab案例代码
MATLAB牛顿法求解非线性方程组 源程序代码
数值分析-非线性方程解法(二分法,牛顿法,割线法)的matlab实现
MATLAB牛顿法求解非线性方程组 部分源码 function Newton() x0=[0.1;0.5]; x1=x0-inv(myJacobi(x0))*myfun(x0); while norm(x1-x0)>1e-3 x0=x1; x1=x0-inv(myJacobi(x0))*myfun(x0); end x1 end
mulNewton 用牛顿法法求非线性方程组的一个根 mulDiscNewton 用离散牛顿法法求非线性方程组的一个根 mulMix 用牛顿-雅可比迭代法求非线性方程组的一个根 mulNewtonSOR 用牛顿-SOR迭代法求非线性方程组的一个根 ...
matlab实现牛顿迭代法求解非线性方程,输入非线性方程的次数,系数即可解出
MATLAB学习研究,转MATLAB牛顿法求解非线性方程组 源程序代码(1).rar
牛顿法计算非线性方程组的解 matlab代码
matlab实现牛顿迭代法求解非线性方程组.pdfmatlab实现牛顿迭代法求解非线性方程组.pdfmatlab实现牛顿迭代法求解非线性方程组.pdfmatlab实现牛顿迭代法求解非线性方程组.pdfmatlab实现牛顿迭代法求解非线性方程组....
利用牛顿迭代法求解多元非线性方程组,包含MATLAB程序源码和运行结果。
非线性方程组的求解,MATLAB程序源代码,基于牛顿法求解非线性方程组matlab源程序