Basic Usage

Creating Symbolic Variables

Before integrating, you need to create symbolic variables using Symbolics.jl:

using SymbolicIntegration, Symbolics

@variables x y z

The integrate Function

The main function for symbolic integration uses method dispatch to choose algorithms:

# Default method (RischMethod)
integrate(expr, var)

# Explicit method selection
integrate(expr, var, method)
# Basic polynomial integration
integrate(x, x)      # (1//2)*(x^2)
integrate(x^2, x)    # (1//3)*(x^3)  
integrate(x^3, x)    # (1//4)*(x^4)

# Rational functions
integrate(1/x, x)    # log(x)
integrate(1/(1+x), x) # log(1 + x)

Supported Function Types

Polynomials

integrate(3*x^2 + 2*x + 1, x)  # x^3 + x^2 + x

Rational Functions

integrate((2*x + 1)/(x^2 + x + 1), x)  # log(1 + x + x^2)
integrate(1/(1 + x^2), x)              # atan(x)

Exponential Functions

integrate(exp(x), x)      # exp(x)
integrate(x*exp(x), x)    # -exp(x) + x*exp(x)

Logarithmic Functions

integrate(log(x), x)      # -x + x*log(x)
integrate(1/(x*log(x)), x) # log(log(x))

Trigonometric Functions

integrate(sin(x), x)   # -cos(x)
integrate(cos(x), x)   # sin(x)  
integrate(tan(x), x)   # -log(cos(x))

Method Selection

SymbolicIntegration.jl supports multiple integration methods through method dispatch:

Default Method (RischMethod)

# These are equivalent
integrate(f, x)
integrate(f, x, RischMethod())

Method Configuration

# Configure method behavior
risch_exact = RischMethod(use_algebraic_closure=true, catch_errors=false)
integrate(1/(x^2 + 1), x, risch_exact)  # atan(x) with strict error handling

risch_robust = RischMethod(use_algebraic_closure=true, catch_errors=true)  
integrate(difficult_function, x, risch_robust)  # Graceful error handling

Method Comparison

# For exact results with full complex root handling
integrate(f, x, RischMethod(use_algebraic_closure=true))

# For faster computation (may miss some arctangent terms)
integrate(f, x, RischMethod(use_algebraic_closure=false))

See the Integration Methods section for complete details on available methods and their capabilities.

Error Handling

SymbolicIntegration.jl will throw appropriate errors for unsupported cases:

using SymbolicIntegration, Symbolics
@variables x

# This will throw NotImplementedError for algebraic functions
integrate(sqrt(x), x)  # Error: algebraic functions not supported

# This will throw AlgorithmFailedError if no elementary form exists  
integrate(exp(x^2), x)  # Error: no elementary antiderivative

Options

The integrate function accepts several optional parameters:

integrate(expr, var; 
    useQQBar=false,                    # Use algebraic closure for roots
    catchNotImplementedError=true,     # Catch implementation errors
    catchAlgorithmFailedError=true     # Catch algorithm failures
)