posible bug - clashing variable names in integrals
Subject: posible bug - clashing variable names in integrals
From: Leo Butler
Date: Sat, 3 Oct 2009 13:11:00 +0100 (BST)
On Sat, 3 Oct 2009, Leo Butler wrote:
<
<
< On Sat, 3 Oct 2009, Nathaniel Virgo wrote:
<
< < On a similar note, am I right to say the following should not return false?
< <
< < (%i20) A: 'integrate(f(x),x,a,b);
< < (%o20) integrate(f(x),x,a,b)
< < (%i21) B: 'integrate(f(y),y,a,b);
< < (%o21) integrate(f(y),y,a,b)
< < (%i22) is(A=B);
< < (%o22) false
< <
< < the two expressions are equivalent, the only difference being the name of a
< < bound variable. So it should return "true" or "maybe" but not false. It
< < works with ordinary (non-integral) functions:
< <
< < (%i24) f(x):=x^2;
< < (%o24) f(x):=x^2
< < (%i25) g(y):=y^2;
< < (%o25) g(y):=y^2
< < (%i26) is(f(z)=g(z));
< < (%o26) true
< <
< < Nathaniel
I think this makes perfect sense. f(z) and g(z) are syntactically equal
(the short story is they both evaluate to z^2). On the other hand, Maxima does not integrate
functions, it integrates expressions. For example
f(x) := x*y;
yields two different integrals if one integrates v. x vs. v. y.
So, Maxima will return 'unknown' for the test
is(equal(A,B));
too.
Leo
< <
< <
< < 2009/10/3 Nathaniel Virgo <nathanielvirgo at gmail.com>
< <
< < > Hi
< < >
< < > I just came across the following. Should it be considered a bug?
< < >
< < >
< < > this works fine:
< < >
< < > (%i10) C:integrate(g(y),y,c,d);
< < > (%o10) integrate(g(y),y,c,d)
< < >
< < > (%i11) A: integrate(C*f(x),x,a,b);
< < > (%o11) integrate(f(x),x,a,b)*integrate(g(y),y,c,d)
< < >
< < > it has successfully taken the constant outside the integral
< < >
< < > (%i12) B: C*'integrate(f(x),x,a,b);
< < > (%o12) integrate(f(x),x,a,b)*integrate(g(y),y,c,d)
< < >
< < > so A and B are the same
< < >
< < > (%i13) is(A=B);
< < > (%o13) true
< < >
< < > however, if I do the following, which should be exactly equivalent, it
< < > fails:
< < >
< < > (%i14) C:integrate(g(x),x,c,d);
< < > (%o14) integrate(g(x),x,c,d)
< < >
< < > (%i15) A: integrate(C*f(x),x,a,b);
< < > (%o15) integrate(f(x)*integrate(g(x),x,c,d),x,a,b)
< < >
< < > it has failed to realise that the x in the subexpression is a different
< < > variable from the x in the outer integral, so it keeps the constant inside
< < > the integral
< < >
< < > (%i16) B: C*'integrate(f(x),x,a,b);
< < > (%o16) integrate(f(x),x,a,b)*integrate(g(x),x,c,d)
< < >
< < > (%i17) is(A=B);
< < > (%o17) false
< < >
< < > ...and it now thinks the two expressions A and B are provably not the same,
< < > even though they are in fact equivalent. It would be ok (although a bit
< < > lame) if it answered "maybe" here, but it seems to me that "false" is just
< < > incorrect.
< < >
< < >
< < > Nathaniel
< < >
< < >
< <
<
< Nathaniel,
< You slide between equal and equivalent and are not clearly
< distinguishing between the two. Maxima does. From
<
< ? =
<
< `is(<a> = <b>)' evaluates `<a> = <b>' to `true' when <a> and <b>
< are syntactically equal (that is, identical). Expressions can be
< equivalent and not syntactically equal.
<
< Try
<
< is(equal(A,B));
<
<
< Leo
<
< --
< The University of Edinburgh is a charitable body, registered in
< Scotland, with registration number SC005336.
<
< _______________________________________________
< Maxima mailing list
< Maxima at math.utexas.edu
< http://www.math.utexas.edu/mailman/listinfo/maxima
<
<
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.