peroxide/macros/
matlab_macro.rs

1/// MATLAB like zeros - zero matrix
2///
3/// # Examples
4/// ```
5/// #[macro_use]
6/// extern crate peroxide;
7/// use peroxide::fuga::*;
8///
9/// fn main() {
10///     let a = zeros!(4);
11///     assert_eq!(a, c!(0,0,0,0));
12///
13///     let b = zeros!(3, 2);
14///     assert_eq!(b, matrix(c!(0,0,0,0,0,0), 3, 2, Row));
15/// }
16/// ```
17#[macro_export]
18macro_rules! zeros {
19    ( $n:expr ) => {
20        vec![0f64; $n]
21    };
22
23    ( $r:expr, $c:expr ) => {{
24        let (r, c) = ($r, $c);
25        matrix(vec![0f64; r * c], r, c, Row)
26    }};
27}
28
29/// MATLAB like rand - random matrix
30///
31/// # Examples
32/// ```
33/// #[macro_use]
34/// extern crate peroxide;
35/// use peroxide::fuga::*;
36///
37/// fn main() {
38///     let a = rand!(2, 2);
39///     println!("{}", a);  // 2 x 2 random matrix (0 ~ 1)
40/// }
41/// ```
42#[macro_export]
43macro_rules! rand {
44    () => {{
45        let mut rng = rand::rng();
46        rng.random_range(0f64..=1f64)
47    }};
48
49    ( $m:expr, $n:expr ) => {{
50        let r = $m;
51        let c = $n;
52        let mut rng = rand::rng();
53        let mut m = matrix(vec![0f64; r * c], r, c, Row);
54        for i in 0..r {
55            for j in 0..c {
56                m[(i, j)] = rng.random_range(0f64..=1f64);
57            }
58        }
59        m
60    }};
61}
62
63/// MATLAB like eye - identity matrix
64///
65/// # Examples
66///
67/// ```
68/// #[macro_use]
69/// extern crate peroxide;
70/// use peroxide::fuga::*;
71///
72/// fn main() {
73///     let i = eye!(2);
74///     assert_eq!(i, matrix(c!(1,0,0,1), 2, 2, Row));
75/// }
76/// ```
77#[macro_export]
78macro_rules! eye {
79    ( $n:expr ) => {{
80        let n = $n;
81        let mut m = matrix(vec![0f64; n * n], n, n, Row);
82        for i in 0..n {
83            m[(i, i)] = 1f64;
84        }
85        m
86    }};
87}
88
89/// MATLAB like linspace
90///
91/// # Examples
92/// ```
93/// #[macro_use]
94/// extern crate peroxide;
95/// use peroxide::fuga::*;
96///
97/// fn main() {
98///     let a = linspace!(1, 10, 10);
99///     assert_eq!(a, seq!(1,10,1));
100/// }
101/// ```
102/// ```
103/// #[macro_use]
104/// extern crate peroxide;
105/// use peroxide::fuga::*;
106///
107/// fn main() {
108///     let a = linspace!(10, 1000);
109///     assert_eq!(a, seq!(10,1000,10));
110/// }
111/// ```
112#[macro_export]
113macro_rules! linspace {
114    ( $start:expr, $end:expr, $length: expr) => {{
115        let step = ($end - $start) as f64 / ($length as f64 - 1f64);
116        seq!($start, $end, step)
117    }};
118
119    ( $start:expr, $end:expr ) => {{
120        let step = ($end - $start) as f64 / (99f64);
121        seq!($start, $end, step)
122    }};
123}