Date: Feb 13, 2013 9:17 AM
Author: Steven Lord
Subject: Re: Error in (embedded) MATLAB function



"Hamid Mazaheri" <chub_kebreet@yahoo.com> wrote in message
news:kfg5gq$74i$1@newscl01ah.mathworks.com...
> I have a problem using (embedded) MATLAB functions.
> I have this code:
>
> function [y1,y2]= fcn(u1,u2,u3)
> %#codegen
> Ts = .1e-3;
> persistent l % ia an auxiliary variable
> if isempty(l)
> l = 0;
> end
> persistent x1 % x1 is first state variable
> if isempty(x1)
> x1 = 0;
> end
> persistent x2 % x2 is second state variable
> if isempty(x2)
> x2 = 0;
> end
> if floor(u3/Ts) >= l
> l = l+1;
> y1 = .3067*x1+3.5924*x2+.6933*u1-3.5994*u2;
> y2 = -.2515*x1+.3042*x2+.2515*u1+.6933*u2;
> x1 = y1;
> x2 = y2;
> end
>
> The system has two inputs and two outputs.
> Running the system gives the following error:
>
> Output argument 'y1' is not assigned on some execution paths.
> Function 'MATLAB Function' (#22.18.21), line 1, column 19:
> "fcn"


What happens if floor(u3/Ts) is strictly less than l? [BTW, please choose a
different variable name for this auxiliary variable; lower-case L's,
upper-case i's, and the number 1 can be difficult to distinguish in many
fonts.] Your last IF block never executes. What value should the first
output of the function have in that case? It doesn't have one with your
function as written, and that's the cause of the error.

--
Steve Lord
slord@mathworks.com
To contact Technical Support use the Contact Us link on
http://www.mathworks.com