diffcalculus 0.1.6
A Python 3.x package that implements Differentiation and a whole other functionalities.
Requires Python: >=3
Keywords: python3,differentiation,calculus,diffcalculus,diff_calculus,differential calculus,DiffCalculus

# diffcalculus
A Python package that implements Differential Calculus.
It is also available on [GitHub](https://github.com/Programmin-in-Python/Differential-Calculus)

## Installation
***Please Note :- Requires Python Version 3.x***

**If there are 2 or more versions of Python installed in your system (which mostly occurs in UNIX/Linux systems) then please run any one of the commands in the BASH/ZSH Shell \:-**
```bash
$ pip3 install DiffCalculus
```
```bash
$ python3 -m pip install DiffCalculus
```

**If there is only Python 3.x installed in your system like in Windows systems then please run any one of commands in the Command Prompt \:-**
```cmd
>pip install DiffCalculus
```
```cmd
>python -m pip install DiffCalculus
```

## Quick Guide
***Please Read Till the End***

- Import the module using `import diffcalculus as dc`.
- `diffcalculus.functions.*` contains all the differentiable functions.
	- For functions of roots of x, please use `diffcalculus.functions.x(<exponent>)`, like
		- `diffcalculus.functions.x()` creates a **sqrt(x)** function.
		- `diffcalculus.functions.x(0.34)` creates a **cbrt(x)** function.

- `diffcalculus.differentiate()` differentiates the given function with respect to the variable x. Please Refer to [Differentiation of Functions](#simpleDiff) below.
- `diffcalculus.differentiateAtPoint()` differentiates the given function with respect to the variable x at the given point. Please Refer to [Differentiation of a Function at a particular point](#pointDiff) below.
- `diffcalculus.substitute` substitutes the given value for the variable x in the given function. Please Refer to [\'substitute\' Function Implementation](#subs) below.
- `diffcalculus.errors.*` contains all the Exceptions, which may occur during calculation.

## Sample Implementations
***Please Note :- Differentiation of all the functions happens with respect to the variable x only.***
<a name='simpleDiff'>
### 1. Differentiation of Functions :-
</a>

#### 1.1. Differentiation of Simple Functions

a) Differentiate sin(x)
```python3
import diffcalculus as dc

sin = dc.functions.sin()
print(dc.differentiate(sin))
```

b) Differentiate sin⁻¹(x)
```python3
import diffcalculus as dc

sin_inv = dc.functions.sinInv()
print(dc.differentiate(sin_inv))
```

c) Differentiate x² + 2x + 1
```python3
import diffcalculus as dc

poly = dc.functions.polynomial([1, 2], constant=1)
print(dc.differentiate(poly))
```

#### 1.2. Differentiation of Complex Functions :-
a) Differentiate sin(sqrt(x))
```python3
import diffcalculus as dc

sqrt_x = dc.functions.x()
func = dc.functions.sin(sqrt_x)

print(dc.differentiate(func))
```

b) Differentiate ln(3x³ + 2x² + 5x)
```python3
import diffcalculus as dc

poly = dc.functions.polynomial([3, 2, 5])
func = dc.functions.log(poly)

print(dc.differentiate(func))
```

c) Differentiate sin(x) + cos(x)
```python3
import diffcalculus as dc

sin = dc.functions.sin()
cos = dc.functions.cos()
func = a+b

print(dc.differentiate(func))
```

<a name='pointDiff'>

### 3. Differentiation of a Function at a particular point :-
</a>

a) **Differentiate sin(x) at x = π/2** _Result Should be 0_
```python3
import diffcalculus as dc
from math import pi

sin, point = dc.functions.sin(), pi/2

print(dc.differentiateAtPoint(sin, point))
```

b) **Differentiate sqrt(x) at x = 4**	_Result Should be 0.25_
```python3
import diffcalculus as dc

sqrt_x, point = dc.functions.x(), 4

print(dc.differentiateAtPoint(sqrt_x, point))
```

<a name='subs'>

## \'substitute\' Function Implementation \:-
</a>

**Besides Differentiation of Functions and also their Differentiation at a particular point; The Package also contains a 'substitute' Function which substitutes a value for the variable x in the given function.**

a) **The Value of sin(x) at x = π** _Result should be 0_
```python3
import diffcalculus as dc
from math import pi

sin, point = dc.functions.sin(), pi

print(dc.substitute(sin, point))
```
**Please Note \:-**

- For Trigonometric Functions, please pass angles in **RADIANS**, ***NOT IN DEGREES***; for an accurate and precise Result.
- Inverse Trigonometric Functions returns angles in **DEGREES** and ***NOT IN RADIANS*** for better understandability from the Output.

a) **The Value of 3x³ + 2x² + 5x + 10 at x = 2** _Result should be 52_
```python3
import diffcalculus as dc
from math import pi

poly, point = dc.functions.polynomial([3, 2, 5], constant=10), 2

print(dc.substitute(poly, point))
```