use plotpy::{Curve, Legend, Plot};
use russell_lab::math::GOLDEN_RATIO;
use russell_lab::*;
const OUT_DIR: &str = "/tmp/russell_lab/";
fn main() -> Result<(), StrError> {
let np = 201;
let xx = Vector::linspace(-1.0, 1.0, np)?;
let mut plot_yy = Plot::new();
let mut plot_gg = Plot::new();
let mut plot_hh = Plot::new();
for n in 0..5 {
let yy = xx.get_mapped(|x| math::chebyshev_tn(n, x));
let gg = xx.get_mapped(|x| math::chebyshev_tn_deriv1(n, x));
let hh = xx.get_mapped(|x| math::chebyshev_tn_deriv2(n, x));
let mut curve_yy = Curve::new();
let mut curve_gg = Curve::new();
let mut curve_hh = Curve::new();
curve_yy.set_label(&format!("$T_{}$", n));
curve_gg.set_label(&format!("$\\frac{{dT_{}}}{{dx}}$", n));
curve_hh.set_label(&format!("$\\frac{{d^2T_{}}}{{dx^2}}$", n));
curve_yy.draw(xx.as_data(), yy.as_data());
curve_gg.draw(xx.as_data(), gg.as_data());
curve_hh.draw(xx.as_data(), hh.as_data());
plot_yy.add(&curve_yy);
plot_gg.add(&curve_gg);
plot_hh.add(&curve_hh);
}
let path = format!("{}/math_chebyshev_functions_tn.svg", OUT_DIR);
let mut legend = Legend::new();
legend.set_outside(true).set_num_col(5);
legend.draw();
plot_yy
.add(&legend)
.grid_and_labels("$x$", "$T_n(x)$")
.set_figure_size_points(GOLDEN_RATIO * 280.0, 280.0)
.save(&path)?;
let path = format!("{}/math_chebyshev_functions_dtn.svg", OUT_DIR);
let mut legend = Legend::new();
legend.set_outside(true).set_num_col(5);
legend.draw();
plot_gg
.add(&legend)
.grid_and_labels("$x$", "$\\frac{dT_n(x)}{dx}$")
.set_figure_size_points(GOLDEN_RATIO * 280.0, 280.0)
.save(&path)?;
let path = format!("{}/math_chebyshev_functions_d2tn.svg", OUT_DIR);
let mut legend = Legend::new();
legend.set_outside(true).set_num_col(5);
legend.draw();
plot_hh
.add(&legend)
.grid_and_labels("$x$", "$\\frac{dT^2_n(x)}{dx^2}$")
.set_figure_size_points(GOLDEN_RATIO * 280.0, 280.0)
.save(&path)?;
Ok(())
}