carlos at colorado.edu (Carlos Felippa) wrote in message news:<cjr8lg$opp$1 at smc.vnet.net>...
> As you know, Re[expr] and Im[expr] are left unevaluated when expr is
> not numeric. I had good luck in simple cases with the following
> substitution trick:
>
> Real[c_]:=c/.I->0; Imag[c_]:=(c-Real[c])/.I->1;
>
> Do you see any problem with these definitions?
Not yet there. Found limitations because n*I is internally stored as
Complex[0,n]. This version has done better:
RealPart[c_]:=ComplexExpand[c]/.{Complex[0,_]->0};
Examples:
Print[ RealPart[(a+I*b)^2] //InputForm];
Print[ RealPart[(a+I*b)^n] //InputForm];
Print[ RealPart[Exp[I*x]/I] //InputForm];
Print[ RealPart[Cosh[x+y*I]] //InputForm];
Results:
a^2 - b^2
Abs[a]^n*Cos[n*Arg[a]]
Sin[x]
Cos[y]*Cosh[x]