用二分法求π值(精确到0.01)
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/21 11:27:10
用二分法求π值(精确到0.01)
用二分法求π值(精确到0.01)
用二分法求π值(精确到0.01)
π是个超越数
要想使用二分法
首先找到一个方程f(x)=0,使得π是这个方程的解;
然后说明x=a(π左面附近的一个数)时,f(a)为负(或正)
x=b(π右面附近的一个数)时,f(b)为正(或负)
接着求取f((a+b)/2)值的正负号
如果是正,则在[a,(a+b)/2]区间上求[a+(a+b)/2]/2值的正负号;
如果是负,则在[(a+b)/2,b]区间上求[(a+b)/2+b]/2值的正负号;
以此类推,不断分割定义域空间
那么什么时候才会达到精确到0.01的要求呢?
当不断的求平均数后,接连两步的小数点后第二位数字以前不发生改变时,则取第二位数字以前的数,就是近似解了
比如第m步得到近似3.14357,第m+1步得到近似3.14235
此时两个近似的前三位3.14是相同的,且达到0.01位上
那么取近似为3.14,该近似达到0.01的精度
这个问题的难点现在归结到找哪个方程f(x)=0,使得x=π就是这个方程的精确解.
给你个例子,希望对你有帮助!
将下面的代码复制到M文件,保存成bisection.m文件
function [x,k]=demimethod(a,b,f,emg)
% a,b :求解区间的两个端点
% f :所求方程的函数名
% emg :精度指标
% x:所求近似解
% k: 循环次数
fa=feval(f,a);
fab=...
全部展开
给你个例子,希望对你有帮助!
将下面的代码复制到M文件,保存成bisection.m文件
function [x,k]=demimethod(a,b,f,emg)
% a,b :求解区间的两个端点
% f :所求方程的函数名
% emg :精度指标
% x:所求近似解
% k: 循环次数
fa=feval(f,a);
fab=feval(f,(a+b)/2);
k=0;
while abs(b-a)>emg
if fab==0
x=(a+b)/2;
return;
elseif fa*fab<0
b=(a+b)/2;
else
a=(a+b)/2;
end
fa=feval(f,a);
fab=feval(f,(a+b)/2);
k=k+1;
end
x=(a+b)/2;
结果:
>> f=@(x)x.^3+2*x.^2+x-5;
>> demimethod(-2,2,f,10^-4)
ans =
1.1164
参考文章:
MATLAB--二分法求解方程程序(完整版)
http://hi.baidu.com/2008zhenghui/blog/item/4793594bf68b682809f7ef89.html
收起