# ExMatrix
`ExMatrix` is a new Matrix library for Elixir. This library helps you to create a matrix,
`manipulate` it with values and `add/subtract` two matrices.
## What is a Matrix
A matrix is a collection of numbers arranged into a fixed number of rows and columns.
Here is an example of a `3x2` matrix which means that we have `3 rows` and `2 columns`.
```
col 1 col 2
row 1 | 0 1 |
row 2 | 2 7 |
row 3 | 9 0 |
```
This is `row 2`
```
| 2 7 |
```
This is `col 2`
```
col 2
| 1 |
| 7 |
| 0 |
```
To get value from the above matrix we need to specify the row and colum that we need to get
the value from. The known syntax is `(number_of_rows,number_of_columns)`
`(0,1) = 1` and `(2,0) = 9`
## Installation
First, add ExMatrix to your mix.exs dependencies:
```elixir
def deps do
[
{:ex_matrix, "~> 0.1.0"}
]
end
```
Then, update your dependencies:
```elixir
$ mix deps.get
```
## Elixir Matrix
So to generate an elixir matrix you can use `ExMatrix.create("RowsxColumns")`
will generate a map that can be used as a matrix
But note that `ExMatrix.create(...)` will generate an empty matrix as you can see in the example
```elixir
iex> matrix = ExMatrix.create("3x2")
%{"0" => %{"0" => "", "1" => ""},
"1" => %{"0" => "", "1" => ""},
"2" => %{"0" => "", "1" => ""}
}
```
So to fill this matrix with values you can use `ExMatrix.set_matrix(matrix,data)`
```elixir
matrix = %{"0" => %{"0" => "0", "1" => "1"},
"1" => %{"0" => "2", "1" => "7"},
"2" => %{"0" => "9", "1" => "0"}
}
```
Now you can get values `matrix["0"]["1"] = 1` and `matrix["2"]["0"] = 9`.
## Adding or Subtracting two matrices
There are many operation that you can apply on matrices and one of these operations is to add
and subtract two matrices.
Small review on how we deal with addition and subtraction of two matrices:
```
Matrix A + Matrix B = Result
| 0 1 | | 1 -1 | | 1 0 |
| 2 7 | | 7 -2 | | 9 5 |
| 9 0 | | -1 8 | | 8 8 |
```
You can use `ExMatrix.add_matrices(matrix_1,matrix_2)` or `ExMatrix.sub_matrices(matrix_1,matrix_2)`
## Example Function
In case that there is something vague please use a helper function
```elixir
iex> ExMatrix.example("2x2")
%{"0" => %{"0" => "(0,0)", "1" => "(0,1)"},
"1" => %{"0" => "(1,0)", "1" => "(1,1)"}
}
```
## What's Next
This library will be extend to have the ability to:
1. Add or subtract two or more matrices
1. Multiply and Divide two or more matrices
1. Matrix Transpose
## For contribution on GitHub
Please read the contribution requirements before start working
## Copyright and License
Copyright (c) 2018, Jad Tarabay.
ExMatrix source code is licensed under the [MIT License](LICENSE).