# Algebrust
Algebrust is a high-performance linear algebra library for Rust, tailored for efficient mathematical operations on matrices and vectors. Leveraging the safety and expressiveness of Rust, Algebrust provides a reliable toolkit for numerical computing tasks in fields such as machine learning, scientific computing, and computer graphics.
## Features
- Vector addition, subtraction, dot product, scalar multiplication, magnitude, normalization, and cross product.
- Matrix addition, subtraction, multiplication, scalar multiplication, transpose, LU decomposition, determinant calculation, and inversion.
## Usage
To use Algebrust in your project, add it as a dependency in your `Cargo.toml` file. You can do this manually or by using the `cargo add` command.
### Using `cargo add`
```sh
cargo add algebrust
```
### Manually Editing `Cargo.toml`
Add the following line to your `Cargo.toml` under `[dependencies]`:
```t
[dependencies]
algebrust = "0.1.0"
```
## Usage
Here are some examples to get you started:
### Vectors
```rust
use algebrust::AlgebrustVector;
// Creating vectors
let v1 = AlgebrustVector::new(&[1.0, 2.0, 3.0]);
let v2 = AlgebrustVector::new_rand(3, 0.0, 10.0);
let v3 = AlgebrustVector::new_zeros(3);
// Vector operations
let v4 = v1.addition(&v2);
let v5 = v1.subtraction(&v2);
let dot = v1.dot_product(&v2);
let cross = v1.cross_product(&v2);
let scalar_mult = v1.scalar_multiplication(2.0);
let magnitude = v1.magnitude();
let normalized = v1.normalization();
```
### Matrices
```rust
use algebrust::AlgebrustMatrix;
// Creating matrices
let m1 = AlgebrustMatrix::new(&[
&[1.0, 2.0],
&[3.0, 4.0]
]);
let m2 = AlgebrustMatrix::new_rand((2, 2), 0.0, 10.0);
let m3 = AlgebrustMatrix::new_zeros((2, 2));
let m4 = AlgebrustMatrix::new_identitiy(2);
// Matrix operations
let m5 = m1.addition(&m2);
let m6 = m1.subtraction(&m2);
let m7 = m1.multiplication(&m2);
let scalar_mult = m1.scalar_multiplication(2.0);
let transpose = m1.transpose();
// LU decomposition and matrix inversion
let (l, u) = m1.lu_decomposition();
let inverse = m1.inverse();
let determinant = m1.determinant();
```
## Testing
To run tests, use the following command:
```sh
cargo test
```
## Contributing
Contributions are welcome! Please fork the repository and submit pull requests.
## License
This project is licensed under the MIT License - see the LICENSE.md file for details.