These are 2 subprograms i have used to define 2 function grad and fnc. I have called the function grad , and in the function grad fnc is called, now x is a vector, and fnc is a scalar function of a vector variable still it is returning a vector

3 views (last 30 days)
the second thing is that an error '??? Subscript indices must either be real positive integers or logicals' is coming... the error comes in the line 'grad1(k,1)=(fnc(x1)-fn(x))/(0.001)' of the grad func subprogram.
function N5=grad(fnc,x)
grad1=zeros(length(x),1);
x1=x;
for k=1:1:length(x)
x1(k,1)=x1(k,1)+0.001;
grad1(k,1)=(fnc(x1)-fn(x))/(0.001);
x1=x;
end
N5=grad1;
function N4= fnc(x)
N4=(x(1,1)*x(1,1)+x(2,1)-11.0)^2+(x(1,1)+x(2,1)*x(2,1)-7)^2;

Answers (2)

Marta Salas
Marta Salas on 11 Mar 2014
The problem is that fnc is an input for grad, so fnc is a variable from now on. When you try to call fnc(x), MATLAB thinks you're trying to access position x on the array fnc and returns an error because x is not an integer.
I think what you want is:
function N5=grad(x)
grad1=zeros(length(x),1);
x1=x;
for k=1:length(x)
x1(k,1)=x1(k,1)+0.001;
grad1(k,1)=(fnc(x1)-fnc(x))/(0.001);
x1=x;
end
N5=grad1;
function N4 = fnc(x)
N4=(x(1,1)*x(1,1)+x(2,1)-11.0)^2+(x(1,1)+x(2,1)*x(2,1)-7)^2;

Walter Roberson
Walter Roberson on 11 Mar 2014
When you call grad() pass the function handle of fnc as the first argument
grad(@fnc, rand(1,50)) %for example

Categories

Find more on Debugging and Analysis in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!