二分法求非线性方程的数值解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档