Well, yes. But try 1 - exp() and notice how rename fails to work properly. Yes, diff() works a little more sensibly for exp(), but that I think is mostly a happy accident.
One problem with dealing with tensor expressions as function arguments is that we really don't know what the function does and what it returns. In particular, the syntax yields no information about the function's return type (scalar, tensor, etc.)
Just to be clear, I'm not saying that the function syntax will forever remain outside the realm of expressions that itensor can deal with, just advising caution for now. It is a topic that is on my long-term "to do" list for itensor.
Viktor
-----Original Message-----
From: maxima-bounces at math.utexas.edu [mailto:maxima-bounces at math.utexas.edu] On Behalf Of Dmitry Shkirmanov
Sent: Wednesday, June 06, 2012 5:20 AM
To: maxima at math.utexas.edu
Subject: Re: [Maxima] Bug in the itensor package?
Thanks. But it seems that the itensor can deal with tensor expressions that appear as an argument of the exponential function. May be there is possibility to expand this functionality to the error function(and other functions)? It would be very useful.
(%i1) load(itensor)$
...
...
(%i2) expr: exp( a([i],[])*b([],[i]));
b([], [i]) a([i], [])
(%o2) %e
(%i3) expr: rename(expr);
b([], [%1]) a([%1], [])
(%o3) %e
(%i4) derivative: diff(expr, a([i],[]));
b([], [%1]) a([%1], [])
(%o4) b([], [%1]) %e kdelta([%1], [i])
(%i5) res: contract(%);
b([], [%1]) a([%1], [])
(%o5) b([], [i]) %e
Not really a bug per se, but a limitation. The itensor package generallycannot deal with tensor expressions that appear as function arguments.Function arguments are treated by itensor as opaque, and are excluded fromitensor operations, which is why contract and rename were ineffective. Onthe other hand, diff applies its standard rules to the expression with noregard to the fact that some of the terms it is manipulating representindexed objects, and the result is an unpredictable mess.
Viktor
-----Original Message-----
From: maxima-bounces at math.utexas.edu <http://www.math.utexas.edu/mailman/listinfo/maxima> [mailto:maxima-bounces at math.utexas.edu <http://www.math.utexas.edu/mailman/listinfo/maxima> ]
On Behalf Of Dmitry Shkirmanov
Sent: Tuesday, June 05, 2012 8:56 AM
To: maxima at math.utexas.edu <http://www.math.utexas.edu/mailman/listinfo/maxima>
Subject: Bug in the itensor package?
Hello,list.
Maxima 5.27.0 http://maxima.sourceforge.net
using Lisp CLISP 2.48 (2009-07-28)
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
The function bug_report() provides bug reporting information.
(%i1) load(itensor)$
...
...
(%i2) expr: erfc(-x([i],[])*y([],[i]))$
(%i3) expr: contract(expr)$
(%i4) expr: rename(expr);
(%o4) 2 - erfc(y([], [i]) x([i], []))
(%i5) diff(expr, y([],[i]));
2 2
- y ([], [i]) x ([i], [])
2 %e x([i], []) kdelta([i], [i])
(%o5) ---------------------------------------------------------
sqrt(%pi)
(%i6)
As it can be seen from this example, the rename() function does not work
correctly. Next, it seems, that the diff() function
does not work correctly too. Is it bug?