If p is an integer, you could just factor() the expression and pattern
match against it (or to guard against slow negatives, use sqf_list,
which is basically what your technique uses). Integration should work
for any p, though, non-integer or symbolic, so long as it doesn't
depend on x. So I would recommend:

- factor() the expression in case it is expanded
- pattern match with Wild() and match() (or whatever it is
manualintegrate already uses)

More general cases, say if p is a sum and the term is expanded, may
require further simplification functions like powsimp() to bring it
into canonical form.

Aaron Meurer


On Thu, Jun 9, 2016 at 5:24 PM, Richard Fateman <[email protected]> wrote:
> This works:   if h = c*(e+f*x)^p
> then  h/gcd(h,diff(h,x) )  should produce f*x+e.   Setting x to 0
> gives you e.  subtracting e from f*x+e and setting x to 1 gives you f.
>
> c is kind of arbitrary, since if c=q^p, you can put it inside the ()^p.
>
> If c is 1, then
> to find p, try log(h)/log(e+f*x).
>
> This all works in Maxima; not sure how if it works in sympy.
> RJF
>
>
>
> On Wednesday, June 8, 2016 at 7:54:05 PM UTC-7, Richard Fateman wrote:
>>
>> I suggest you get rid of all factors not dependent on x by scanning
>> through each term in a product, if you have a product.
>> then you need only find if the expression is R= (e+f*x)^p.
>> compute t A= taylor series expansion around 0 of R and B=taylor series of
>> diff(R,x).
>>
>> Some algebra should get you e,f,p, if you had some R  of that form.  check
>> by substitution.
>>
>> Just a suggestion.
>>
>> RJF
>>
>>
>>
>> On Thursday, May 5, 2016 at 7:01:41 AM UTC-7, Alexander Lindsay wrote:
>>>
>>> I am trying to build a rule for manual integration. I want to test
>>> whether an expression matches the general form:
>>>
>>> c (e + f x)**p
>>>
>>> where c, f, and p can be non-zero expressions not containing x, whereas
>>> e can be zero but again cannot contain x.
>>>
>>> Moreover, if the expressions matches the above form, I would like to
>>> parse it such that I know the values for c, e, f, and p.
>>>
>>> Any suggestions on general strategies for achieving my goals? I have
>>> been thinking about prolific use of func and args. I imagine that I
>>> would consider various branches for my test since c = 1, e = 0, f = 1,
>>> and p = 1 would all change the class type of the expression or
>>> sub-expressions.
>
> --
> You received this message because you are subscribed to the Google Groups
> "sympy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/sympy.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sympy/c52fbb2c-a0fc-49f6-b17a-1942797e91fd%40googlegroups.com.
>
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAKgW%3D6%2BtAGJ0GaLyYdS3md9CAgTwdp9DDc5EXbeUKTdDT%3DxA7w%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to