matlab二分法比较,牛顿法与二分法的比较—matlab实现 | 学步园

刚学完牛顿迭代法,为了验证收敛的速率,用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)

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_1331127996hkG9.gif

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值