Asked by Qingbin
on 28 Mar 2013

For the following code, CEre is derived using the real function, but it contains i in the expression.

clc;clear all; syms s; syms T1 T2 w tau1 tau2 real; e1=(1-T1*s)/(1+T1*s); e2=(1-T2*s)/(1+T2*s); A=[0 1 0 0; 0 0 1 0; 0 0 0 1; -29.17 -56 -36.7 -10.1]; B1=[-1.55 1 0 0; -1 -0.3 0 0; 0 0 0.5 0; -0.7 0 -0.34 -2.6]; B2=[0 0 0 0; 1 1.5 4 0; 0 0 0 0; -0.33 0 0 -1.1]; B3=[0 0 0 0; 0 0 0 0; 0 0 0 0; -0.08 -0.7 0 -1]; B4=zeros(4,4); B4(4,3)=-3; n=size(A,1); tau3=0.169; tau4=0.26; cez=numden(simplify(det(w*1i*eye(n)-A-B1*e1-B2*e2-B3*(cos(tau3*w)-1i*sin(tau3*w))-B4*(cos(tau4*w)-1i*sin(tau4*w))))); % ce=collect(cez,s); cew=subs(cez,s,w*1i) CEre=real(cew); CEim=imag(cew);

After commenting off the function collect, the function real gives a result without the unity of complex i.

*No products are associated with this question.*

Answer by Walter Roberson
on 28 Mar 2013

I have not tried the above code, but consider

syms w real(w*1i)

The result may contain "i" because it is possible that w is complex itself.

In this particular case, the result could also be expressed as imag(w), but there are other cases that are more difficult to resolve, such as

real((w + 1i)^2)

Answer by Ahmed A. Selman
on 28 Mar 2013

Edited by Ahmed A. Selman
on 29 Mar 2013

Check the math, e.g.:

... TheEq=w*1i*eye(n)-A-B1*e1-B2*e2- B3*(cos(tau3*w)-1i*sin(tau3*w))-B4*cos(tau4*w)-1i*sin(tau4*w); TheDet=det(TheEq); TheSimple=simplify(TheDet); cez=numden(TheSimple); ...etc

Then see what do

TheSimpleEq=simplify(TheEq); pretty(TheSimpleEq)

give.

Why do you use (1i) instead of (i) only? If it is not declared before, then (i or j) alone are assumed a unity of complex in Matlab.

Walter Roberson
on 28 Mar 2013

Ahmed A. Selman
on 29 Mar 2013

If someone wrote a code, he shouldn't have to worry about accidents :)

Walter Roberson
on 29 Mar 2013

Be safe, program defensively. And make it easier for other people to read.

Opportunities for recent engineering grads.

## 0 Comments