why embedded matlab function failed to determine the size of expression

1 visualizzazione (ultimi 30 giorni)
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 Commento
Jan
Jan il 18 Lug 2012
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?

Accedi per commentare.

Risposta accettata

Kaustubha Govind
Kaustubha Govind il 18 Lug 2012
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 Commenti
yana osman
yana osman il 6 Ago 2012
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
Kaustubha Govind
Kaustubha Govind il 6 Ago 2012
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.

Accedi per commentare.

Più risposte (1)

Fred Smith
Fred Smith il 18 Lug 2012
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!

Translated by