Numerical Analysis methods with Python (experimental)

# Numerica

My own experimental implementations of numerical methods as homework.
Use documentation to see how to use, and check test.py for real examples.

# Usage

python >= 3.8 is required

## Importing

import numerica as n
from numerica import f // function definition
from numerica import m // matrix definition


## Function Definition

f('expression')

fx = f('3x^2 + 2x + 3')
fx(2)


## Matrix Definition

m(
a11, a12, a13;
a21, a22, a23;
a31, a32, a33
)

matrix = m('1,2,3; 4,5,6; 7,8,9');


# Documentation

## 1- Solving Nonlinear Equations

### Root Bracketing Methods

#### Graph

n.nl_graph(fx, dx, epsilon, x)


#### Bisection

n.nl_bisection(fx, epsilon, a, b)


#### Regula-Falsi

n.nl_regulafalsi(fx, epsilon, a, b)


### Iterative Methods

#### Fixed-Point Iteration

n.nl_fixedpoint(hx, epsilon, x)


#### Newton-Raphson

n.nl_newtonraphson(fx, epsilon, x)


#### Secant

n.nl_secant(fx, epsilon, x0, x1)


## 2- Matrix Operations

### Basic Operations

#### Matrix Definition

m(
a11, a12, a13;
a21, a22, a23;
a31, a32, a33
)


#### Identity Matrix

n.m_id(n)


#### Size of Matrix

(m, n) = n.m_size(A)


#### Transpose of a Matrix

n.m_transpose(A)


### Finding Inverse of a Matrix

#### Gauss-Jordan Method

n.mi_gaussjordan(A)


### Matrix Utils

#### Concat Matrices by Row (Horizontal)

n.m_rowconcat(A, B)


#### Concat Matrices by Column (Vertical)

n.m_colconcat(A, B)


#### Map a Row of Matrix

n.m_rowmap(A, i, iteratee)


#### Map all Matrix Cells

n.m_cellmap(A, iteratee)


#### Is Matrix Check

n.is_matrix(A)


#### Slice Matrix Vertically

n.m_rowslice(A, start, stop, step)


## 3- Solving Systems of Linear Equations

### Gauss Elimination

n.ls_gauss(A, C)


### Jacobi

n.ls_jacobi(A, C, X, epsilon=0.001)


### Gauss-Seidel

n.ls_gaussseidel(A, C, X, epsilon=0.001)


## 5- Numerical Integration

### Trapezoidal

n.itg_trapezoidal(fx, x0, xn, n)


### Simpson

n.itg_simpson(fx, x0, xn, n)


## 6- Numerical Differentiation

### Euler Methods

#### Backward

n.diff_backward(fx, x)


#### Forward

n.diff_forward(fx, x)


#### Midpoint

n.diff_midpoint(fx, x)


## 7- Finite Differences

### Determine Degree of a Polynomial

n.fd_degree(pair_tuples)
n.fd_degree([(x0,y0), (x1,y1), (x2,y3), ...])


## 8- Interpolation

### Lagrange

n.itp_lagrange(pair_tuples)
n.itp_lagrange([(x0,y0), (x1,y1), (x2,y3), ...], x)


## 9- Regression

### Least Squares

n.reg_leastsquares(pair_tuples)
n.reg_leastsquares([(x0,y0), (x1,y1), (x2,y3), ...], x, deg)


# Testing Package

##### Test Directly as Script
python3.8 -m numerica

##### or Install Package Locally (from repo root dir)
pip3.8 install .

##### and Test It from REPL
import numerica as n
# ...

##### or Use test.py Interactively
python3.8 -i test.py
# ...

##### or Just Test and Exit
python3.8 test.py


##### Install Twine
pip3.8 install twine

##### Build
rm -rf build & rm -rf dist & rm -rf numerica.egg-info
python3.8 setup.py sdist bdist_wheel

twine upload dist/*


## Project details

Uploaded source
Uploaded py3