Re: [GiNaC-list] question about quantum operator algebra
Dear Can-Hua,
{ ... constructing the result of rewriting is done here ...
Sorry, but I have no idea what goes here. Could you show me somewhere to find examples? Thank you.
Your function could look like the following ex rewrite_operators(const ex &x) { if (is_a<ncmul>(x)) { if (x.has(one)) { exvector v; v.reserve(x.nops()); for (int i=0; i<x.nops(); ++i) if (x.op(i) != one) v.push_back(x.op(i)); if (v.empty()) v.push_back(one); return rewrite_operators(ncmul(v)); } for (int i=0; i<x.nops()-1; ++i) if (x.op(i) == adag && x.op(i+1) == a) { exvector v; v.reserve(x.nops()); for (int j=0; j<i; ++j) v.push_back(x.op(j)); v.push_back(one+a*adag); for (int j=i+2; j<x.nops(); ++j) v.push_back(x.op(j)); return rewrite_operators(expand(ncmul(v))); } return x; } else return expand(x.map(rewrite_operators)); } Note that it is necesary to also declare an element "one" for your algebra because one cannot add numbers and noncommutative objects. Best wishes, Chris
participants (1)
-
Chris Dams