why embedded matlab function failed to determine the size of expression

Hi all,
u is an input from the output of continous state.so, for each time (1 x 3) matrix will come out, so
u matrix = 1 x 3
Mean = 1 x 450
is a mean of samples.This input from workspace which consist 150 times with 3 variables so its matrix is (1 x 450). but we only need (1 x 3) matrix to evaluate for each time
Std = 1 x 450
is a standard deviation of samples.Same description as above(mean)
Xnew = 1x3
is an outpyt from the equation Xnew = u-mean/std
Example;
for time 1
Xnew = u-Mean(1,1:3)
time 2
Xnew = u-Mean(1,4:6);
untill time 150
i'm trying to do loop in embedded matrix function as below command:
function Xnew = stats(u,Mean, Std)
%#eml
for j=1:150,
Xnew = (u-Mean(1,j:j+2))./Std(1,j:j+2);
end
unfortunately i received this error,
"Could not determine the size of this expression"
I'm doing looping because i want to pick the submatrix that will be used in the equation.
What should i change above command so as i can get the result as i want? anybody have idea?

1 Comment

I have problems to determine the size of u also. Are u and Mean, Std and XNew different variables? Then please edit the question and brush up the formatting.
Does Matlab have a chance to know the size of u?
Is there a reason to overwrite XNew in each iteration of the for j loop?

Sign in to comment.

 Accepted Answer

Strange. This works fine for me (I'm using R2011b). Perhaps you are using an older version of MATLAB? What about if you pre-allocate Xnew at the top of the function:
Xnew = zeros(1,3);

4 Comments

i'm using R2009a.i'm doing a little bit modification on my coding, i'm figure out that i need to pre-allocate Xnew as suggested by you.thank you. but the problem is the embedded file is suddenly run paused(locked)(debugging)without being asked?why?do you have any ideas? And one more question, if my input are from "from file" block and i dont want any modification on data.I mean interpolate. Is that possible? thank you
Perhaps there is a run-time error occurring in your code? Is there an error dialog displayed when you continue from the debugger?
It looks like you can set "Data interpolation within time range" on the 'From File' block dialog to "Zero order hold" to turn off linear interpolation.
In my "from file" block does not have :data interpolation within time range" dialog. its only have "file name and "sample time". Any alternative step can i do to turn off linear interpolation? by the way i'm using MATLAB R2009a
Yana: Sorry, perhaps the option to turn off interpolation was only introduced in a later release. You could try using Inport blocks to import data - these blocks should have an "Interpolate data" checkbox which you can turn off.

Sign in to comment.

More Answers (1)

In more recent versions your code should just work. However, in older versions the size of this pattern was not understood:
j:j+2
Simply rewrite it as:
j + (0:2)
HTH,
Fred

Community Treasure Hunt

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

Start Hunting!