二分算法求极值:
clear;
clc;
syms x;
f(x)=x+20.0/x;
handle = ezplot(f,[-40,40]);
set(handle,'Color','b','LineWidth',1 )
%极值的大概区间
axis([-20 20 -40 40]);
grid on;
hold on;
xlow = 1;
xhigh = 10;
%二分法
syms x1 x2;
x1 = xlow;
x2 = xhigh;
mid = (x1 + x2)/2.0;
h = 0.001; %步长
num = 1; %迭代次数
err = 0.001 ; %误差在0.01之间
while (abs(f(x1)-f(x2))>err)
if f(mid-h)>f(mid+h)
x1 = mid;
else
x2 = mid;
end
mid = (x1 + x2)/2.0;
num = num +1;
end
plot(mid,f(mid),'*','LineWidth',2,'color','r') %绘出极小值点
text(mid-1,f(mid)-3,sprintf("(%.3f,%.5f)",mid,f(mid))) %显示极值点坐标
fprintf('极小值为:%.5f\n',vpa(f(mid)));
fprintf('迭代次数为:%d\n',num);