二分法求方程的根
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
步骤4.
若
1 2
bk
ak
为预先给定的要求精度 , 退出计算,
运行后输出结果 x ak bk ; 反之, 返回步骤1, 重复步骤1,2,3. 2
2. 二分法的matlab主程序
求解方程f(x)=0在开区间(a,b)内的一个根的前提条 件是f(x)在闭区间[a,b]上连续, 且f(a)f(b)<0.
函数值 函数值f(xk) f(bk)
4.000 0
2.125 0
2.125 0
0.390 6
0.390 6 -0.716 8
0.390 6 -0.141 8
0.390 6
0.129 6
0.129 6 -0.004 8
0.129 6
0.062 7
0.062 7
0.029 0
0.029 0
0.012 1
2. 二分法的matlab主程序
function [k,x,wuca,yx]=erfen(a,b,abtol) a(1)=a; b(1)=b; ya=fun(a(1)); yb=fun(b(1)); %程序中调用的fun.m 为函数 if ya* yb>0, disp('注意:ya*yb>0,请重新调整区间端点a和b.'), return end max1=-1+ceil((log(b-a)- log(abtol))/ log(2)); % ceil是上取整
bk ak 2
0.500 0 0.250 0 0.125 0 0.062 5 0.031 3 0.015 6 0.007 8 0.003 9 0.002 0 0.001 0
函数值 f(ak) -2.000 0 -2.000 0 -2.000 0 -0.716 8 -0.141 8 -0.141 8 -0.004 8 -0.004 8 -0.004 8 -0.004 8
步骤2.取a, b的中点
x1
ab, 2
计算
f
x1
步骤3. 若 f x1 0, 则x1是f(x)=0的根, 停止计算,
运行后输出结果x*=x1.
若 f a f x1 0, 则在(a, x1 )内f(x)=0至少有一个根. 取a1=a, b1=x1;
若 f a f x1 0, 则取a1=x1, b1=b;
例: 确定方程x3-x+4=0的实根的分布情况,并用二分 法求在开区间 (-2,-1)内的实根的近似值,要求精度为
0.001.
次数k 左端点ak 右端点bk
0
-2.000 0 -1.000 0
1
-2.000 0 -1ቤተ መጻሕፍቲ ባይዱ500 0
2
-2.000 0 -1.750 0
3
-1.875 0 -1.750 0
其中输入的量: 区间端点的值a, b和精度是abtol都是具体 给定的数值, 然后按运行键. 运行后输出计算次数k、使用 k次二分法所得到的小区间[ak, bk]的中点的值x和它的函 数值y(x)及wuca=|bk-ak|/2.
练习: 确定方程 3x2-ex=0 的实根的分布情况,并用二分法 求在开区间 (-1, 0)内的实根的近似值, 要求精度为0.0005.
for k=1: max1+1 a;ya=fun(a); b;yb=fun(b); x=(a+b)/2; yx=fun(x); wuca=abs(b-a)/2; k=k-1; [k,a,b,x,wuca,ya,yb,yx] if yx==0 a=x; b=x; elseif yb*yx>0 b=x;yb=yx; else a=x; ya=yx; end if b-a< abtol , return, end end k=max1; x; wuca; yx=fun(x);
第一种二分法
用二分法求方程 f(x)=0的根 x*的近似值 xk 的步骤
步骤1.若对于a<b, 有f(a)f(b)<0, 则在(a, b)内f(x)=0至少有一个根.
步骤2. 取a,
b的中点
x1
a
2
b
,
计算
f
x1
步骤3. 若f x1 0,则x1是f(x)=0的根, 停止计算,
4
-1.812 5 -1.750 0
5
-1.812 5 -1.781 3
6
-1.796 9 -1.781 3
7
-1.796 9 -1.789 1
8
-1.796 9 -1.793 0
9
-1.796 9 -1.794 9
中点xk
-1.500 0 -1.750 0 -1.875 0 -1.812 5 -1.781 3 -1.796 9 -1.789 1 -1.793 0 -1.794 9 -1.795 9
输入的量: a和b是闭区间[a,b]的左右端点, abtol是预先给定的精度.
运行后输出的量: k是使用二分法的次数. x是方程在(a,b) 内的实根x*的近似值, 其精度是abtol. wuca=|bk-ak|/2是使用k次二分法所得到的小区间的长 度的一半, 即实根x*的近似值x的绝对精度限, 满足 wuca≤abtol. yx=f(xk), 即方程f(x)=0在实根x*的近似 值x处的函数值.
0.012 1
0.003 7
3. 用二分法求解方程f(x)=0在 (a,b)内的近似根的步骤
步骤1. 建立名为fun.m的M文件如: function y1=fun(x) y1=f(x);
步骤2. 将二分法的主程序保存名为erfen.m的M文件;
步骤3. 在matlab工作窗口输入程序: >>[k, x, wuca, yx]=erfen(a, b, abtol)
运行后输出结果x*=x1.
若f a f x1 0,则在(a, x1 )内f(x)=0至少有一个根. 取a1=a, b1=x1; 若f a f x1 0, 则取a1=x1, b1=b;
用二分法求方程 f(x)=0的根 x*的近似值 xk 的步骤
步骤1.若对于a<b, 有f(a)f(b)<0, 则在(a, b)内f(x)=0至少有一个根.