/*
    Polynomial math:
    
    Hermite polynomials:
       https://en.wikipedia.org/wiki/Hermite_polynomials#Recurrence_relation
    
    Application:
       https://en.wikipedia.org/wiki/Quantum_harmonic_oscillator

    
     Generating the sequence of Hermite polynomials
     
     Hn+1(x) = 2x Hn(x) - H'n(x)    
     starting from H0(x) = 1 

     we get H1(x)=2x
            H2(x)=2x*(2x) - 2 ) = 4x^2 -2
             :

*/



#include <iostream>
using namespace std;

// This is the header defining DualNumber class.
#include "Polynomium.hpp"


int main()
{
   Polynomium H;
   H[0]=1.0;       // H=1

   Polynomium Q;
   Q[1]=2.0;       // Q=2x
   
   for (int n=1;n<20;n++)
     {
        // Now calculate next polynomium
        H=Q*H-H.Diff();
        cout << "H" << n << "(x)=" << H << "\n";
     }

   return 0;
}
