Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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{:});