function [ x,fx,ea,iter ] = goldmin( f,xl,xu,es,maxit,varargin ) f = @(x) 4.*x-1
ID: 1861397 • Letter: F
Question
function [ x,fx,ea,iter ] = goldmin( f,xl,xu,es,maxit,varargin )
f = @(x) 4.*x-1.8.*x^2+1.2.*x^3-.3.*x^4;
xl = -2;
xu = 4;
if nargin<3,error('at least 3 input arguments required'),end
if nargin <4||isempty(es), es=.01; end
if nargin <6||isempty(maxit), maxit=50;end
phi=(1+sqrt(5))/2;
iter=0;
while(1)
d= (phi-1)*(xu-xl);
x1=xl+d;
x2= xu-d;
if f(x1,varargin{:}) < f(x2,varagin{:})
xopt=x1;
xl=x2;
else
xopt=x2;
xu=x1;
end
iter=iter+1;
if xopt ~=0, ea = (2-phi)*abs((xu-xl)/xopt)*100; end
if ea <= es || iter >= maxit,break,end
end
x= xopt; fx = f(xopt,varargin{:});
this is my code so far but i have no idea how to actually make it run, any help would be appreciated
Explanation / Answer
you haven't defined "nargin" in your code and it is not in your input also.
I guess by "nargin" you mean number of elements in "varargin", if so then write "length(varargin)" instead of "nargin" .
Save your code using "goldmin.m" as file name.
your code may look like following
function [ x,fx,ea,iter ] = goldmin( f,xl,xu,es,maxit,varargin )
f = @(x) 4.*x-1.8.*x^2+1.2.*x^3-.3.*x^4;
xl = -2;
xu = 4;
if length(varargin)<3,error('at least 3 input arguments required'),end
if length(varargin) <4||isempty(es), es=.01; end
if length(varargin) <6||isempty(maxit), maxit=50;end
phi=(1+sqrt(5))/2;
iter=0;
while(1)
d= (phi-1)*(xu-xl);
x1=xl+d;
x2= xu-d;
if f(x1,varargin{:}) < f(x2,varagin{:})
xopt=x1;
xl=x2;
else
xopt=x2;
xu=x1;
end
iter=iter+1;
if xopt ~=0, ea = (2-phi)*abs((xu-xl)/xopt)*100; end
if ea <= es || iter >= maxit,break,end
end
x= xopt; fx = f(xopt,varargin{:});
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.