matlab实现二分法、牛顿法与割线法求方程的解
准备工作
因为后面会有比较,所以就选了同一个方程:2*exp(-x)-sin(x)=0,有根区间为[0,1],精度设置为1e-10,再给牛顿法和割线法一个迭代次数上限:100(虽然肯定不会运行这么多)。再来个计时小工具:tic和toc,程序运行到tic时,会开始计时,运行到toc时,会主动匹配上一个tic,并打印时间差,我们在tic和toc之间放上循环体代码即可。
二分法
二分法的要求:f(x)在单调区间[a,b]上连续,且f(a)*f(b)<0
二分法的求根思想:将区间[a,b]不断对半分,依据分点处的函数来逐步缩小有根区间,当区间足够小(小于所设定的精度时),方程有且仅有一根。
二分法的matlab代码
二分法的优点:直观、简单,方法可靠,对f(x)的要求不高,且一定收敛。
缺点:不能求复根和偶重根,收敛速度慢,迭代次数多。
eps=5e-8;%二分法
delta=1e-10;
a=0;b=1;fa=f1_1(a);fb=f1_1(b);
n=0;tic%计时开始
while(1)
if(fa*fb>0)
break
end
c=(a+b)/2;
fc=f1_1(c);
if(abs(fc)<delta)
break
elseif(fa*fc<0)
b=c;fb=fc;
else
a=c;fa=fc;
end
if((b-a)<eps)
break
end
n=n+1;%n是迭代次数
n,c,fc%将每次二分的结果都打印出来
end
toc%自动匹配上一个tic,并打印出时间差
function output=f