complex conjugation

chrisd at sci.kun.nl chrisd at sci.kun.nl
Sun Nov 23 00:46:18 CET 2003


Hi,

On Sat, 22 Nov 2003, Andrius Kurtinaitis wrote:

> it appears that the GiNaC expressions do not support the complex
> conjugation... :-(

That's funny. Actually I was just implementing this. At the moment I am
mostly getting segmentation faults though, but perhaps if you (and I) are
lucky it will appear in GiNaC within not to much time.

> I need it, but I do not know yet how to implement it.
> Has anybody tried to do this?

You could write a costum conjugation function suited for you application.
This may look like

struct Complexconj : public GiNaC::map_function
{  public:
      GiNaC::ex operator()(const GiNaC::ex&);
};

Complexconj complexconj;

ex Complexconj::operator()(const ex&x)
{  if(is_a<numeric>(x))
      return ex_to<numeric>(x).real()-I*ex_to<numeric>(x).imag();
   else if(x.match(vs(wild())))
      return vsbar(x.op(0));
   else if(x.match(vsbar(wild())))
      return vs(x.op(0));
   else if(x.match(us(wild())))
      return usbar(x.op(0));
   else if(x.match(usbar(wild())))
      return us(x.op(0));
   else if(x==pr)
      return pl;
   else if(x==pl)
      return pr;
   else if(is_a<power>(x))
      return power(operator()(x.op(0)),x.op(1));
   else if(is_a<lst>(x))
   {  lst result;
      for(int i=x.nops()-1;i>=0;--i)
         result.append(operator()(x.op(i)));
      return result;
   }
   else if(is_a<add>(x)||is_a<mul>(x))
      return x.map(*this);
   return x;
}

depending on the application you have. Note that the above will not
compile unless you have some more definitions around.

> Clearly conjugation is a function ;-)

Well, it is not a GiNaC::function. It is a C++ function.

> Ok, i'll try to read the tutorial. Let's see if I get this working...

Good luck,
Chris Dams




More information about the GiNaC-list mailing list