File:Hermigaaplot.jpg

Explicit plot of the Oscillator functions (coloured curves) and their approximations (black curves):

$y=F_n(x)=N_n^{-1/2} H_n(x)\exp(-x^2/2)$, $n=1$ .. $6$

$y=\tilde F_n(x)$, $n=1$ .. $6$

Description
The approximations are build with functions amos that determines the amplitude of oscillations of the oscillator function in vicinity of zero, and function qua, that approximates the phase of oscillation in the quadratic potential.

For real (and, in particular, for integer) values of argument $n$, function amos can be expressed through function Factorial,

amos$(z)=\,$ $\displaystyle \frac{2^{-n/2}\, \sqrt{z!}} {\pi^{1/4}\, (x/2)!} $

In the code below, it is implemented as $~$ double Amp(int n) $~$ through function lof that, for real values of argument, behaves as $\ln$(Factorial)

As for qua, it can be determined in such a way, that $\mathrm{qua}'(z)=\sqrt{1\!-\!z^2}$, id est,

$\mathrm{qua}(z)=\frac{1}{2}\big( z\,\sqrt{1\!-\!z^2}+\arcsin(z)\big)$

With function amos and qua, the approximation of $n$th oscillator function is defined as follows:

$\tilde F_n(x)=\displaystyle \frac{\mathrm{amos}(n)}{\left(1-\frac{x^2}{2n+1}\right)^{1/4} }\, \cos\left( \left(2n\!+\!1+\frac{1/4}{2n\!+\!1}\right) \, \mathrm{qua}\!\left(\frac{x}{\sqrt{2n\!+\!1}} \right) -\frac{\pi n}{2} \right)$

C++ generator of curves
Files ado.cin, fac.cin, hermiteneve.txt, hermitenodd.txt should be loaded in order to compile the code below.

typedef std::complex z_type;
 * 1) include
 * 2) include
 * 3) include
 * 4) include
 * 1) define Re(x) ((x).real)
 * 2) define Im(x) ((x).imag)
 * 3) define DB double
 * 4) define DO(x,y) for(x=0;x81){printf("hermite number %2d is not yet implemented (max. is 81)\n consider to stop..",n); getchar; return 0;} xx=x*x; //printf("Herniten called with n=%3d x=%8.2lf\n",n,x); if(n/2*2==n){M=n/2; s=0.;for(m=M;m>0;m--) {s+=HermiteH0[M][m]; s*=xx;} return (HermiteH0[M][0]+s);} else{ M=(n-1)/2; s=0.; for(m=M;m>0;m--) {s+=HermiteH1[M][m]; s*=xx;} return (HermiteH1[M][0]+s)*x;} }

// #include"arcsin.cin"

DB qua(DB x) { return .5*(x*sqrt(1.-x*x)+asin(x));}

//DB Amp(int n){ return sqrt(Re(fac(0.+n))/sqrt(M_PI))/( exp((log(2.)/2.)*n)*Re(fac(.5*n)));}


 * 1) include "fac.cin"

DB Amp(int n){ return exp( -.5*log(2.)*n + (.5*Re(lof(0.+n))-Re(lof(.5*n))) )/sqrt(sqrt(M_PI));} //#include "amos.cin"

DB osb(int n,DB x){ //Later both n,x should be z_type, but not yet. DB q=2.*n+1.; DB Q=sqrt(q); DB t=x/Q; DB r=sqrt(1.-t*t); r=1./sqrt(r); DB a=(q+.25/q)*qua(t)-M_PI/2.*n; // printf("%2d %6.3lf q=%6.3lf Q=%6.3lf t=%6.3lf r=%6.3lf  a=%6.3lf  ",n,x,q,Q,t,r,a); getchar; return cos(a)*r;}


 * 1) include"ado.cin"

int main{ // printf("%16d %16d\n",INT_MIN,INT_MAX); int M,m,n; DB x,xx,y,z,s; FILE *o; o=fopen("hermigaaplo4.eps", "w"); ado(o,804,224); fprintf(o,"402 102 translate 100 100 scale 2 setlinecap 1 setlinejoin\n");
 * 1) define M(x,y) fprintf(o,"%6.4lf %6.4lf M\n",x+0., y+0.);
 * 2) define L(x,y) fprintf(o,"%6.4lf %6.4lf L\n",x+0., y+0.);

for(m=-4; m<5; m++) {M(m,-1)L(m,1)} for(n=-1; n<2; n++) {M(-4,n)L(4,n)} fprintf(o,".01 W 0 0 0 RGB S\n");

DO(n,201){x=.05*(n-100); y= hermiten(0,x)*exp(-x*x/2.); if(n==0)M(x,y) else L(x,y) } fprintf(o,"1 0 0 RGB .016 W S\n "); DO(n,201){x=.05*(n-100); y= hermiten(1,x)*exp(-x*x/2.); if(n==0)M(x,y) else L(x,y) } fprintf(o,"1 0 0 RGB .016 W S\n "); DO(n,201){x=.05*(n-100); y= hermiten(2,x)*exp(-x*x/2.); if(n==0)M(x,y) else L(x,y) } fprintf(o,"1 0 0 RGB .016 W S\n "); DO(n,201){x=.05*(n-100); y= hermiten(3,x)*exp(-x*x/2.); if(n==0)M(x,y) else L(x,y) } fprintf(o,"1 0 0 RGB .016 W S\n "); DO(n,201){x=.05*(n-100); y= hermiten(4,x)*exp(-x*x/2.); if(n==0)M(x,y) else L(x,y) } fprintf(o,"0 .7 0 RGB .016 W S\n "); DO(n,201){x=.05*(n-100); y= hermiten(5,x)*exp(-x*x/2.); if(n==0)M(x,y) else L(x,y) } fprintf(o,"0 0 1 RGB .016 W S\n "); DO(n,201){x=.05*(n-100); y= hermiten(6,x)*exp(-x*x/2.); if(n==0)M(x,y) else L(x,y) } fprintf(o,"1 0 1 RGB .016 W S\n ");

DO(m,7){DB a=Amp(m); DB xmax=sqrt(2*m+1.); DO(n,601){ x=-xmax+.012*(n+.5); if(x>xmax) break; y= a*osb(m,x); if(n==0)M(x,y) else L(x,y) } fprintf(o,"0 0 0 RGB .01 W S\n "); }

fprintf(o,"showpage\n%c%cTrailer\n",'%','%'); fclose(o); system("epstopdf hermigaaplo4.eps"); system("open    hermigaaplo4.pdf"); }

Latex generator of curves
\documentclass[12pt]{article} \usepackage{geometry} \paperwidth 806pt \paperheight 230pt \topmargin -104pt \oddsidemargin -73pt \pagestyle{empty} \usepackage{graphicx} \parindent 0pt \textwidth 700px \textheight 900px \newcommand \sx {\scalebox} \begin{document} \begin{picture}(800,223) \put(0,0){\includegraphics{hermigaaplo4}} \put(389,216){\sx{1.8}{$y$}} \put(388,194){\sx{1.8}{$1$}} \put(376,-1){\sx{1.8}{$-1$}} \put( 85,80){\sx{2}{$-3$}} \put(185,80){\sx{2}{$-2$}} \put(285,80){\sx{2}{$-1$}} \put(398,80){\sx{2}{$0$}} \put(498,80){\sx{2}{$1$}} \put(598,80){\sx{2}{$2$}} \put(698,80){\sx{2}{$3$}} \put(792,80){\sx{2}{$x$}} %Top Left \put(40,208){\sx{1.8}{$\tilde F_6(x)$}} \put(102,208){\sx{1.8}{$\tilde F_4(x)$}} \put(180,208){\sx{1.8}{$\tilde F_2(x)$}} \put(1,140){\sx{1.8}{$F_6(x)$}} %bottom left \put(10,58){\sx{1.8}{$F_5(x)$}} \put(22,10){\sx{1.8}{$\tilde F_5(x)$}} \put(140,10){\sx{1.8}{$\tilde F_3(x)$}} \put(233,10){\sx{1.8}{$\tilde F_1(x)$}} % \put(370,180){\sx{1.8}{$y=F_0(x)$}} \put(452,208){\sx{1.8}{$\tilde F_0(x)$}} \put(526,208){\sx{1.8}{$\tilde F_1(x)$}} \put(604,208){\sx{1.8}{$\tilde F_2$}} \put(646,208){\sx{1.8}{$\tilde F_3$}} \put(682,208){\sx{1.8}{$\tilde F_4$}} \put(734,208){\sx{1.8}{$\tilde F_5$}} \put(762,208){\sx{1.8}{$\tilde F_6$}} % \put(755,144){\sx{1.8}{$F_6(x)$}} % \put(611,58){\sx{1.8}{$y\!=\!F_6(x)$}} \end{picture} \end{document}