# NumCalcJs

Simple Numerical Calculus in JavaScript! A bunch of utility function I made that I decided to compile into a library.

## Install

Head over to the NumCalcJS directory and grab the minified or the regular version and add it to your project.

## Usage

### Maximum and Minimum

`NumCalc.maximum(f,a,b,error)`

Return the x value of the maximum of a function `f` over a given interval `a,b` with an optional `error` argument using the Golden Section Search. Default error `1e-4`

`NumCalc.minimum(f,a,b,error)`

Return the x value of the minimum of a function `f` over a given interval `a,b` with an optional `error` argument using the Golden Section Search. Default error `1e-4`

```function f(x){
return Math.sin(x)
}
console.log(NumCalc.maximum(f,1.3,5.6),NumCalc.minimum(f,1.3,5.6)) //1.57079... 4.71239...```

### FDerivative

`NumCalc.FDerivative(f,n)`

Returns the nth derivative of `f` as a callable function. High order derivatives will lose precision due to floating point roud off. This is countered by using Machine Epsilon but is not 100% perfect.

```function f(x){
return Math.sin(x) * Math.sqrt(1+x**2)
}
let derivative = NumCalc.FDerivative(f,4) //4th derivative of f
console.log(derivative(3.53)) //2.27...```

### NIntegrate

`NumCalc.NIntegrate(f,a,b,error)`

Computes the definite integral of `f` over a given interval `a,b` using Simpson’s Rule and the 4th derivative of `f` to choose the number of partitions used using `error`. It can handle improper integrals too using bounds of `Infinity` or `-Infinity` Default error `1e-4`. Likely to fail if the bounds contain an asymptote

```function f(x){
return Math.exp(-(x**2)) // Gaussian bump
}

console.log(NumCalc.NIntegrate(f,0,Infinity)) //0.88622...
console.log(NumCalc.NIntegrate(f,-Infinity,Infinity)) //1.77245...
console.log(NumCalc.NIntegrate(f,-Infinity,0)) //0.88622...
console.log(NumCalc.NIntegrate(f,-2.2,0.2)) //1.081941...```

## Notes

This library is not meant to be perfect or super efficient so expect bugs. You can make an issue and I’ll try to fix it in a later release.

View Github