Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Function 'subs': how use?

Asked by JRC on 21 Aug 2013

I have realized that the counts with this function 'subs' doing x(1) +1*x(2) and x(1) + 1*x(2) are differents, for example. The space in these expressions give me results differents.

Which the problem?

Which is correct? I think that the correct is x(1) +1*x(2) and not with the space.

Thanks.

JRC

0 Comments

JRC

Products

No products are associated with this question.

1 Answer

Answer by Walter Roberson on 21 Aug 2013

In the context of the [] operation,

   x(1) +1*x(2)

would usually be interpreted as

(x(1)), (+1*x(2))

which is two entries.

x(1) + 1*x(2) 

inside [] would be interpreted as one entry.

If you are not within the context of [] then the two should be the same.

5 Comments

JRC on 21 Aug 2013

Thanks Walter...

Have a detail... this situation that speak is in the looping and with values symbolics...

This because i use the comand

x = [x; sym(['x' num2str(j)])]; u = [u; sym(['u' num2str(j)])];

for inicialize the problem and after i do the accounts with

J(N) = subs(J(N), {x(N),y(N)},{1*x(N-1) -1*u(N-1), 0.5*x(N-1)+2*y(N-1)});

After i come back the problem for matrix

eval(['x' num2str(j+1) '=' num2str(eval(x(j+1)))]); eval(['u' num2str(j) '=' num2str(eval(u(j)))]);

I think that in this process my accounts are right... only would like to be sure.

I use 1*x(N-1) -1*u(N-1) and not 1*x(N-1) - 1*u(N-1), but these values are symbolics... this way, i think that the two forms are right.

This is the process (basically).

Thanks again...

Walter Roberson on 21 Aug 2013

Do not eval() MuPAD expressions, such as are returned by sym() or subs(). MuPAD and MATLAB use different syntax rules and different operators. If you want to convert a MuPAD expression into executable MATLAB form, use matlabFunction() on the MuPAD expression -- but if you do not need to execute at the MATLAB level, keep expressions in MuPAD form. If you have a MuPAD expression which consists entirely of constants and you want to convert it to double precision, use double() on the MuPAD expression.

Please see also http://matlab.wikia.com/wiki/FAQ#How_can_I_create_variables_A1.2C_A2.2C....2CA10_in_a_loop.3F . It looks to me as if you would be better off storing values in a struct than using eval() to generate new variable names.

JRC on 21 Aug 2013

Thanks Walter.

Walter Roberson

Contact us