MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根 |
您所在的位置:网站首页 › matlab编写程序求迭代的结果 › MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根 |
MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根
作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 一、实验原理(1)二分法:求 (a)bipart.m: function [x,m]=bipart(fun,a0,b0,tol) a=a0;b=b0; m=1+round(round(log((b-a)/tol))/log(2)); for k=1:m p=(a+b)/2; if fun(p)*fun(b) [x,k]=budong(@fun,2,1e-5,100) x = 2.0945515 k = 4(3)牛顿迭代法: >> x1=newton(2,1e-4,20) x1 = 1.3282689 3.(拓展(方法改进、体会等))对于方程的根为重根的情形,newton法求重根只是线性收敛,迭代缓慢,如果对于求重根的情形,对newton法进行改进,取 则 求m重根,则具有二阶收敛性,但要知道的重数m。 计算方程 源程序: newton_biroot.m: function t=newton_biroot(x1) syms x; f=x^4-4*(x^2)+4; s=subs(diff(f,x),x,x1); x=x1; f=x^4-4*(x^2)+4; t=x-f/s;biroot1.m: function t=biroot1(x1) syms x; f=x^4-4*(x^2)+4; s=subs(diff(f,x),x,x1); x=x1; f=x^4-4*(x^2)+4; t=x-2*f/s;budong.m: function [x,k]=budong(fun,x0,tol,m) for k=1:m x=fun(x0); if abs(x-x0)> [x,k]=budong(@biroot1,2,1e-5,3)x = 1.5 x = 1.4166667 x = 1.4142157 x = 1.4142157 k = 3 >> [x,k]=budong(@biroot1,2,1e-5,10) x = 1.5 x = 1.4166667 x = 1.4142157 x = 1.4142136 k = 4 >> [x,k]=budong(@newton_biroot,2,1e-5,50) x = 1.75 x = 1.5982143 x = 1.5115099 x = 1.4644275 x = 1.439751 x = 1.4270955 x = 1.4206836 x = 1.4174559 x = 1.4158366 x = 1.4150256 x = 1.4146197 x = 1.4144166 x = 1.4143151 x = 1.4142643 x = 1.414239 x = 1.4142263 x = 1.4142199 k = 17 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |