Forums before death by AOL, social media and spammers... "We can't have nice things"
|    sci.math.symbolic    |    Symbolic algebra discussion    |    10,432 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 10,373 of 10,432    |
|    Sam Blake to nob...@nowhere.invalid    |
|    Re: A rational integral and Rioboo's alg    |
|    03 Jan 24 17:24:03    |
      From: samuel.thomas.blake@gmail.com              On Thursday, January 4, 2024 at 5:07:54 AM UTC+11, nob...@nowhere.invalid       wrote:       > Richard Fateman schrieb:       > >        > > On Tuesday, January 2, 2024 at 12:32:26 PM UTC-8, nob...@nowhere.invalid       wrote:        > > >        > > > Sam Blake schrieb:        > > > >        > > > > For fun I have been implementing the rational integral routines from        > > > > Bronstein's Symbolic Integration I in Mathematica. As part of my        > > > > testing I stumbled across the following example integral        > > > >        > > > > \int x/(2 + 4 x + 5 x^2 + 2 x^3 + x^4) dx        > > > >        > > > > Rubi does well on this example        > > > >        > > > > In[66]:= Int[x/(2 + 4 x + 5 x^2 + 2 x^3 + x^4), x]        > > > >        > > > > Out[66]= -(ArcTan[(1 + 2 x)/Sqrt[7 - 4 Sqrt[2]]]/(        > > > > 2 Sqrt[2 (7 - 4 Sqrt[2])])) +        > > > > ArcTan[(1 + 2 x)/Sqrt[7 + 4 Sqrt[2]]]/(2 Sqrt[2 (7 + 4 Sqrt[2])]) -        > > > > ArcTanh[(7 + 4 (1/2 + x)^2)/(4 Sqrt[2])]/(2 Sqrt[2])        > > > >        > > > > While my rational function integrator returns        > > > >        > > > > In[67]:= IntegrateRational[x/(2 + 4 x + 5 x^2 + 2 x^3 + x^4), x]        > > > >        > > > > Out[67]= 1/2 (((-1 + I Sqrt[7 - 4 Sqrt[2]]) Log[        > > > > 1/2 (1 - I Sqrt[7 - 4 Sqrt[2]]) + x])/(        > > > > 2 (2 + 5/2 (-1 + I Sqrt[7 - 4 Sqrt[2]]) +        > > > > 3/4 (-1 + I Sqrt[7 - 4 Sqrt[2]])^2 +        > > > > 1/4 (-1 + I Sqrt[7 - 4 Sqrt[2]])^3)) + ((-1 -        > > > > I Sqrt[7 - 4 Sqrt[2]]) Log[        > > > > 1/2 (1 + I Sqrt[7 - 4 Sqrt[2]]) + x])/(        > > > > 2 (2 + 5/2 (-1 - I Sqrt[7 - 4 Sqrt[2]]) +        > > > > 3/4 (-1 - I Sqrt[7 - 4 Sqrt[2]])^2 +        > > > > 1/4 (-1 - I Sqrt[7 - 4 Sqrt[2]])^3)) + ((-1 +        > > > > I Sqrt[7 + 4 Sqrt[2]]) Log[        > > > > 1/2 (1 - I Sqrt[7 + 4 Sqrt[2]]) + x])/(        > > > > 2 (2 + 5/2 (-1 + I Sqrt[7 + 4 Sqrt[2]]) +        > > > > 3/4 (-1 + I Sqrt[7 + 4 Sqrt[2]])^2 +        > > > > 1/4 (-1 + I Sqrt[7 + 4 Sqrt[2]])^3)) + ((-1 -        > > > > I Sqrt[7 + 4 Sqrt[2]]) Log[        > > > > 1/2 (1 + I Sqrt[7 + 4 Sqrt[2]]) + x])/(        > > > > 2 (2 + 5/2 (-1 - I Sqrt[7 + 4 Sqrt[2]]) +        > > > > 3/4 (-1 - I Sqrt[7 + 4 Sqrt[2]])^2 +        > > > > 1/4 (-1 - I Sqrt[7 + 4 Sqrt[2]])^3)))        > > > >        > > > > I find similar results from AXIOM and FriCAS. Is this a limitation of        > > > > Rioboo's algorithm?        > > > >        > > >        > > > This is an interesting example. Derive 6.10 also solves the integral in        > > > real terms:        > > >        > > > INT(x/(2 + 4*x + 5*x^2 + 2*x^3 + x^4), x)        > > >        > > > SQRT(238 - 136*SQRT(2))*ATAN(SQRT(119 - 68*SQRT(2))*(2*x + 1)/17)/68        > > > - SQRT(136*SQRT(2) + 238)*ATAN(SQRT(68*SQRT(2) + 119)*(2*x + 1)/17)/68        > > > + SQRT(2)*LN((x^2 + x - SQRT(2) + 2)/(x^2 + x + SQRT(2) + 2))/8        > > >        > > > as it starts by factoring the denominator:        > > >        > > > 2 + 4*x + 5*x^2 + 2*x^3 + x^4 =        > > > (x^2 + x + SQRT(2) + 2)*(x^2 + x - SQRT(2) + 2)        > > >        > > > and then expands the integrand into partial fractions. Indeed, the        > > > cubic resolvent of the denominator factors as (y - 4)*(y^2 - y - 4).        > > >        > > > By contrast, FriCAS 1.3.9 returns a whopping:        > > >       > > > [...]       > > >        > > > which is the sum of three logarithms involving many nested rootOf()s        > > > where the %%En denote local variables. The quartic of the inner        > > > rootOf() factors as:        > > >        > > > 544*z^4 - 20*z^2 + 4*z + 1 =        > > > 1/17*(68*SQRT(2)*z^2 + 34*z + 3*SQRT(2) - 1)        > > > *(68*SQRT(2)*z^2 - 34*z + 3*SQRT(2) + 1)        > > >        > > > and its cubic resolvent is (34*y - 3)*(272*y^2 + 34*y + 1).        > > >        > > > Let's see if FriCAS version 1.3.10 will do better.        > > >        > >       > > In Maxima ... factor the denominator in an algebraic field...        > >        > > (%o4) x^4+2*x^3+5*x^2+4*x+2        > > (%i5) factor(%, subst(a,x,%));        > >        > > (%o5) (x-a)*(x+a+1)*(x^2+x+a^2+a+4)        > >        > > from which integration produces a relatively compact form.       > This expresses the factors of the denominator in terms of any one still        > unknown root. Even though all of the roots are complex:        >        > SOLUTIONS(a^4 + 2*a^3 + 5*a^2 + 4*a + 2 = 0, a)        >        > [- 1/2 + #i*SQRT(4*SQRT(2) + 7)/2, - 1/2 - #i*SQRT(4*SQRT(2) + 7)/2,        > - 1/2 + #i*SQRT(7 - 4*SQRT(2))/2, - 1/2 - #i*SQRT(7 - 4*SQRT(2))/2]        >        > the constant a^2 + a in the quadratic factor is real for any of them,        > and so will then be an antiderivative based on the decomposition:        >        > x^4 + 2*x^3 + 5*x^2 + 4*x + 2 =        > (x^2 + x - a^2 - a)*(x^2 + x + a^2 + a + 4)        >        > in which the pair of linear factors is treated as a another quadratic.        >        > If the code in Bronstein's book is indeed claimed to produce a real        > antiderivative for       > IntegrateRational[x/(2 + 4 x + 5 x^2 + 2 x^3 + x^4), x]       > and nothing has been overlooked in the code itself, there should be a        > bug in the Mathematica implementation. Breaking four complex logarithms        > up into real and imaginary parts should be within the capabilities of        > programming on Mathematica - the imaginary parts would finally cancel.        > If the code can identify complex conjugate pairs, the imaginary parts        > could be ignored right away.        >        > Martin.              One issue is in simplification of polynomial coefficients in LogToAtan that       must happen prior to calling PolynomialGCD. Here is one of the coefficients:               In[78]:=        162 Sqrt[1/17 (7 + 4 Sqrt[2])] - (2030 Sqrt[1/17 (7 + 4 Sqrt[2])])/(        7 - 4 Sqrt[2]) - 112 Sqrt[2/17 (7 + 4 Sqrt[2])] + (        1432 Sqrt[2/17 (7 + 4 Sqrt[2])])/(7 - 4 Sqrt[2]) // FullSimplify              Out[78]= 0              With this fixed I get the following result:               In[79]:= IntegrateRational[x/(2 + 4 x + 5 x^2 + 2 x^3 + x^4), x]              Out[79]=        1/2 Sqrt[1/34 (7 - 4 Sqrt[2])]        ArcTan[(Sqrt[7 - 4 Sqrt[2]] + 2 Sqrt[7 - 4 Sqrt[2]] x)/Sqrt[17]] +         Sqrt[7/136 + 1/(17 Sqrt[2])]        ArcTan[1/17 (-Sqrt[17 (7 + 4 Sqrt[2])] - 2 Sqrt[17 (7 + 4 Sqrt[2])] x)] -         ArcTanh[(2 + x + x^2)/Sqrt[2]]/(2 Sqrt[2])              Which is still not as nice as Rubi, but a lot closer...               Sam              --- SoupGate-Win32 v1.05        * Origin: you cannot sedate... all the things you hate (1:229/2)    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca