二分法求非线性方程的数值解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二分法求非线性方程的数值解
function [x,k] = bisec( f,a,b,ep ) %f:f(x)=0的函数,a,b:[a,b]端点,ep:精度
%x:方程的数值解,k迭代次数
if f(a)*f(b)>=0
if f(a)* f(b)>0
warning('端点值同号,不符合二分法的条件');
return;
else
if f(a)==0
disp(' a就是方程的解');
return;
else
disp(' b就是方程的解');
return;
end
end
end
k=0;
N=(log10(b-a)-log10(ep))/log10(2); %最大迭代次数
x=(a+b)/2;
if f(x)==0
disp(' x就是方程的解');
return;
else
while abs(a-b)>ep & k if f(x)*f(a)<0 b=x; else a=x; end k=k+1; x=(a+b)/2; % if k==N % warning('已达到最大设定次数'); %二分法一定收敛,这个最大次数是达到精度时次数 %每次运行都会出现,完全没有必要。 %end end t=round(-log10(ep)); x=vpa(x,t); end >> f=@(x)x-exp(-x);a=0;b=1;ep=0.5e-10; >> [x,k]=bisec(f,a,b,ep) x =0.5671432904 k =35 二分法求非线性方程的数值解(多元函数情形,以二元函数为例) function [x,k] = bisec( f,a,b,ep ) %f:f(x)=0的函数,a,b:[a,b]端点,ep:精度 %x:方程的数值解,k:迭代次数 if f(a(1),a(2))*f(b(1),b(2))>=0 if f(a(1),a(2))* f(b(1,b(2)))>0 warning('端点值同号,不符合二分法的条件'); return; else if f(a(1),a(2))==0 disp(' a就是方程的解'); return; else disp(' b就是方程的解'); return; end end end k=0; x=(a+b)/2; if f(x(1),x(2))==0 disp(' x就是方程的解'); return; else while norm(a-b)>ep if f(x(1),x(2))*f(a(1),a(2))<0 b=x; else a=x; end k=k+1; x=(a+b)/2; end t=round(-log10(ep)); x=vpa(x,t); end >> g=@(x,y)1-x^2-y^2;a=[0;0];b=[1;1];ep=0.5e-15; >> [x,k]=bisec1(g,a,b,ep) x = 0.707106781186548 0.707106781186548 k = 52