clear;
clc;
syms U L; %将区间上下限定为变量
t=(200:10:300);
t=t';
T=t+273.15;
K=exp(-9.3932+3204.71./T+0.83593.log(T)+2.3526710^(-3).T-1.873610^(-6).T.^2+5.160610^(-10).*T.^3);
f=@(x)(4.*K-1).*x^2-8.Kx+4.*K; %求给定的函数,可以直接在本行中修改后面代码为其他函数
U=input('输入求根区域上限upper,U=');
L=input('输入求根区域下限lower,L=');
while U-L>0.000001 %设定一个求根区域精度,然后进行判断
root=(U+L)/2; %当根的区间大于所给精度时,利用二分法重新规划求根区间
if f(root)==0
break; %r恰好为所求根,直接跳出循环
end
if f(root).*f(U)<0 %用零点存在定理判断根所在的区域
L=root;
else
U=root;
end
end
root %直接输出所求根的值
为什么只运行出一个值
function xc = bisect(f,a,b,tol)
% bisect 二分法求解
%f: a
if sign(f(a))*sign(f(b))>=0
error('f(a)f(b)<0 not satisfied!') % 停止运行
end
fa = f(a);
fb = f(b);
while (b-a)/2 > tol
c = (a+b)/2;
fc = f(c);
if fc == 0
break
end
if sign(fc)*sign(fa) < 0 % [a,c]是新的区间
b = c;
fb = fc;
else % [b,c]是新的区间
a = c;
fa = fc;
end
end
xc = (a+b)/2; % 新的中点就是最优估计