research-complexity.rs
1.4 kB · rust · 47 lines
1use mrlycore::errors::Result;2use mrlyfig::{ink, plot, save, Board};3use mrlymath::two::designs;4use mrlymath::two::graph::core_graph;5use mrlynum::spectrum::{laplacian_spectrum, multiplicity};67const LEVEL: usize = 6;89fn main() -> Result<()> {10 let cell = designs::create(7, 2, LEVEL, 0, 2)?;11 let network = core_graph(&cell)?;12 let mut values = laplacian_spectrum(&network, true)?;13 values.sort_by(|a, b| a.partial_cmp(b).unwrap());14 let count = values.len();15 let ones = multiplicity(&values, 1.0, 1e-9);16 assert_eq!(count, 729);17 assert_eq!(ones, 243);1819 let mut board = Board::square();20 let frame = board.frame(0.08);21 plot::axis(&mut board, frame, ink::line());22 let total = count as f64;23 let at = |lambda: f64, rank: f64| {24 (25 frame.x + frame.w * lambda / 2.0,26 frame.y + frame.h * (1.0 - rank / total),27 )28 };29 let mut steps = Vec::with_capacity(2 * count + 2);30 steps.push(at(0.0, 0.0));31 for (index, value) in values.iter().enumerate() {32 steps.push(at(*value, index as f64));33 steps.push(at(*value, index as f64 + 1.0));34 }35 steps.push(at(2.0, total));36 board.polyline(&steps, 3.0, ink::blue());3738 let below = values.iter().filter(|v| **v < 1.0 - 1e-9).count() as f64;39 board.segment(40 at(1.0, below),41 at(1.0, below + ones as f64),42 7.0,43 ink::yellow(),44 );45 save("research-complexity", &board)?;46 Ok(())47}