Trouble with the pattern matcher ...



Richard, that's great help, thank you!
Indeed I'm trying to make Maxima solve integrals the "human way" for 
learning purposes.
If you have any additional information/hints on that topic (maybe it has 
even been done already?), I'd be very grateful.

Regards,
David


Am 13.09.2013 03:19, schrieb Richard Fateman:
> On 9/12/2013 1:09 AM, David Scherfgen wrote:
>> Hello,
>>
>> I've stumpled upon the following behavior:
>>
>> (%i1) matchdeclare(f, true);
>>       defmatch(df_over_f, diff(f, x) / f);
>>       defmatch(df_times_f, diff(f, x) * f);
>>       df_over_f(cos(x) / sin(x));
>>       df_times_f(cos(x) * sin(x));
>> (%o1) done
>> (%o2) df_over_f
>> (%o3) df_times_f
>> (%o4) [f=sin(x)]
>> (%o5) false
>>
>> In other words:
>> The pattern matcher correctly recognizes cos(x)/sin(x), but fails to 
>> recognize cos(x)*sin(x) - the only difference being the operator.
> just a guess, but  in sin(x)*cos(x), there are 2 ways of matching f.  
> f=sin(x) and f=cos(x).
> If the wrong choice is made, then the diff(f,x) will not match the 
> other term.
>
> If you want to find a way to detect if the derivative of one term 
> exactly divides the other, you
> have to sequence through all the terms, or do something equivalent.  
> The defmatch
> mechanism does not do exhaustive search.
>
>
> A paper which describes how to achieve what you want  (almost very 
> explicitly your issue, I think) is
>
> www.cs.berkeley.edu/~*fateman*/papers/partition.pdf
>
>
>>
>> It also fails for the very simple case of 1 and x:
>>
>> (%i2) df_over_f(1 / x);
>>       df_times_f(1 * x);
>> (%o6) [f=x]
>> (%o7) false
>>
>> Am I doing something wrong here?
> 1*x is indistinguishable from x.  There is no "*" in it at all.
>
>>
>> Regards,
>> David
>> _______________________________________________
>> Maxima mailing list
>> Maxima at math.utexas.edu
>> http://www.math.utexas.edu/mailman/listinfo/maxima
>