matlab怎么用二分法求根啊?比如说x-tan(x)=0在[4.0,4.6]上的根是多少?
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/08 16:39:08
matlab怎么用二分法求根啊?比如说x-tan(x)=0在[4.0,4.6]上的根是多少?
matlab怎么用二分法求根啊?比如说x-tan(x)=0在[4.0,4.6]上的根是多少?
matlab怎么用二分法求根啊?比如说x-tan(x)=0在[4.0,4.6]上的根是多少?
x1=4;
x2=4.6;
x=(x1+x2)/2;
f=inline('x-tan(x)');
tol=1e-10;
for i=1:10000
if abs(f(x))
elseif(f(x1)*f(x)<0)
x2=x;
else
x1=x;
end
x=(x1+x2)/2;
end
disp(['迭代次数',num2str(i)])
disp(['根:',num2str(x,'%.8f')])
disp(['函数值:',num2str(f(x),'%.8e')])
4.4934
function approx_root=bisect (a,b)
fa =bifun(a);
fb =bifun(b);
while(abs(b-a)> 0.000001)
c=(a+b)/2;
approx_root=c;
fc=bifun(c);
[a,c,b;fa,...
全部展开
4.4934
function approx_root=bisect (a,b)
fa =bifun(a);
fb =bifun(b);
while(abs(b-a)> 0.000001)
c=(a+b)/2;
approx_root=c;
fc=bifun(c);
[a,c,b;fa,fc,fb]
if ( sign(fb) * sign(fc)<=0)
a=c;
fa=fc;
else
b=c;
fb=fc;
end
end
%----------------------------------
function f=bifun(x)
f=x-tan(x);
----------
bisect(4.0,4.6)
ans =
4.0000 4.3000 4.6000
2.8422 2.0142 -4.2602
ans =
4.3000 4.4500 4.6000
2.0142 0.7267 -4.2602
ans =
4.4500 4.5250 4.6000
0.7267 -0.7489 -4.2602
ans =
4.4500 4.4875 4.5250
0.7267 0.1161 -0.7489
ans =
4.4875 4.5062 4.5250
0.1161 -0.2759 -0.7489
ans =
4.4875 4.4969 4.5062
0.1161 -0.0711 -0.2759
ans =
4.4875 4.4922 4.4969
0.1161 0.0245 -0.0711
ans =
4.4922 4.4945 4.4969
0.0245 -0.0228 -0.0711
ans =
4.4922 4.4934 4.4945
0.0245 0.0010 -0.0228
ans =
4.4934 4.4939 4.4945
0.0010 -0.0108 -0.0228
ans =
4.4934 4.4937 4.4939
0.0010 -0.0049 -0.0108
ans =
4.4934 4.4935 4.4937
0.0010 -0.0019 -0.0049
ans =
4.4934 4.4934 4.4935
0.0010 -0.0005 -0.0019
ans =
4.4934 4.4934 4.4934
0.0010 0.0003 -0.0005
ans =
4.4934 4.4934 4.4934
0.0003 -0.0001 -0.0005
ans =
4.4934 4.4934 4.4934
0.0003 0.0001 -0.0001
ans =
4.4934 4.4934 4.4934
0.0001 -0.0000 -0.0001
ans =
4.4934 4.4934 4.4934
0.0001 0.0000 -0.0000
ans =
4.4934 4.4934 4.4934
0.0000 0.0000 -0.0000
ans =
4.4934 4.4934 4.4934
0.0000 0.0000 -0.0000
ans =
4.4934
收起
sina=cosa=√2/2
cos(3π+α)-sin(π+α)=-cosa+sina=0
原理如图。 程序: fun=inline('x-tan(x)');a=4;b=4.6; tol=1e-4; n=1; c=(a+b)/2; while abs(feval(fun,c))>tol if feval(fun,a)*feval(fun,c)<0 b=c;c=(a+b)/2; elseif feval(fun,b)*feval(fun,c)<0 a=c;c=(a+b)/2; else y=c;tol=10000; end n=n+1; end y=c 结果:根y y = 4.4934