Series Expansions

Expand functions as infinite series for numerical approximation and analysis.

📐

Mathematical Definition

Taylor's Theorem: If f(x)f(x) is infinitely differentiable at x=ax = a, then:

f(x)=n=0f(n)(a)n!(xa)nf(x) = \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!} (x - a)^n

Expanded form:

f(x)=f(a)+f(a)(xa)+f(a)2!(xa)2+f(a)3!(xa)3+f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^2 + \frac{f'''(a)}{3!}(x-a)^3 + \cdots

Maclaurin Series (Special Case: a = 0):

f(x)=n=0f(n)(0)n!xnf(x) = \sum_{n=0}^{\infty} \frac{f^{(n)}(0)}{n!} x^n

Common Series: - ex=1+x+x22!+x33!+e^x = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots - sin(x)=xx33!+x55!\sin(x) = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \cdots - cos(x)=1x22!+x44!\cos(x) = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \cdots - ln(1+x)=xx22+x33\ln(1+x) = x - \frac{x^2}{2} + \frac{x^3}{3} - \cdots for x<1|x| < 1

Radius of Convergence (RR): The series converges for xa<R|x - a| < R and may diverge for xa>R|x - a| > R.

Code Examples

Maclaurin Series (Expansion at x=0)

Standard functions at x = 0

use mathhook::prelude::*;
use mathhook_core::calculus::SeriesExpansion;

let x = symbol!(x);

// exp(x) = 1 + x + x²/2! + x³/3! + ...
let exp_series = expr!(exp(x)).taylor_series(&x, &expr!(0), 5);
// Result: 1 + x + x²/2 + x³/6 + x⁴/24 + x⁵/120

// sin(x) = x - x³/3! + x⁵/5! - ...
let sin_series = expr!(sin(x)).taylor_series(&x, &expr!(0), 7);
// Result: x - x³/6 + x⁵/120 - x⁷/5040

// cos(x) = 1 - x²/2! + x⁴/4! - ...
let cos_series = expr!(cos(x)).taylor_series(&x, &expr!(0), 6);
// Result: 1 - x²/2 + x⁴/24 - x⁶/720

Taylor Series at Arbitrary Points

Expand around any point a

use mathhook::prelude::*;
use mathhook_core::calculus::SeriesExpansion;

let x = symbol!(x);

// sin(x) at x = π/2:
// sin(x) = 1 - (x-π/2)²/2! + (x-π/2)⁴/4! - ...
let sin_at_pi_2 = expr!(sin(x)).taylor_series(&x, &Expression::pi_over_2(), 5);

// exp(x) at x = 1:
// exp(x) = e + e(x-1) + e(x-1)²/2! + ...
let exp_at_1 = expr!(exp(x)).taylor_series(&x, &expr!(1), 5);

// ln(x) at x = 1:
// ln(x) = (x-1) - (x-1)²/2 + (x-1)³/3 - ...
let log_at_1 = expr!(log(x)).taylor_series(&x, &expr!(1), 5);

Laurent Series (Negative Powers)

For functions with singularities

use mathhook::prelude::*;
use mathhook_core::calculus::SeriesExpansion;

let x = symbol!(x);

// 1/x near x = 0 (pole of order 1)
let pole = expr!(1 / x);
let laurent = pole.laurent_series(&x, &expr!(0), -1, 5);
// Result: x⁻¹ (principal part only)

// exp(1/x) at x = 0:
// exp(1/x) = 1 + 1/x + 1/(2!x²) + ...
let exp_pole = expr!(exp(1 / x));
let laurent2 = exp_pole.laurent_series(&x, &expr!(0), -10, 0);
// Result: 1 + x⁻¹ + x⁻²/2 + x⁻³/6 + ...

🔗 Related Topics