home bbs files messages ]

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 9,875 of 10,432   
   clicliclic@freenet.de to Nasser M. Abbasi   
   Re: hitting the FriCAS jackpot   
   02 Apr 18 15:34:28   
   
   "Nasser M. Abbasi" schrieb:   
   >   
   > On 4/1/2018 2:37 PM, clicliclic@freenet.de wrote:   
   > >   
   > > Here is another "moderately-sized square-root pseudo-elliptic integral   
   > > on which FriCAS is still known to fail".   
   > >   
   > > Being confronted with:   
   > >   
   > > setSimplifyDenomsFlag(true)   
   > >   
   > > integrate((x^2 + 2*x - 3)/((x^4 - 8*x^3 + 94*x^2 + 552*x + 657)   
   > > *sqrt(x^3 - 15*x - 22)), x)   
   > >   
   > > the current web-interface version 1.3.2 responds with:   
   > >   
   > >>> Error detected within library code:   
   > >     Not integrable (provided residues have no relations)   
   > >   
   > > Why can't FriCAS establish non-integrability here?   
   > >   
   >   
   > FYI, same error shows up in Fricas 1.3.3 on Linux.   
   >   
      
   This error message appears in AlgebraicIntegrate(R0, F, UP, UPUP, R)   
   in the source file intalg.spad. The initial definition:   
      
   NOTI ==> error "Not integrable (provided residues have no relations)"   
      
   is referred to three times later on (here marked by # in 1st column):   
      
   -- case when the irreducible factor p has roots which sum to 0   
   -- p is assumed doubly transitive for now   
       trace0(rec, q, r, dv0) ==   
         lg:List(LOG) :=   
           zero? dv0 => empty()   
   #       (rc0 := torsionIfCan dv0) case "failed" => NOTI   
           mkLog(1, r / (rc0.order::Q), rc0.function, 1)   
         trace00(rec, q, lg)   
      
       trace00(rec, pp, lg) ==   
         p0 := divisor(rec.num, rec.den, rec.derivden, rec.gd,   
                       alpha0 := zeroOf UP2SUP pp)   
         q  := (pp exquo (monomial(1, 1)$UP - alpha0::UP))::UP   
         alpha := rootOf UP2SUP q   
         dvr := divisor(rec.num, rec.den, rec.derivden, rec.gd, alpha) - p0   
         (rc := torsionIfCan dvr) case "failed" =>   
           degree(pp) <= 2 => "failed"   
   #       NOTI   
         concat(lg, mkLog(q, inv(rc.order::Q), rc.function, alpha))   
      
   -- case when the irreducible factor p has roots which sum <> 0   
   -- the residues of f are of the form [a1,...,ak] rational numbers   
   -- plus all the roots of q(z), which is squarefree   
   -- la is the list of residues la := [a1,...,ak]   
   -- ld is the list of divisors [D1,...Dk] where Di is the sum of all the   
   -- places where f has residue ai   
   -- q(z) is assumed doubly transitive for now.   
   -- let [alpha_1,...,alpha_m] be the roots of q(z)   
   -- in this function, b = - alpha_1 - ... - alpha_m is <> 0   
   -- which implies only one generic log term   
       trace1(rec, q, la, ld, b) ==   
   -- cd = [[b1,...,bk], d]  such that ai / b = bi / d   
         cd  := splitDenominator [a / b for a in la]   
   -- then, a basis for all the residues of f over the integers is   
   -- [beta_1 = - alpha_1 / d,..., beta_m = - alpha_m / d], since:   
   --      alpha_i = - d beta_i   
   --      ai = (ai / b) * b = (bi / d) * b = b1 * beta_1 + ... + bm *   
   beta_m   
   -- linear independence is a consequence of the doubly transitive   
   assumption   
   -- v0 is the divisor +/[bi Di] corresponding to the residues [a1,...,ak]   
         v0 := +/[a * dv for a in cd.num for dv in ld]   
   -- alpha is a generic root of q(z)   
         alpha := rootOf UP2SUP q   
   -- v is the divisor corresponding to all the residues   
         v := v0 - cd.den * divisor(rec.num, rec.den, rec.derivden, rec.gd,   
   alpha)   
         (rc := torsionIfCan v) case "failed" =>   -- non-torsion case   
           degree(q) <= 2 => "failed"       -- guaranteed doubly-transitive   
   #       NOTI                             -- maybe doubly-transitive   
         mkLog(q, inv((- rc.order * cd.den)::Q), rc.function, alpha)   
      
   So this failure should be related to limitations of results from   
   torsionIfCan() when q(z) (whatever this square-free thingy represents:   
   can a polynomial be doubly-transitive?) has degree > two. The   
   implementation of torsionIfCan() resides in another source file   
   (presumably pfo.spad).   
      
   I think NOTI should be improved to inform the user why FriCAS cannot   
   handle his integral.   
      
   The deadly failure reported recently in "elementarily integrable or   
   not?" is most likely related to torsion too.   
      
   The author of AlgebraicIntegrate() is Manuel Bronstein.   
      
   Martin.   
      
   --- 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