Compare the result of integrate(1/(x^8-1),x) integrate(8*sqrt(2)/(x^8-1),x) integrate(a/(x^8-1),x)
The first is more complex than the second one. Why? Because: (1) -> factor(x^4+1) 4 (1) x + 1 Type: Factored(Polynomial(Integer)) (2) -> factor(x^4+4) 2 2 (2) (x - 2x + 2)(x + 2x + 2) Type: Factored(Polynomial(Integer)) The factorization of "x^4+r" depends on r, or else it will introduce extra algebraic kernels. In rational function integration, sum logs over roots of "x^4+r=0" is pretty common, but "lg2func" doesn't deal with this case. So I manually facor "x^4+r" into quadratics. This patch improves 1190a 1191a 1207a 1217a 1218a 1228a of mapleok.input, making 1191a 1207a 1217a continuous. I have to use "rootSimp" in the patch, I'm not sure if this will causes trouble elsewhere. diff --git a/src/algebra/irexpand.spad b/src/algebra/irexpand.spad index eb90a9c9..eaffa9e4 100644 --- a/src/algebra/irexpand.spad +++ b/src/algebra/irexpand.spad @@ -84,6 +84,7 @@ zero?(delta := (b := coefficient(p, 1))^2 - 4 * (a := coefficient(p, 2)) * (p0 := coefficient(p, 0))) => [linear(monomial(1, 1) + (b / a)::UP, lg)] + delta := rootSimp delta e := (q := quadeval(lg, c := - b * (d := inv(2*a)), d, delta)).ans1 lgp := c * log(nrm := (e^2 - delta * (f := q.ans2)^2)) s := (sqr := insqrt delta).sqrt @@ -152,8 +153,18 @@ -- one? d => [linear(p, lg.logand)] (d = 1) => [linear(p, lg.logand)] d = 2 => quadratic(p, lg.logand, x) - odd? d and - ((r := retractIfCan(reductum p)@Union(F, "failed")) case F) => + r := retractIfCan(reductum p)@Union(F, "failed") + d = 4 and r case F => + -- In this "p := ?^4 + r" case, we manually factor p into + -- "?^2 + sqrt(r) - ?*sqrt(2*sqrt(r))" and + -- "?^2 + sqrt(r) + ?*sqrt(2*sqrt(r))". + upx := monomial(1,1)$UP + t : F := rootSimp sqrt(2 * rootSimp sqrt r) + -- quadratic will always return 1 result (instead of 2), + -- because the sign of delta is fixed. + [first quadratic(upx^2 + sqrt(r)::UP - upx*t, lg.logand, x) + + first quadratic(upx^2 + sqrt(r)::UP + upx*t, lg.logand, x)] + odd? d and r case F => pairsum([cmplex(alpha := rootSimp zeroOf p, lg.logand)], lg2func([lg.scalar, (p exquo (monomial(1, 1)$UP - alpha::UP))::UP, -- You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group. To unsubscribe from this group and stop receiving emails from it, send an email to fricas-devel+unsubscr...@googlegroups.com. To post to this group, send email to fricas-devel@googlegroups.com. Visit this group at https://groups.google.com/group/fricas-devel. For more options, visit https://groups.google.com/d/optout.