Struct curve_sampling::Fun
source · pub struct Fun<F> { /* private fields */ }
Expand description
Options for sampling graphs of functions ℝ → ℝ.
See Sampling::fun
.
Implementations§
source§impl<F> Fun<F>where
F: FnMut(f64) -> f64,
impl<F> Fun<F>where F: FnMut(f64) -> f64,
sourcepub fn n(self, n: usize) -> Self
pub fn n(self, n: usize) -> Self
Set the maximum number of evaluations of the function
to build the sampling. Panic if n < 2
.
Examples found in repository?
More examples
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
fn main() -> R {
let mut fh = File::create("/tmp/sin_inv_x.gp")?;
write!(fh, "set terminal pngcairo\n\
set grid\n")?;
let mut d = 0;
let mut save = |s: &Sampling, n, title| -> R {
d += 1;
let fname = format!("/tmp/sin_inv_x{}.dat", d);
s.write(&mut File::create(&fname)?)?;
write!(fh, "set output \"sin_inv_x{}.png\"\n\
plot '{}' with l lt 1 lw 2 title \"{} ({} pts)\"\n",
d, &fname, title, n)?;
write!(fh, "set output \"sin_inv_x{}_p.png\"\n\
plot '{}' with l lt 5 lw 2 title \"{}\", \
'{}' with p lt 3 pt 5 ps 0.2 title \"points ({})\"\n",
d, &fname, title, &fname, n)?;
Ok(())
};
let f = |x: f64| x * (1. / x).sin();
let s = Sampling::fun(f, -0.4, 0.4).n(227).build();
save(&s, 227, "x sin(1/x)")?;
let s = Sampling::fun(f, -0.4, 0.4).n(389).build();
save(&s, 389, "x sin(1/x)")?;
let s = Sampling::fun(|x: f64| (1. / x).sin(), -0.4, 0.4).n(391).build();
save(&s, 391, "sin(1/x)")?;
Ok(())
}
sourcepub fn viewport(self, vp: BoundingBox) -> Self
pub fn viewport(self, vp: BoundingBox) -> Self
Set the zone of interest for the sampling. Segments that end up outside this box will not be refined.
sourcepub fn init<'a, I>(self, ts: I) -> Selfwhere
I: IntoIterator<Item = &'a f64>,
pub fn init<'a, I>(self, ts: I) -> Selfwhere I: IntoIterator<Item = &'a f64>,
Add initial values of t
such that f(t)
(see [Sampling :: fun
]) must be included into the sampling in addition to
the n
evaluations. Only the values between a
and
b
are taken into account (other values are ignored).
sourcepub fn init_pt<'a, I>(self, pts: I) -> Selfwhere
I: IntoIterator<Item = &'a (f64, f64)>,
pub fn init_pt<'a, I>(self, pts: I) -> Selfwhere I: IntoIterator<Item = &'a (f64, f64)>,
Add initial points (t, f(t))
to include into the
sampling in addition to the n
evaluations. This
allows you to use previous evaluations of f
. Only
the couples with first coordinate t
between a
and
b
(see [Sampling :: fun
]) are considered (other values are ignored).
source§impl<F> Fun<F>where
F: FnMut(f64) -> f64,
impl<F> Fun<F>where F: FnMut(f64) -> f64,
sourcepub fn build(self) -> Sampling
pub fn build(self) -> Sampling
Return the sampling.
Examples found in repository?
More examples
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
fn main() -> R {
let mut fh = File::create("/tmp/sin_inv_x.gp")?;
write!(fh, "set terminal pngcairo\n\
set grid\n")?;
let mut d = 0;
let mut save = |s: &Sampling, n, title| -> R {
d += 1;
let fname = format!("/tmp/sin_inv_x{}.dat", d);
s.write(&mut File::create(&fname)?)?;
write!(fh, "set output \"sin_inv_x{}.png\"\n\
plot '{}' with l lt 1 lw 2 title \"{} ({} pts)\"\n",
d, &fname, title, n)?;
write!(fh, "set output \"sin_inv_x{}_p.png\"\n\
plot '{}' with l lt 5 lw 2 title \"{}\", \
'{}' with p lt 3 pt 5 ps 0.2 title \"points ({})\"\n",
d, &fname, title, &fname, n)?;
Ok(())
};
let f = |x: f64| x * (1. / x).sin();
let s = Sampling::fun(f, -0.4, 0.4).n(227).build();
save(&s, 227, "x sin(1/x)")?;
let s = Sampling::fun(f, -0.4, 0.4).n(389).build();
save(&s, 389, "x sin(1/x)")?;
let s = Sampling::fun(|x: f64| (1. / x).sin(), -0.4, 0.4).n(391).build();
save(&s, 391, "sin(1/x)")?;
Ok(())
}