use iterative_methods::derivative_descent::*;
use iterative_methods::*;
use streaming_iterator::*;
fn main() {
let function = |x| x * x + x;
let derivative = |x| 2.0 * x + 1.0;
let step_size = 0.2;
let x_0 = 2.0;
let mut x = x_0;
for i in 0..10 {
x -= step_size * derivative(x);
println!("x_{} = {:.2}; f(x_{}) = {:.4}", i, x, i, x * x + x);
}
let dd = DerivativeDescent::new(function, derivative, step_size, x_0);
let dd = enumerate(dd);
let mut dd = dd.take(10);
while let Some(&Numbered {
item: Some(ref curr),
count,
}) = dd.next()
{
println!(
"x_{} = {:.2}; f(x_{}) = {:.4}",
count,
curr.x,
count,
curr.value()
);
}
}