1pub use ohsl::Polynomial;
4
5fn main() {
6 println!("----- Polynomials -----");
7
8 let p = Polynomial::<f64>::new( vec![ 1.0, 2.0, 3.0 ] );
10 println!( " * p(x) = {}", p );
11 println!( " * p[0] = {}", p[0] );
12 println!( " * p[1] = {}", p[1] );
13 println!( " * p[2] = {}", p[2] );
14 println!( " * p is of degree {}", p.degree().unwrap() );
15
16 println!( " * p(0.5) = {}", p.eval( 0.5 ) );
18 println!( " * p(1.0) = {}", p.eval( 1.0 ) );
19
20 let roots = p.roots( true );
22 println!( " * p(x) = {} = 0 has {} roots", p, roots.size() );
23 println!( " * x0 = {:.6} {:.6} i", roots[0].real, roots[0].imag );
24 println!( " * x1 = {:.6} +{:.6} i", roots[1].real, roots[1].imag );
25
26 let q = Polynomial::cubic( 3.0, 5.0, 4.0, 0.0 );
28 println!( " * q(x) = {}", q );
29 println!( " * p(x) + q(x) = {}", &p + &q );
30 println!( " * p(x) - q(x) = {}", &p - &q );
31 println!( " * -p(x) = {}", -&p );
32 println!( " * p(x) * q(x) = {}", &p * &q );
33 println!( " * p(x) * 3 = {}", &p * 3.0 );
34 let result = q.polydiv( &p );
35 match result {
36 Ok( ( q, r ) ) => println!( " * q(x) / p(x) = {} remainder {}", q, r ),
37 Err( e ) => println!( " * q(x) / p(x) = {}", e )
38 }
39
40 println!( " * p'(x) = {}", p.derivative() );
42 println!( " * p''(x) = {}", p.derivative_n( 2 ) );
43 println!( " * p'(0.5) = {}", p.derivative_at( 0.5, 1 ) );
44 println!( " * p''(0.5) = {}", p.derivative_at( 0.5, 2 ) );
45
46 println!( "--- FINISHED ---" );
47}