conjugate is weird



Felix,

Welcome to Maxima.

> Obviously the result is wrong if - as described in the 
> documentation - "conjugate" is a function that returns the complex
> conjugate of its argument.

Well... there are several issues here.

First of all, Maxima is case-sensitive (except -- inconsistently -- for
built-in functions), so the function "conjugate" is not the same as the
function "CONJUGATE".  (I hope we will be fixing this for Maxima 6.0.)
It turns out that the EIGEN package defines upper-case "CONJUGATE", not
lower-case "conjugate", which is undefined.

Secondly, the CONJUGATE function in the Eigen package is not a
mathematical function -- it is an expression transformation routine
(like Substitute or Part).  That is, it takes an expression and
*syntactically* takes its complex conjugate.

Third, CONJUGATE is simple-minded, and doesn't know anything about the
behavior of functions, assuming that all functions F have the property
that conj(F(x))=F(conj(x)) -- which is true of analytic functions, but
not of all non-analytic functions.  It also implicitly assumes that all
variables (*including* those declared as COMPLEX) are real.  In fact, if
you look at its definition, you'll see that all it does is to substitute
-%I for %I in the expression.

Fourth, since CONJUGATE is not built-in, the rest of the system
(including Realpart, Imagpart, etc.) doesn't know anything about it.  As
far as they're concerned, even a noun-form CONJUGATE is just a generic
unknown function.  What's more, Maxima assumes that ALL unknown
functions are real-valued (even with complex arguments).  To make
Conjugate into a first-class built-in function, the rest of the system
would have to know more about it....

What exactly is the problem you're trying to solve?

     -s