Crates.io | mathru |
lib.rs | mathru |
version | 0.15.4 |
source | src |
created_at | 2018-11-18 18:27:29.160167 |
updated_at | 2024-09-08 16:50:54.02237 |
description | Fundamental algorithms for scientific computing in Rust |
homepage | https://rustmath.gitlab.io/mathru |
repository | https://gitlab.com/rustmath/mathru |
max_upload_size | |
id | 97474 |
size | 1,563,256 |
Mathru is a numeric library containing algorithms for linear algebra, analysis ,statistics and optimization written in pure Rust with optional BLAS/LAPACK as backend.
The following features are implemented in this create:
Analysis
Elementary functions
Add this to your Cargo.toml
for the native Rust implementation:
[dependencies.mathru]
version = "0.15"
Add the following lines to 'Cargo.toml' if the openblas library should be used:
[dependencies.mathru]
version = "0.15"
default-features = false
features = "openblas"
One of the following implementations for linear algebra can be activated as a feature:
native: Native Rust implementation(activated by default)
openblas: Optimized BLAS library
netlib: Collection of mathematical software, papers, and databases
intel-mkl: Intel Math Kernel Library
accelerate Make large-scale mathematical computations and image calculations, optimized for high performance and low-energy consumption.(macOS only)
use mathru::{
algebra::linear::{
matrix::{LUDec, Solve},
General, Vector,
},
matrix, vector,
};
/// Solves a system of linear equations
fn main()
{
let a: General<f64> = matrix![6.0, 2.0, -1.0;
-3.0, 5.0, 3.0;
-2.0, 1.0, 3.0];
let b: Vector<f64> = vector![48.0;
49.0;
24.0];
// Decompose a into a lower and upper matrix
let lu_dec: LUDec<f64> = a.dec_lu().unwrap();
// Solve the system of linear equations with the decomposed matrix
let _x1: Vector<f64> = lu_dec.solve(&b).unwrap();
// Solve it directly
let _x2: Vector<f64> = a.solve(&b).unwrap();
}
use mathru::{
algebra::linear::vector::Vector,
analysis::differential_equation::ordinary::{problem, DormandPrince54, ExplicitODE},
};
fn main()
{
// Create an ODE instance
let problem: problem::Euler<f64> = problem::Euler::default();
let (x_start, x_end) = problem.time_span();
// Create a ODE solver instance
let h_0: f64 = 0.0001;
let n_max: u32 = 800;
let abs_tol: f64 = 10e-7;
let solver: DormandPrince54<f64> = DormandPrince54::new(abs_tol, h_0, n_max);
// Solve ODE
let (x, y): (Vec<f64>, Vec<Vector<f64>>) = solver.solve(&problem).unwrap();
}
For further examples, see project page
See project page for more information and examples. The API is documented on docs.rs.
Licensed under
Any contribution is welcome!