Skip to main content

polynomial/
polynomial.rs

1// cargo run --example polynomial
2
3pub use ohsl::Polynomial;
4
5fn main() {
6    println!("----- Polynomials -----");
7
8    // Create a new polynomial
9    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    // Evaluate the polynomial at a given point
17    println!( "  * p(0.5) = {}", p.eval( 0.5 ) );
18    println!( "  * p(1.0) = {}", p.eval( 1.0 ) );
19
20    // Determine the roots of the polynomial
21    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    // Arithmetic
27    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    // Derivatives
41    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}