二分法及其matlab程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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是上取整 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);
-1.795 9
0.001 0
-0.004 8
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)
-1.000 0
-1.500 0 -1.750 0 -1.750 0 -1.750 0 -1.781 3 -1.781 3 -1.789 1 -1.793 0
-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
2.125 0 0.390 6 0.390 6 0.390 6 0.129 6 0.129 6 0.062 7 0.029 0
2.125 0
0.390 6 -0.716 8 -0.141 8 0.129 6 -0.004 8 0.062 7 0.029 0 0.012 1
9
-1.796 9
-1.794Fra Baidu bibliotek9
例: 确定方程x3-x+4=0的实根的分布情况,并用二分 法求在开区间 (-2,-1)内的实根的近似值,要求精度为 0.001.
次数k 左端点ak 右端点bk 中点xk
bk a k 2
函数值 f(ak)
函数值 f(bk)
函数值f(xk)
0
1 2 3 4 5 6 7 8
-2.000 0
-2.000 0 -2.000 0 -1.875 0 -1.812 5 -1.812 5 -1.796 9 -1.796 9 -1.796 9
1. 用二分法求方程 f(x)=0的根 x*的近似值 xk 的步骤 步骤1. 若对于a<b, 有f(a)f(b)<0, 则在(a, b)内f(x)=0至少有一个根.
步骤2. 取a, b的中点 x1
ab , 计算 f x1 2
步骤3. 若 f x1 0, 则x1是f(x)=0的根, 停止计算,
三. 二分法及其MATLAB程序 1. 用二分法求方程 f(x)=0的根 x*的近似值 xk 的步骤 步骤1. 若对于a<b, 有f(a)f(b)<0, 则在(a, b)内f(x)=0至少有一个根.
ab , 计算 f x1 步骤2. 取a, b的中点 x1 2
步骤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;
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
-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
4.000 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;
1 步骤4. 若 2 bk ak 为预先给定的要求精度 , 退出计算, ak bk ; 反之, 返回步骤1, 重复步骤1,2,3. 运行后输出结果 x 2
2. 二分法的matlab主程序 求解方程f(x)=0在开区间(a,b)内的一个根的前提条 件是f(x)在闭区间[a,b]上连续, 且f(a)f(b)<0. 输入的量: 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处的函数值.
其中输入的量: 区间端点的值a, b和精度是abtol都是具体 给定的数值, 然后按运行键. 运行后输出计算次数k、使用 k次二分法所得到的小区间[ak, bk]的中点的值x和它的函 数值y(x)及wuca=|bk-ak|/2.
练习: 确定方程 3x2-ex=0 的实根的分布情况,并用二分法 求在开区间 (-1, 0)内的实根的近似值, 要求精度为0.0005.