Skip to content

A logarithm of x is matched to a logarithm of a multiple of x below the bar - #1644

Merged
Rafael-SOWNet merged 1 commit into
masterfrom
a-logarithm-matched-to-a-logarithm-below-the-bar
Oct 1, 2026
Merged

Rafael-SOWNet merged 1 commit into
masterfrom
a-logarithm-matched-to-a-logarithm-below-the-bar

Conversation

@Rafael-SOWNet

Copy link
Copy Markdown
Member

By parts on li(b x)/x takes the antiderivative of 1/x. With ln(x), the remainder was b ln(x)/ln(b x), which nothing read. ln(b x) is as much an antiderivative of 1/x, and taken so, the logarithm the derivative of li(b x) divides by cancels: li(b x)/x is li(b x) ln(b x) - b x, which is Rubi's answer. The constant of integration is now matched to a logarithm of a multiple of x below the bar, as it is matched to a polynomial divisor.

Measured

Input Was (2.5.0) Now
"li(b*x)/x".Integrate("x") li * b * x + C, with li a variable li(b * x) * ln(b * x) - b * x + C
  • Rubi, master at 16203aa6 and this change on it, run side by side, 0 wrong everywhere:
    • Family 8: 380 → 381 of 420, the one being li(b x)/x.
    • Family 3 at twenty a file: 172 and 173 of 180.
    • The independent suites: 1756 of 1814 on both.
    • Families 1, 2 and 4–7 at five a file: 771 and 770 of 867.
  • Run alone, the three that moved are:
  • The unit tests pass: 14,262, none failed (net10.0). On master with A square of a special function of a shifted argument is asked term by term #1643, the classes this touches pass (106). The native AOT publish of the C++ wrapper builds with no trim or AOT warnings.
  • The performance gate passes on c6f7a34c, which is this change on 16203aa6. Allocation matches the baseline on all 19 gated benchmarks.

SpecialFunctionsByPartsTest checks li(b x)/x at positive points, where li(b x) is real.

Part of #1501.

🤖 Generated with Claude Code

…he bar

By parts on li(b x)/x takes the antiderivative of 1/x, and with ln(x) the remainder was
b ln(x)/ln(b x), which nothing read. ln(b x) is as much an antiderivative of 1/x, and taken so, the
logarithm the derivative of li(b x) divides by cancels: li(b x)/x is li(b x) ln(b x) - b x, which is
Rubi's answer. The constant of integration is matched to a logarithm of a multiple of x below the
bar now, as it is matched to a polynomial divisor.

Measured on the Rubi corpus, master at 16203aa and this change on it, run side by side: family 8
380 -> 381 of 420 (li(b x)/x); family 3 at twenty a file 172 and 173 of 180, family 0 1756 of 1814,
and families 1, 2 and 4 to 7 at five a file 771 and 770 of 867. 0 wrong everywhere. Run alone, the
three that moved are li(b x)/x, answered here and not on master, and 3.2.3 #30 and 6.7.1 #180,
answered on both in 19 to 24 s: their side-by-side difference was load.

The unit tests pass, 14,262, and the performance gate passes on c6f7a34c, which is this change on
16203aa: allocation is what the baseline says on all 19 gated benchmarks.

SpecialFunctionsByPartsTest checks li(b x)/x at positive points, where li(b x) is real.

Part of #1501.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant