Matlab :Three-Point Patterns
N次函数的xlo和delta为什么运算不出来?
求正确答案 (Matlab全过程+回答问题总结概述)
clear all;clc
f = @(x) 2*x^4 - 10*x^2 + 8
clf; hold on;
[lo, mid, hi] = nlp_oned_threepoint_max(f,0,0.1)
% Three-Point Pattern for a MAX objective
% Initial setup
k = 0
% Display the values of the variables
'----------'
k
delta
xlo
if (feval(f,xlo+delta)>feval(f,xlo))
xmid = xlo + delta;
% Plot the current interval
plot(xlo,feval(f,xlo),'rx','Markersize',10);
plot(xmid,feval(f,xmid),'kx','Markersize',10);
k = k+1;
% Expand
finished = 0;
while (finished==0)
delta = 2*delta;
% Display the values of the variables
'----------'
k
delta
xlo
xmid
if (feval(f,xmid)>feval(f,xmid+delta))
xhi = xmid + delta
% Plot the current interval
plot(xhi,feval(f,xhi),'gx','Markersize',10);
finished = 1;
else
xlo = xmid;
xmid = xmid + delta;
% Plot the current interval
plot(xlo,feval(f,xlo),'rx','Markersize',10);
plot(xmid,feval(f,xmid),'kx','Markersize',10);
end
k = k+1;
end
else
xhi = xlo + delta;
% Plot the current interval
plot(xlo,feval(f,xlo),'rx','Markersize',10);
plot(xhi,feval(f,xhi),'gx','Markersize',10);
k = k+1;
% Reduce
finished = 0;
while (finished==0)
delta = 0.5*delta;
% Display the values of the variables
'----------'
k
delta
xlo
xhi
if (feval(f,xlo+delta)>feval(f,xlo))
xmid = xlo + delta
% Plot the current interval
plot(xmid,feval(f,xmid),'kx','Markersize',10);
finished = 1;
else
xhi = xlo + delta;
% Plot the current interval
plot(xhi,feval(f,xhi),'gx','Markersize',10);
end
k = k+1;
end
end
% Display the final values of the variables
'----------'
xvalues = [xlo,xmid,xhi]
fvalues = [feval(f,xlo),feval(f,xmid),feval(f,xhi)]
plot(xlo,feval(f,xlo),'bo','Markersize',10);
plot(xmid,feval(f,xmid),'bo','Markersize',10);
plot(xhi,feval(f,xhi),'bo','Markersize',10);
function [xlo,xmid,xhi] = nlp_oned_threepoint_max(f,xlo,delta)
k = 0;
'----------------------------'
k
delta
xlo
if (feval(f,xlo+delta)>feval(f,xlo))xmid = xlo + delta;
plot(xlo,feval(f,xlo), 'rx' , 'Markersize' ,10);
plot(xmid, feval(f,xmid), 'kx' , 'Markersize' , 10);
k = k+1;
finished = 0;
while (finished==0)
delta = 2*delta;
'--------------------------'
k
delta
xlo
xmid
if (feval(f,xmid)>feval(f,xmid+delta))
xhi xmid + delta
plot(xhi,feval(f,xhi), 'gx' , 'Markersize' ,10);
finished = 1;
else
xlo= xmid;
xmid = xmid +delta;
plot(xlo,feval(f,xlo) , ' rx' , 'Markersize' ,10);
plot(xmid,feval(f ,xmid), 'kx' , 'Markersize' , 10);
end
k = k+1;
end
else
xhi = xlo +delta;
plot(xlo,feval(f,xlo) , 'rx' , 'Markersize' ,10);
plot(xhi,feval(f,xhi), 'gx ' , 'Markersize' ,10);
k = k+1;
finished = 0;
while (finished==0)
delta =0.5*delta;
'------------------'
k
delta
xlo
xhi
if (feval(f,xlo+delta)>feval(f,xlo))
xmid =xlo + delta
plot( xmid ,feval(f,xmid) , 'kx ' , 'Markersize',10);
finished = 1;
else
xhi =xlo + delta;
plot(xhi,feval(f,xhi) , 'gx ' , 'Markersize' ,10);
end
k = k+1;
end
end
'---------------'
xvalues = [xlo, xmid ,xhi]
fvalues = [feval(f,xlo),feval(f,xmid),feval(f,xhi)]
plot(xlo,feval(f,xlo), 'bo ', 'Markersize',10);
plot(xmid,feval(f,xmid) , 'bo' , 'Markersize' , 10);
plot(xhi,feval(f,xhi) , 'bo' , 'Markersize' ,10);
会玩呀
真不懂
厉害哦