因为双精度数有舍入误差,建议全部按照符号变量来进行运算,这样舍入误差就不会出现了
for k=2:10
syms a n tol e l u tol
tol=10^(-sym(k));
a=sym(1);
n=sym(6);
n=2*n;
a=sqrt(2-sqrt(4-a^2));
l=a*n/2;
u=l/sqrt(1-a^2/2);
p=(u+l)/2;
e=(u-l)/2;
d=p-e;
f=p+e;
while(double(eval(e))>=double(eval(tol)))
n=2*n;
a=sqrt(2-sqrt(4-a^2));
l=a*n/2;
u=l/sqrt(1-a^2/2);
p=(u+l)/2;
e=(u-l)/2;
d=p-e;
f=p+e;
end
d=vpa(d,50)
f=vpa(f, 50)
vpa(pi,50)
p=pi>d&&pi<f
end
%If the return value is 1, pi is in the interval. If it is 0, pi
结果就可以很nice啦
如有帮助,还望题主给个宝贵的采纳支持一下答主答题哟,谢谢啦