代码改变世界

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

2011-05-09 16:17  Lecone.JY.HU  阅读(1016)  评论(0编辑  收藏  举报

问题

编写用二分法求clip_image002在区间[1,1.5]内的一个根的程序,收敛误差不超过clip_image004。在同一图形上分别画出clip_image006的图形及每一中点对应的函数值,以观察收敛过程。

原理

clip_image006[1]在区间[a,b]上连续,且clip_image009,根据连续函数性质可知clip_image011在[a,b]内一定有根,并称[a,b]为方程clip_image011[1]的有根区间。

clip_image013

如果clip_image015 则 b=c 区间还是为[a,b]

如果clip_image017 则a=c区间还是为[a,b]

其中每个区间是前一个区间的一半,二分clip_image019次以后得有根区间[clip_image021],其长度是

clip_image023

由此,如果二分过程无限地进行下去(clip_image025),则有限区间根必定缩为一点,该点就是所求的根。在此过程我们一般都确定误差范围出结果。

在此题目中

clip_image002[1]

clip_image027

clip_image029

程序框图

clip_image031

结果比较

clip_image019[1]

clip_image033

clip_image035

clip_image037

clip_image039符号

0

1

1.5

1.25

-

1

1.2500

1.5

1.3750

+

2

1.2500

1.3750

1.3125

-

3

1.3125

1.3750

1.3438

+

4

1.3125

1.3438

1.3281

+

5

1.3125

1.3281

1.3203

-

6

1.3203

1.3281

1.3242

-

7

1.3242

1.3281

1.3262

+

8

1.3242

1.3262

1.3252

+

9

1.3242

1.3252

1.3247

-

计算得到clip_image041

clip_image043

clip_image045

图1 放大后clip_image037[1]

clip_image048

图2 clip_image037[2]近似值

结论

1. clip_image002[2]在区间[1,1.5]内的一个根。

2. 收敛误差不超过clip_image004[1]时,根为clip_image050=1.3247。

附件:程序

函数文件fun.m

function y=fun(x)

y=x.^3-x-1;

主文件main.m

x=1:0.001:1.5;

x=1:0.001:1.5;

a=1;

b=1.5;

plot(x,fun(x),'k')

grid

hold on

eps=0.5*10^(-3);

num=0;

N=50;

while(abs(a-b)>eps && num<N )

c=(a+b)./2

a

b

if(fun(a)*fun(c)<=0)

b=c;

else

if(fun(c)*fun(b)<=0)

a=c;

end

end

num=num+1

plot(c,fun(c),'r*')

fun(c)

text(c,fun(c),num2str(c))

end

的风格风格