Error Attempted to access x(2,1); index out of bounds because size(x)=[1,4]

1 view (last 30 days)
I am using Genetic Algorithm Toolbox(GUI). My fitness function is;
function y=regressionfcn(x)
for j=1:30
y= -0.0249 - 0.2075* x(j,1) - 0.3313* x(j,2) - 0.0731* x(j,3) - 0.0738* x(j,4);
end
end
But there occurs error as
Error Attempted to access x(2,1); index out of bounds because size(x)=[1,4]

Answers (2)

Sean de Wolski
Sean de Wolski on 25 May 2012
Apparently the regression function is fed a row vector rather than a column vector. To fix this, use:
J(1,2) or to be even safer just use j(2).
  1 Comment
b
b on 25 May 2012
i have 30x4 matrix. (30 samples of 4 variables)
due to my regression function, variable 1 has to be multiplied with 0.2075, etc...
i want that in each loop, row with 4 variables should be calculated.
Thanks..

Sign in to comment.


Walter Roberson
Walter Roberson on 25 May 2012
The fitness function for ga is expected to take a row vector as input.
Are you really trying to fit 120 parameters?? Is there any reason you are not using a simple linear regression instead of ga() ?
  4 Comments
Walter Roberson
Walter Roberson on 25 May 2012
function y=regressionfcn(x)
y= -0.0249 - 0.2075 * x(:,1) - 0.3313 * x(:,2) - 0.0731 * x(:,3) - 0.0738 * x(:,4);
end
This should be more efficient. Also note that your previous code overwrote "y" in each loop iteration.
The body could, I think, be made even more efficient as just
y = [ones(size(x,1),1) x] * [-0.0249 -0.0275 -0.3313 -0.0731 -0.0738];
b
b on 25 May 2012
Thanks for the answer
you re right but when i write as your first equation, it takes complete matrix.
To compensate my equation, i added a comma after for j=1:30
I could not understand your second equation..

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!