Polynômes de Hermite comme fonctions propres dans l’espace des polynômes primitives

P Reinhardt, LCT, UPMC

Clear["Global`*"]

Le problème

Nous avons l’opérateur de différentiation  ((d^2)/(dx^2))-(x^2)pour générer les polynômes d’Hermite comme vecteurs propres dans la base des polynômes primitives. Le produit scalaire est défini comme  (∫_(-∞)^∞)f(x)g(x)(e^(-x²))dx pour exprimer l’orthonormalité.
La base des polynômes primitives 1, x, etc n’est pas une base orthogonale. Nous allons alors resoudre le système d’équations valeur propre dans une base non-orthogonale.

Ce calcul est numériquement stable jusqu' à l' ordre 8. On utilise des coupures par Chop[]

La base des polynômes

npolys=8

X=x^(Range[npolys]-1)*Exp[-(x^2)/2]

Matrice de recouvrement et (S^(-1/2))

S[i_,j_]:=Integrate[X[[i]]X[[j]],{x,-∞,∞}]
Overlap=N[Array[S,{npolys,npolys}]];
MatrixForm[Overlap]

On forme (S^(-1/2))par diagonalisation, filtrage, reconstitution, repassage dans la base d’origine

Chop[]  enlève les petits nombres de l’ordre 10^-17 générés par la précision numérique

P=Transpose[Eigenvectors[Overlap]];
Tmp=Chop[Inverse[P].Overlap.P]
diag=Table[1/Sqrt[Tmp[[i,i]]],{i,1,npolys}]
f[i_,j_]:=0
A=Array[f,{npolys,npolys}]
Do[A[[i,i]]=A[[i,i]]+diag[[i]],{i,1,npolys}]
A//MatrixForm
Smdemi=P.A.Inverse[P];

Smdemi//MatrixForm

Vérification que c’est bien (S^(-1/2))

Chop[Smdemi.Overlap.Smdemi]//MatrixForm

Opérateur différentiel, appliqué sur la base des polynômes primitifs

Ax[n_]:=-D[X[[n]],{x,2}]+x^(n+1)Exp[-(x^2)/2]//Simplify

AX=Ax[Range[npolys]]//Simplify

La matrice de l' opérateur dans la base des polynômes

XAX[i_,j_]:=Integrate[X[[i]] AX[[j]],{x,-∞,∞}]
Mat=Array[XAX,{npolys,npolys}];
Mat//MatrixForm

Solution du problème valeur propre

Mattrf=Smdemi.Mat.Smdemi

Chop[Eigenvalues[Mattrf]]//Simplify
Polys=Chop[Reverse[Transpose[Smdemi.Transpose[Eigenvectors[Mattrf]]].X]]

Normalisation de la solution

nfac=Polys/.x->1

Polys=Polys/nfac//Simplify

Le résultat final

Polys*Exp[x^2/2]/1.648721270700128//Simplify//TableForm