Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions BREAKING-CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -870,6 +870,23 @@ reals, to `1` and `0` ([#2195](https://github.com/asc-community/AngouriMath/issu
| `"arg(x)".ToEntity().Compile("x").Call(-2)` | throws `UncompilableNodeException`, `arg` being a variable | `pi` |
| `"conj(x)".ToEntity().Compile<Complex, Complex>("x")(3 + 4i)` | throws `UncompilableNodeException`, `conj` being a variable | `3 - 4i` |

### A Taylor expansion simplifies each derivative before taking the next

**Silent: `MathS.Series.Taylor`, `Maclaurin` and `TaylorTerms` print simplified coefficients, an expansion where the
function has no value is `NaN`, and no terms are `0`.** Each derivative was taken from the one before it as it stood,
and only the term built from it was simplified. A quotient's derivatives grew about eightfold a step: the ninth of
`sin(x) / x` had 7,797,110 nodes, and 87 simplified. One derivative more than the terms kept was also taken, then
dropped. An expansion around a point where the function has no value summed a `NaN` for each term
([#2291](https://github.com/asc-community/AngouriMath/issues/2291)).

| Input | Was (2.6.0) | Now |
|---|---|---|
| `MathS.Series.Taylor("sin(x) / x", 11, ("x", 1))` | `OutOfMemoryException` after 32 s with a 2 GB heap | 529 characters, 0.9 s |
| `MathS.Series.Taylor("sin(x) / x", 7, ("x", 1))` | 36,421 characters | `sin(1) + (cos(1) - sin(1)) * (x - 1) + ((-2) * cos(1) + sin(1)) * (x - 1) ^ 2 / 2! + ...` |
| `MathS.Series.Taylor("sin(x) / x", 4, ("x", 0))` | `NaN + NaN + NaN / 2! + NaN / 3!` | `NaN` |
| `MathS.Series.Taylor("sin(x)", 0, ("x", 1))` | throws `AngouriBugException` | `0` |
| `MathS.Series.Taylor("sin(x) + cos(y)", 6, ("x", 1))` | `sin(1) + cos(y) + cos(1) * (x - 1) + -sin(1) * (x - 1) ^ 2 / 2! + cos(1) * (-1) * (x - 1) ^ 3 / 3! + ...` | `cos(y) + sin(1) + cos(1) * (x - 1) + -sin(1) * (x - 1) ^ 2 / 2! + -cos(1) * (x - 1) ^ 3 / 3! + ...` |

### A logarithm to base 0 has no value

**Silent: `log(0, x)` is `NaN`, where it was `0` for a positive `x`.** Evaluation and both compilers took it as
Expand Down
64 changes: 32 additions & 32 deletions Sources/AngouriMath/Convenience/MathS.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2681,23 +2681,23 @@ public static class Series
/// x ^ 9 / 362880 - x ^ 7 / 5040 + x ^ 5 / 120 - x ^ 3 / 6 + x
/// ----------------------
/// sin(x) + cos(y)
/// 1 + (6 * x ^ 5 - 120 * x ^ 3) / 720 + x + (2 * y ^ 4 - 24 * y ^ 2) / 48
/// x ^ 5 / 120 - x ^ 3 / 6 + x + 1 + y ^ 4 / 24 - y ^ 2 / 2
/// ----------------------
/// sin(x) + cos(y)
/// sin(1) + cos(y) + cos(1) * (x - 1) + -sin(1) * (x - 1) ^ 2 / 2! + cos(1) * (-1) * (x - 1) ^ 3 / 3! + -sin(1) * (-1) * (x - 1) ^ 4 / 4! + cos(1) * (-1) * (-1) * (x - 1) ^ 5 / 5!
/// cos(y) + sin(1) + cos(1) * (x - 1) + -sin(1) * (x - 1) ^ 2 / 2! + -cos(1) * (x - 1) ^ 3 / 3! + sin(1) * (x - 1) ^ 4 / 4! + cos(1) * (x - 1) ^ 5 / 5!
/// ----------------------
/// sin(x) + cos(y)
/// sin(1) + cos(5) + cos(1) * (x - 1) + -sin(5) * (y - 5) + (-sin(1) * (x - 1) ^ 2 + cos(5) * (-1) * (y - 5) ^ 2) / 2! + (cos(1) * (-1) * (x - 1) ^ 3 + -sin(5) * (-1) * (y - 5) ^ 3) / 3! + (-sin(1) * (-1) * (x - 1) ^ 4 + cos(5) * (-1) * (-1) * (y - 5) ^ 4) / 4! + (cos(1) * (-1) * (-1) * (x - 1) ^ 5 + -sin(5) * (-1) * (-1) * (y - 5) ^ 5) / 5!
/// cos(5) + sin(1) + cos(1) * (x - 1) + -sin(5) * (y - 5) + (-sin(1) * (x - 1) ^ 2 + -cos(5) * (y - 5) ^ 2) / 2! + (-cos(1) * (x - 1) ^ 3 + sin(5) * (y - 5) ^ 3) / 3! + (sin(1) * (x - 1) ^ 4 + cos(5) * (y - 5) ^ 4) / 4! + (cos(1) * (x - 1) ^ 5 + -sin(5) * (y - 5) ^ 5) / 5!
/// ----------------------
/// sin(x) + cos(y)
/// sin(1) + cos(5) + cos(1) * (z_1 - 1) + -sin(5) * (z_2 - 5) + (-sin(1) * (z_1 - 1) ^ 2 + cos(5) * (-1) * (z_2 - 5) ^ 2) / 2! + (cos(1) * (-1) * (z_1 - 1) ^ 3 + -sin(5) * (-1) * (z_2 - 5) ^ 3) / 3! + (-sin(1) * (-1) * (z_1 - 1) ^ 4 + cos(5) * (-1) * (-1) * (z_2 - 5) ^ 4) / 4! + (cos(1) * (-1) * (-1) * (z_1 - 1) ^ 5 + -sin(5) * (-1) * (-1) * (z_2 - 5) ^ 5) / 5!
/// cos(5) + sin(1) + cos(1) * (z_1 - 1) + -sin(5) * (z_2 - 5) + (-sin(1) * (z_1 - 1) ^ 2 + -cos(5) * (z_2 - 5) ^ 2) / 2! + (-cos(1) * (z_1 - 1) ^ 3 + sin(5) * (z_2 - 5) ^ 3) / 3! + (sin(1) * (z_1 - 1) ^ 4 + cos(5) * (z_2 - 5) ^ 4) / 4! + (cos(1) * (z_1 - 1) ^ 5 + -sin(5) * (z_2 - 5) ^ 5) / 5!
/// ----------------------
/// Received cos(1)
/// Received x + -sin(1) * (y - 1)
/// Received cos(1) * (-1) * (y - 1) ^ 2 / 2!
/// Received (-x ^ 3 + -sin(1) * (-1) * (y - 1) ^ 3) / 3!
/// Received cos(1) * (-1) * (-1) * (y - 1) ^ 4 / 4!
/// Received (x ^ 5 + -sin(1) * (-1) * (-1) * (y - 1) ^ 5) / 5!
/// Received -cos(1) * (y - 1) ^ 2 / 2!
/// Received (-x ^ 3 + sin(1) * (y - 1) ^ 3) / 3!
/// Received cos(1) * (y - 1) ^ 4 / 4!
/// Received (x ^ 5 + -sin(1) * (y - 1) ^ 5) / 5!
/// </code>
/// </example>
public static Entity Maclaurin(Entity expr, int degree, params Variable[] exprVariables)
Expand Down Expand Up @@ -2769,23 +2769,23 @@ public static Entity Maclaurin(Entity expr, int degree, params Variable[] exprVa
/// x ^ 9 / 362880 - x ^ 7 / 5040 + x ^ 5 / 120 - x ^ 3 / 6 + x
/// ----------------------
/// sin(x) + cos(y)
/// 1 + (6 * x ^ 5 - 120 * x ^ 3) / 720 + x + (2 * y ^ 4 - 24 * y ^ 2) / 48
/// x ^ 5 / 120 - x ^ 3 / 6 + x + 1 + y ^ 4 / 24 - y ^ 2 / 2
/// ----------------------
/// sin(x) + cos(y)
/// sin(1) + cos(y) + cos(1) * (x - 1) + -sin(1) * (x - 1) ^ 2 / 2! + cos(1) * (-1) * (x - 1) ^ 3 / 3! + -sin(1) * (-1) * (x - 1) ^ 4 / 4! + cos(1) * (-1) * (-1) * (x - 1) ^ 5 / 5!
/// cos(y) + sin(1) + cos(1) * (x - 1) + -sin(1) * (x - 1) ^ 2 / 2! + -cos(1) * (x - 1) ^ 3 / 3! + sin(1) * (x - 1) ^ 4 / 4! + cos(1) * (x - 1) ^ 5 / 5!
/// ----------------------
/// sin(x) + cos(y)
/// sin(1) + cos(5) + cos(1) * (x - 1) + -sin(5) * (y - 5) + (-sin(1) * (x - 1) ^ 2 + cos(5) * (-1) * (y - 5) ^ 2) / 2! + (cos(1) * (-1) * (x - 1) ^ 3 + -sin(5) * (-1) * (y - 5) ^ 3) / 3! + (-sin(1) * (-1) * (x - 1) ^ 4 + cos(5) * (-1) * (-1) * (y - 5) ^ 4) / 4! + (cos(1) * (-1) * (-1) * (x - 1) ^ 5 + -sin(5) * (-1) * (-1) * (y - 5) ^ 5) / 5!
/// cos(5) + sin(1) + cos(1) * (x - 1) + -sin(5) * (y - 5) + (-sin(1) * (x - 1) ^ 2 + -cos(5) * (y - 5) ^ 2) / 2! + (-cos(1) * (x - 1) ^ 3 + sin(5) * (y - 5) ^ 3) / 3! + (sin(1) * (x - 1) ^ 4 + cos(5) * (y - 5) ^ 4) / 4! + (cos(1) * (x - 1) ^ 5 + -sin(5) * (y - 5) ^ 5) / 5!
/// ----------------------
/// sin(x) + cos(y)
/// sin(1) + cos(5) + cos(1) * (z_1 - 1) + -sin(5) * (z_2 - 5) + (-sin(1) * (z_1 - 1) ^ 2 + cos(5) * (-1) * (z_2 - 5) ^ 2) / 2! + (cos(1) * (-1) * (z_1 - 1) ^ 3 + -sin(5) * (-1) * (z_2 - 5) ^ 3) / 3! + (-sin(1) * (-1) * (z_1 - 1) ^ 4 + cos(5) * (-1) * (-1) * (z_2 - 5) ^ 4) / 4! + (cos(1) * (-1) * (-1) * (z_1 - 1) ^ 5 + -sin(5) * (-1) * (-1) * (z_2 - 5) ^ 5) / 5!
/// cos(5) + sin(1) + cos(1) * (z_1 - 1) + -sin(5) * (z_2 - 5) + (-sin(1) * (z_1 - 1) ^ 2 + -cos(5) * (z_2 - 5) ^ 2) / 2! + (-cos(1) * (z_1 - 1) ^ 3 + sin(5) * (z_2 - 5) ^ 3) / 3! + (sin(1) * (z_1 - 1) ^ 4 + cos(5) * (z_2 - 5) ^ 4) / 4! + (cos(1) * (z_1 - 1) ^ 5 + -sin(5) * (z_2 - 5) ^ 5) / 5!
/// ----------------------
/// Received cos(1)
/// Received x + -sin(1) * (y - 1)
/// Received cos(1) * (-1) * (y - 1) ^ 2 / 2!
/// Received (-x ^ 3 + -sin(1) * (-1) * (y - 1) ^ 3) / 3!
/// Received cos(1) * (-1) * (-1) * (y - 1) ^ 4 / 4!
/// Received (x ^ 5 + -sin(1) * (-1) * (-1) * (y - 1) ^ 5) / 5!
/// Received -cos(1) * (y - 1) ^ 2 / 2!
/// Received (-x ^ 3 + sin(1) * (y - 1) ^ 3) / 3!
/// Received cos(1) * (y - 1) ^ 4 / 4!
/// Received (x ^ 5 + -sin(1) * (y - 1) ^ 5) / 5!
/// </code>
/// </example>
public static Entity Taylor(Entity expr, int degree, params (Variable exprVariable, Entity point)[] exprVariables)
Expand Down Expand Up @@ -2858,23 +2858,23 @@ public static Entity Taylor(Entity expr, int degree, params (Variable exprVariab
/// x ^ 9 / 362880 - x ^ 7 / 5040 + x ^ 5 / 120 - x ^ 3 / 6 + x
/// ----------------------
/// sin(x) + cos(y)
/// 1 + (6 * x ^ 5 - 120 * x ^ 3) / 720 + x + (2 * y ^ 4 - 24 * y ^ 2) / 48
/// x ^ 5 / 120 - x ^ 3 / 6 + x + 1 + y ^ 4 / 24 - y ^ 2 / 2
/// ----------------------
/// sin(x) + cos(y)
/// sin(1) + cos(y) + cos(1) * (x - 1) + -sin(1) * (x - 1) ^ 2 / 2! + cos(1) * (-1) * (x - 1) ^ 3 / 3! + -sin(1) * (-1) * (x - 1) ^ 4 / 4! + cos(1) * (-1) * (-1) * (x - 1) ^ 5 / 5!
/// cos(y) + sin(1) + cos(1) * (x - 1) + -sin(1) * (x - 1) ^ 2 / 2! + -cos(1) * (x - 1) ^ 3 / 3! + sin(1) * (x - 1) ^ 4 / 4! + cos(1) * (x - 1) ^ 5 / 5!
/// ----------------------
/// sin(x) + cos(y)
/// sin(1) + cos(5) + cos(1) * (x - 1) + -sin(5) * (y - 5) + (-sin(1) * (x - 1) ^ 2 + cos(5) * (-1) * (y - 5) ^ 2) / 2! + (cos(1) * (-1) * (x - 1) ^ 3 + -sin(5) * (-1) * (y - 5) ^ 3) / 3! + (-sin(1) * (-1) * (x - 1) ^ 4 + cos(5) * (-1) * (-1) * (y - 5) ^ 4) / 4! + (cos(1) * (-1) * (-1) * (x - 1) ^ 5 + -sin(5) * (-1) * (-1) * (y - 5) ^ 5) / 5!
/// cos(5) + sin(1) + cos(1) * (x - 1) + -sin(5) * (y - 5) + (-sin(1) * (x - 1) ^ 2 + -cos(5) * (y - 5) ^ 2) / 2! + (-cos(1) * (x - 1) ^ 3 + sin(5) * (y - 5) ^ 3) / 3! + (sin(1) * (x - 1) ^ 4 + cos(5) * (y - 5) ^ 4) / 4! + (cos(1) * (x - 1) ^ 5 + -sin(5) * (y - 5) ^ 5) / 5!
/// ----------------------
/// sin(x) + cos(y)
/// sin(1) + cos(5) + cos(1) * (z_1 - 1) + -sin(5) * (z_2 - 5) + (-sin(1) * (z_1 - 1) ^ 2 + cos(5) * (-1) * (z_2 - 5) ^ 2) / 2! + (cos(1) * (-1) * (z_1 - 1) ^ 3 + -sin(5) * (-1) * (z_2 - 5) ^ 3) / 3! + (-sin(1) * (-1) * (z_1 - 1) ^ 4 + cos(5) * (-1) * (-1) * (z_2 - 5) ^ 4) / 4! + (cos(1) * (-1) * (-1) * (z_1 - 1) ^ 5 + -sin(5) * (-1) * (-1) * (z_2 - 5) ^ 5) / 5!
/// cos(5) + sin(1) + cos(1) * (z_1 - 1) + -sin(5) * (z_2 - 5) + (-sin(1) * (z_1 - 1) ^ 2 + -cos(5) * (z_2 - 5) ^ 2) / 2! + (-cos(1) * (z_1 - 1) ^ 3 + sin(5) * (z_2 - 5) ^ 3) / 3! + (sin(1) * (z_1 - 1) ^ 4 + cos(5) * (z_2 - 5) ^ 4) / 4! + (cos(1) * (z_1 - 1) ^ 5 + -sin(5) * (z_2 - 5) ^ 5) / 5!
/// ----------------------
/// Received cos(1)
/// Received x + -sin(1) * (y - 1)
/// Received cos(1) * (-1) * (y - 1) ^ 2 / 2!
/// Received (-x ^ 3 + -sin(1) * (-1) * (y - 1) ^ 3) / 3!
/// Received cos(1) * (-1) * (-1) * (y - 1) ^ 4 / 4!
/// Received (x ^ 5 + -sin(1) * (-1) * (-1) * (y - 1) ^ 5) / 5!
/// Received -cos(1) * (y - 1) ^ 2 / 2!
/// Received (-x ^ 3 + sin(1) * (y - 1) ^ 3) / 3!
/// Received cos(1) * (y - 1) ^ 4 / 4!
/// Received (x ^ 5 + -sin(1) * (y - 1) ^ 5) / 5!
/// </code>
/// </example>
public static Entity Taylor(Entity expr, int degree, params (Variable exprVariable, Variable polyVariable, Entity point)[] exprToPolyVars)
Expand Down Expand Up @@ -2948,23 +2948,23 @@ public static Entity Taylor(Entity expr, int degree, params (Variable exprVariab
/// x ^ 9 / 362880 - x ^ 7 / 5040 + x ^ 5 / 120 - x ^ 3 / 6 + x
/// ----------------------
/// sin(x) + cos(y)
/// 1 + (6 * x ^ 5 - 120 * x ^ 3) / 720 + x + (2 * y ^ 4 - 24 * y ^ 2) / 48
/// x ^ 5 / 120 - x ^ 3 / 6 + x + 1 + y ^ 4 / 24 - y ^ 2 / 2
/// ----------------------
/// sin(x) + cos(y)
/// sin(1) + cos(y) + cos(1) * (x - 1) + -sin(1) * (x - 1) ^ 2 / 2! + cos(1) * (-1) * (x - 1) ^ 3 / 3! + -sin(1) * (-1) * (x - 1) ^ 4 / 4! + cos(1) * (-1) * (-1) * (x - 1) ^ 5 / 5!
/// cos(y) + sin(1) + cos(1) * (x - 1) + -sin(1) * (x - 1) ^ 2 / 2! + -cos(1) * (x - 1) ^ 3 / 3! + sin(1) * (x - 1) ^ 4 / 4! + cos(1) * (x - 1) ^ 5 / 5!
/// ----------------------
/// sin(x) + cos(y)
/// sin(1) + cos(5) + cos(1) * (x - 1) + -sin(5) * (y - 5) + (-sin(1) * (x - 1) ^ 2 + cos(5) * (-1) * (y - 5) ^ 2) / 2! + (cos(1) * (-1) * (x - 1) ^ 3 + -sin(5) * (-1) * (y - 5) ^ 3) / 3! + (-sin(1) * (-1) * (x - 1) ^ 4 + cos(5) * (-1) * (-1) * (y - 5) ^ 4) / 4! + (cos(1) * (-1) * (-1) * (x - 1) ^ 5 + -sin(5) * (-1) * (-1) * (y - 5) ^ 5) / 5!
/// cos(5) + sin(1) + cos(1) * (x - 1) + -sin(5) * (y - 5) + (-sin(1) * (x - 1) ^ 2 + -cos(5) * (y - 5) ^ 2) / 2! + (-cos(1) * (x - 1) ^ 3 + sin(5) * (y - 5) ^ 3) / 3! + (sin(1) * (x - 1) ^ 4 + cos(5) * (y - 5) ^ 4) / 4! + (cos(1) * (x - 1) ^ 5 + -sin(5) * (y - 5) ^ 5) / 5!
/// ----------------------
/// sin(x) + cos(y)
/// sin(1) + cos(5) + cos(1) * (z_1 - 1) + -sin(5) * (z_2 - 5) + (-sin(1) * (z_1 - 1) ^ 2 + cos(5) * (-1) * (z_2 - 5) ^ 2) / 2! + (cos(1) * (-1) * (z_1 - 1) ^ 3 + -sin(5) * (-1) * (z_2 - 5) ^ 3) / 3! + (-sin(1) * (-1) * (z_1 - 1) ^ 4 + cos(5) * (-1) * (-1) * (z_2 - 5) ^ 4) / 4! + (cos(1) * (-1) * (-1) * (z_1 - 1) ^ 5 + -sin(5) * (-1) * (-1) * (z_2 - 5) ^ 5) / 5!
/// cos(5) + sin(1) + cos(1) * (z_1 - 1) + -sin(5) * (z_2 - 5) + (-sin(1) * (z_1 - 1) ^ 2 + -cos(5) * (z_2 - 5) ^ 2) / 2! + (-cos(1) * (z_1 - 1) ^ 3 + sin(5) * (z_2 - 5) ^ 3) / 3! + (sin(1) * (z_1 - 1) ^ 4 + cos(5) * (z_2 - 5) ^ 4) / 4! + (cos(1) * (z_1 - 1) ^ 5 + -sin(5) * (z_2 - 5) ^ 5) / 5!
/// ----------------------
/// Received cos(1)
/// Received x + -sin(1) * (y - 1)
/// Received cos(1) * (-1) * (y - 1) ^ 2 / 2!
/// Received (-x ^ 3 + -sin(1) * (-1) * (y - 1) ^ 3) / 3!
/// Received cos(1) * (-1) * (-1) * (y - 1) ^ 4 / 4!
/// Received (x ^ 5 + -sin(1) * (-1) * (-1) * (y - 1) ^ 5) / 5!
/// Received -cos(1) * (y - 1) ^ 2 / 2!
/// Received (-x ^ 3 + sin(1) * (y - 1) ^ 3) / 3!
/// Received cos(1) * (y - 1) ^ 4 / 4!
/// Received (x ^ 5 + -sin(1) * (y - 1) ^ 5) / 5!
/// </code>
/// </example>
public static IEnumerable<Entity> TaylorTerms(Entity expr, params (Variable exprVariable, Variable polyVariable, Entity point)[] exprToPolyVars)
Expand Down
Loading
Loading