• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

牛顿法与二分法的比较—matlab实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

刚学完牛顿迭代法,为了验证收敛的速率,用Matlab做了比较

首先是牛顿迭代法

%比较牛顿迭代法、
function [x,i]=newtonmethod(x0,f,ep,Nmax)%x0—初值,f—测试函数,ep—精度,Nmax—迭代的最大次数
i=1;
x(1)=x0;
while(i<=Nmax)
[g1,g2]=f(x(i));
if abs(g2)<=ep
%error(\'error\');
disp(\'derivative is too smal\')
return
end
x(i+1)=x(i)-g1/g2;
b=x(i+1)-x(i);
if(abs(b)<ep)
return;
end
i=i+1;
end
x

i

二分法

%二分法
function [x,k]=bisection(a,b,f,ep)%[a,b]区间,f—函数句柄,ep—最大二分次数
k=1;
eep=b-a;%eep区间长度
while(abs(eep)>ep)
x(k)=a+eep./2;
if(f(x(k)).*f(a)<0)
b=x(k);
else
a=x(k);
end
eep=b-a;
k=k+1;
end

函数f

function [fx,f1x]=f221(x)
% 课本p.42, 实验2.2, I中的函数及其导数, 含根区间为[1,2]
fx=x*x*x+4*x*x-10;
f1x=3*x*x+8*x;
ps:自己直接写的求导后的函数,为了方便

主脚本文件,即运行

%牛顿法选初始值1.5,二分法的含根区间为[1,2],
[x,i]=newtonmethod(1.5,@f221,0.00001,100);%@f221——获取函数句柄
[xx,k]=bisection(1,2,@f221,0.00001);
plot(x,\'-rd\');
hold on
plot(xx,\'-gs\');
xlabel(\'迭代序列\');
ylabel(\'迭代结果\');
title(\'shiyan\');
legend(\'牛顿迭代法\',\'二分法\' );
hold off


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap