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

本文介绍使用二分法在指定区间内寻找函数根的方法,并通过Matlab程序实现这一过程。展示了如何逐步缩小搜索区间直至找到满足精度要求的根,并给出了具体的程序代码与运行结果。

问题

编写用二分法求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

转载于:https://www.cnblogs.com/lecone/archive/2011/05/09/2041258.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值