MATLAB: Minimizing a multivariable function

minimization

Hello, i am trying to find the minimum of a multivariable function (the number of variables may vary also but there is a pattern to construct the function) the code i am running is the following:
function F = jac(x)
n=input('n=');
x0=random('unid',90,1,n,1);
x0=pi./x0;
E=input('E=');
h=3;
F=0;
for i=1:n
D= 0.5;
% V=0;
% b=0;
for j=1:n
if (mod(j,2)==0)
D = D + cos(h*x(j));
else
D = D - cos(h*x(j));
end
end
D=(2*E*sqrt(2)/(pi*h))*abs(D);
F = F + 1/h*(D^2);
h=h+2;
end
M=fminsearch(@(x)jac,x0);
the error i am getting is that the function x is undefined can anyone help me please? thanks in advance

Best Answer

You are going to encounter the recursion error when you run your code because you seem to be calling fminsearch inside your function.
I didn’t run your code however certain parts of it need to be corrected.
Define your ‘n’ and ‘E’ variables outside the function in your workspace and pass them as arguments. Redefine your function statement to accommodate them.
For example, the function statement becomes:
function F = jac(x,n,E)
then eliminate the input statements inside ‘jac’. Your script then becomes:
x0=random('unid',90,1,n,1);
x0=pi./x0;
n = ... % <— Define ‘n’
E = ... % <— Define ‘E’
M=fminsearch(@(x)jac(x,n,E),x0);
Your function becomes:
function F = jac(x,n,E)
h=3;
F=0;
for i=1:n
D= 0.5;
% V=0;
% b=0;
for j=1:n
if (mod(j,2)==0)
D = D + cos(h*x(j));
else
D = D - cos(h*x(j));
end
end
D=(2*E*sqrt(2)/(pi*h))*abs(D);
F = F + 1/h*(D^2);
h=h+2;
end
end
These changes should get you started. Again, I didn’t run this because it’s not obvious to me what you want to do.