14 use alg_tools::lingrid::LinGrid; |
14 use alg_tools::lingrid::LinGrid; |
15 use alg_tools::mapping::RealMapping; |
15 use alg_tools::mapping::RealMapping; |
16 use alg_tools::loc::Loc; |
16 use alg_tools::loc::Loc; |
17 use alg_tools::bisection_tree::Bounds; |
17 use alg_tools::bisection_tree::Bounds; |
18 use alg_tools::maputil::map4; |
18 use alg_tools::maputil::map4; |
19 use alg_tools::tabledump::write_csv; |
19 use alg_tools::tabledump::{write_csv, TableDump}; |
20 use crate::measures::*; |
20 use crate::measures::*; |
21 |
21 |
22 /// Default RGB ramp from [`colorbrewer`]. |
22 /// Default RGB ramp from [`colorbrewer`]. |
23 /// |
23 /// |
24 /// This is a tuple of parameters to [`colorbrewer::get_color_ramp`]. |
24 /// This is a tuple of parameters to [`colorbrewer::get_color_ramp`]. |
76 let end = grid.end[0].as_(); |
76 let end = grid.end[0].as_(); |
77 let m = μ.iter_masses().fold(F::ZERO, |m, α| m.max(α)); |
77 let m = μ.iter_masses().fold(F::ZERO, |m, α| m.max(α)); |
78 let s = μ.iter_masses().fold(F::ZERO, |m, α| m.add(α)); |
78 let s = μ.iter_masses().fold(F::ZERO, |m, α| m.add(α)); |
79 let mut spike_scale = F::ONE; |
79 let mut spike_scale = F::ONE; |
80 |
80 |
|
81 μ.write_csv(format!("{filename}_mu.txt").into()).expect("CSV save error"); |
|
82 |
81 let mut plotter = poloto::plot( |
83 let mut plotter = poloto::plot( |
82 "f", "x", |
84 "f", "x", |
83 format!("f(x); spike max={:.4}, n={}, ∑={:.4}", m, μ.len(), s) |
85 format!("f(x); spike max={:.4}, n={}, ∑={:.4}", m, μ.len(), s) |
84 ).move_into(); |
86 ).move_into(); |
85 |
87 |
86 if let Some(ω) = ω0 { |
88 if let Some(ω) = ω0 { |
87 let graph_ω = grid.into_iter().map(|x@Loc([x0]) : Loc<F, 1>| { |
89 let graph_ω = grid.into_iter().map(|x@Loc([x0]) : Loc<F, 1>| { |
88 [x0.as_(), ω.apply(&x).as_()] |
90 [x0.as_(), ω.apply(&x).as_()] |
89 }); |
91 }); |
90 plotter.line(ω_explanation.as_str(), graph_ω.clone()); |
92 plotter.line(ω_explanation.as_str(), graph_ω.clone()); |
91 // let csv_f = format!("{}.txt", filename); |
93 write_csv(graph_ω, format!("{filename}_omega.txt")).expect("CSV save error"); |
92 // write_csv(graph_ω, csv_f).expect("CSV save error"); |
|
93 } |
94 } |
94 |
95 |
95 let graph_g = grid.into_iter().map(|x@Loc([x0]) : Loc<F, 1>| { |
96 let graph_g = grid.into_iter().map(|x@Loc([x0]) : Loc<F, 1>| { |
96 [x0.as_(), g.apply(&x).as_()] |
97 [x0.as_(), g.apply(&x).as_()] |
97 }); |
98 }); |
98 plotter.line(g_explanation.as_str(), graph_g.clone()); |
99 plotter.line(g_explanation.as_str(), graph_g.clone()); |
99 // let csv_f = format!("{}.txt", filename); |
100 write_csv(graph_g, format!("{filename}_g.txt")).expect("CSV save error"); |
100 // write_csv(graph_g, csv_f).expect("CSV save error"); |
|
101 |
101 |
102 bnd0.map(|bnd| { |
102 bnd0.map(|bnd| { |
103 let upperb = bnd.upper().as_(); |
103 let upperb = bnd.upper().as_(); |
104 let lowerb = bnd.lower().as_(); |
104 let lowerb = bnd.lower().as_(); |
105 let upper : [[f64; 2]; 2] = [[start, upperb], [end, upperb]]; |
105 let upper : [[f64; 2]; 2] = [[start, upperb], [end, upperb]]; |
106 let lower = [[start, lowerb], [end, lowerb]]; |
106 let lower = [[start, lowerb], [end, lowerb]]; |
107 spike_scale *= bnd.upper(); |
107 spike_scale *= bnd.upper(); |
|
108 |
|
109 write_csv([[lowerb, upperb]].into_iter(), |
|
110 format!("{filename}_bounds.txt")).expect("CSV save error"); |
108 |
111 |
109 plotter.line("upper bound", upper) |
112 plotter.line("upper bound", upper) |
110 .line("lower bound", lower) |
113 .line("lower bound", lower) |
111 .ymarker(lowerb) |
114 .ymarker(lowerb) |
112 .ymarker(upperb); |
115 .ymarker(upperb); |