You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 2bc0561
Browse filesBrowse the repository at this point in the historyBrowse files
Write an exponential of a symbolic multiple of i arctan as powers of the linears (#1934)
* Write an exponential of a symbolic multiple of i arctan as powers of the linears
e^(k i arctan(L)) is (1 + i L)^(k/2) (1 - i L)^(-k/2) and (K (1 + L^2))^q is
K^q (1 + i L)^q (1 - i L)^q, both exactly for a real L and any k and q.
(c + a^2 c x^2)^p/e^(2 i p arctan(a x)) is then c^p (1 - i a x)^(2p), a
power of a linear; it was left unevaluated (Rubi's 5.3.6:502 and :503).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura
* Record the exponentials of a symbolic multiple of i arctan in BREAKING-CHANGES
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura
---------
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: BREAKING-CHANGES.md
+13Lines changed: 13 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -607,6 +607,19 @@ partial fractions divide. It is taken out in front of the integral first
607
607
| `"(b*d + 2*c*d*x)^9/(a + b*x + c*x^2)^3".ToEntity().Integrate("x")` | past a minute | 76,249 characters, the length the content-free one already had |
608
608
| `"(b*d + 2*c*d*x)^8/(a + b*x + c*x^2)^3".ToEntity().Integrate("x")` | past a minute | 65,236 characters |
609
609
610
+
### An exponential of a symbolic multiple of i arctan is written as powers of the linears
611
+
612
+
**Answers where there were none.** `(c + a^2 c x^2)^p/e^(2 i p arctan(a x))` was left unevaluated. For a real `L`,
613
+
`e^(k i arctan(L))` is `(1 + i L)^(k/2) (1 - i L)^(-k/2)` and `(K (1 + L^2))^q` is `K^q (1 + i L)^q (1 - i L)^q`, for any
614
+
`k` and `q`, so the integrand is a product of powers of two linears, and with these exponents a single power
static IEnumerable<(Entity Factor, bool Below)> Factors(Entity e, bool below) => e switch
9699
+
{
9700
+
Mulf(var l, var r) => Factors(l, below).Concat(Factors(r, below)),
9701
+
Divf(var l, var r) => Factors(l, below).Concat(Factors(r, !below)),
9702
+
_ => new[] { (e, below) }
9703
+
};
9704
+
var factors = Factors(expr, false).ToList();
9705
+
Entity? argument = null;
9706
+
Entity? multiple = null;
9707
+
foreach (var (factor, below) in factors)
9708
+
{
9709
+
if (factor is not Powf(var e, var exponent) || e != MathS.e || !exponent.ContainsNode(x))
9710
+
continue;
9711
+
if (argument is not null)
9712
+
return null;
9713
+
var arctangents = exponent.Nodes.OfType<Arctanf>().Distinct().ToList();
9714
+
if (arctangents.Count != 1 || !TreeAnalyzer.TryGetPolyLinear(arctangents[0].Argument, x, out var slope, out _) || TreeAnalyzer.IsZero(slope))
9715
+
return null;
9716
+
var placeholder = Variable.CreateUnique(exponent, "u_atan");
9717
+
if (!TreeAnalyzer.TryGetPolyLinear(exponent.Replace(node => node == arctangents[0] ? placeholder : node), placeholder, out var coefficient, out var free)
9718
+
|| coefficient is null || free is null || coefficient.ContainsNode(x) || !TreeAnalyzer.IsZero(free))
9719
+
return null;
9720
+
// Simplified, since `2 i p/i` is not reduced to `2 p` short of it.
0 commit comments