# Declared variable shown as undefined

1 view (last 30 days)
Divyayan Dey on 23 May 2020
Commented: Divyayan Dey on 23 May 2020
I have a cost function hybrid_cost() defined for optimization. Howver, with N defined, the function hybrid_cost() on running shows -
Undefined function or variable 'N'
Even after declaring N as global, the problem persists.
N=4;
function cost=hybrid_cost(x)
cost=0;
T1=0;
q=zeros(N);
q(1,1)=x(1);
q(N,N)=x(2);
M=create_M(x);
Ai=M+q;
A=zeros(N);
for i=1:P
A=Ai+eyes(size(M,1))*st(i);
c=abs(cof(A,1,N))^2;
T1=T1+c;
end
T1=4/(q1*qn) * T1;
cost=T1;
end

KSSV on 23 May 2020
N=4;
function cost=hybrid_cost(x,N)
cost=0;
T1=0;
q=zeros(N);
q(1,1)=x(1);
q(N,N)=x(2);
M=create_M(x);
Ai=M+q;
A=zeros(N);
for i=1:P
A=Ai+eyes(size(M,1))*st(i);
c=abs(cof(A,1,N))^2;
T1=T1+c;
end
T1=4/(q1*qn) * T1;
cost=T1;
end
The variable N, should be passed to a function as shown above. Though you have defined the variable outside the function, it cannot be found inside the function unless you declare N as gloabal variable.

Divyayan Dey on 23 May 2020
Why does the problem persist with global declaration of variables? I won't be able to parameterize every function with nesting because that would make my code too lengthy.
Stephen Cobeldick on 23 May 2020
"I won't be able to parameterize every function with nesting"
There are two methods shown in the documentation for parameterizing functions: nested functions and anonymous functions. Have you tried using anonymous functions as the documentation shows?
Divyayan Dey on 23 May 2020
Thanks. That worked.