二分法matlab程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二分法基本思路
一般地,对于函数f(x),如果存在实数c,当x=c 时,若f(c)=0,那么把x=c 叫做函数f(x)的零点。 解方程即要求f(x)的所有零点。
假定f(x)在区间(x ,y )上连续
先找到a 、b 属于区间(x ,y ),使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],
现在假设f(a)<0,f(b)>0,a
① 如果f[(a+b)/2]=0,该点就是零点,
如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,(a+b)/2>=a ,从①开始继续使用 ② 中点函数值判断。
如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2<=b ,从①开始继续使用 中点函数值判断。
这样就可以不断接近零点。
通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,这种方法叫做二分法。
从以上可以看出,每次运算后,区间长度减少一半,是线形收敛。另外,二分法不能计算复根和重根。
二分法步骤
用二分法求方程()0f x =的根*x 的近似值k x 的步骤
① 若对于a b <有()()0f a f b <,则在(,)a b 内()0f x =至少有一个根。
② 取,a b 的中点12
a b x +=计算1()f x ③ 若1()0f x =则1x 是()0f x =的根,停止计算,
运行后输出结果*1x x =
若1()()0f a f x <则在1(,)a x 内()0f x =至少有一个根。取111,a a b x ==;
若1()()0f a f x >,则取111,a x b b ==;
④ 若12
k k b a ε-≤(ε为预先给定的要求精度)退出计算,运行后输出结果*2
k k a b x +≈,反之,返回步骤1,重复步骤1,2,3 二分法Mtalab 程序
syms x;
fun=input('(输入函数形式)fx=');
a=input('(输入二分法下限)a=');
b=input('(输入二分法上限)b=');
d=input('输入误差限 d=')%二分法求根
%f=inline(x^2-4*x+4);
%修改需要求解的inline 函数的函数体
f=inline(fun);%修改需要求解的inline 函数的函数体
e=b-a; k=0 ;
while e>d
c=(a+b)/2;
if f(a)*f(c)<0
b=c;
elseif f(a)*f(c)>0
a=c;
else
a=c;b=c
end
e=e/2; k=k+1;
end
x=(a+b)/2;
x%x 为答案
k%k 为次数
例题:
用二分法计算方程4324100x x x -++=在(-2,2)内的实根的近似值,要求精度为 解:(输入函数形式)fx=x^4-2*x^3+4*x+10
(输入二分法下限)a=-2
(输入二分法上限)b=2
输入误差限 d=
得到结果
d =
x =
k =
16
>>