Re: Re: question
- To: mathgroup at smc.vnet.net
- Subject: [mg74953] Re: [mg74925] Re: question
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Thu, 12 Apr 2007 04:55:36 -0400 (EDT)
- References: <evd3ku$5dd$1@smc.vnet.net> <200704110601.CAA02936@smc.vnet.net>
On 11 Apr 2007, at 15:01, Michael Weyrauch wrote:
> Hello,
>
> well, I think your command
>
>> In[57]:=
>> FullSimplify[Log[x+1],ComplexityFunction\[Rule]
>> (Count[{#1},_Log,Infinity]&)]
>>
>
> fails, because Log[z] as implemented in Mathematica does not know
> the transformation rules back into Hypergeometric functions. If I
> do it as
> follows under Mathematica 5.2 it works without problems...
>
> Unprotect[Log];
>
> Simplify[Log[x + 1], ComplexityFunction ->
> (Count[{#1}, _Log, Infinity] & ),
> TransformationFunctions ->
> {Log[z_] := Hypergeometric2F1[1, 1, 2, -z + 1]*
> (z - 1)}]
>
> (*output*)
>
> x*Hypergeometric2F1[1, 1, 2, -x]
>
> Of course, I have to use Unprotect, since I am adding a rule to an
> internal command.
>
> So, if for some reason I would like to "simplify" e.g. Log[x+1]^2
> it works as exspected
>
> Simplify[Log[x + 1]^2, ComplexityFunction ->
> (Count[{#1}, _Log, Infinity] & ),
> TransformationFunctions ->
> {Log[z_] := Hypergeometric2F1[1, 1, 2, -z + 1]*
> (z - 1)}]
>
> (*output*)
>
> x^2*Hypergeometric2F1[1, 1, 2, -x]^2
>
> Therefore, I am not sure, if Andrzej Kozlowski is right here?
>
> Regards Michael
>
I think I am ;-)
The reason why your code works is that by Unprotecting Log and then
running Simplify with your new transformation function you have
actually managed to modify the built-in definition of Log.
Observe that before modification:
In[1]:=
x*Hypergeometric2F1[1, 1, 2, -x]
Out[1]=
Log[x + 1]
But now let's run your code:
Unprotect[Log];
In[3]:=
Simplify[Log[x + 1]^2, ComplexityFunction ->
(Count[{#1}, _Log, Infinity] & ),
TransformationFunctions ->
{Log[z_] := Hypergeometric2F1[1, 1, 2, -z + 1]*
(z - 1)}]
Out[3]=
x^2*Hypergeometric2F1[1, 1, 2, -x]^2
It loks like you have achieved your purpose, but now try this:
Log[z]
(z - 1)*Hypergeometric2F1[1, 1, 2, 1 - z]
and, of course
x*Hypergeometric2F1[1, 1, 2, -x]
x*Hypergeometric2F1[1, 1, 2, -x]
Doesn't look like a very desirabe situation to me.
If one wants to restore the original behaviour of Log one needs to
Clear it. But here is a nice puzzle (which I will leave to others to
amuze themselves with ;-))
The puzzle is that Log is still Protected even though we never used
Protect only Unprotect:
Attributes[Log]
{Listable,NumericFunction,Protected,ReadProtected}
so we unprotect it again:
Unprotect[Log];
and then
Clear[Log]
restores the orignal behaviour:
Log[x]
Log[x]
x*Hypergeometric2F1[1, 1, 2, -x]
Log[x + 1]
Andrzej Kozlowski
- References:
- Re: question
- From: "Michael Weyrauch" <michael.weyrauch@gmx.de>
- Re: question