C++: Rekursive Berechnung des Hermiteschen Polynoms an der Stelle x

Aufgrund ihrer während des Physikstudiums immer wieder aufblitzenden Bedeutung (siehe beispielsweise beim quantenmechanischen harmonischen Oszillator oder bei der Finite-Elemente-Methode) stellt die numerische Berechnung eines Hermit-Polynoms eine beliebte Aufgabe in Übungen zu Vorlesungen wie Computational Physics dar.

Eine Möglichkeit zur Implementierung der rekursiven Formel \(H_{n}(x) = 2xH_{n-1}(x)-2(n-1)H_{n-2}(x)\) mit \(H_0 = 1\) und \(H_1 = 2x\) ist durch die Methode

 
double Hermite (int n, double x)
{
    if (n == 0) {return 1;}
    else if (n == 1) {return 2*x;}
    else if (n >= 2) {return ((2*x*Hermite(n-1,x)) - (2 * (n-1) * Hermite(n-2,x)));}
    else return 0;
}
 

gegeben, welche den Grad n und die Stelle x als Parameter nimmt und sich so lange selbst aufruft, bis alle Zwischenpolynome \(H_{0,1,2,...,n-1}(x)\), die zur Berechnung von \(H_{n}(x) \) benötigt werden, bekannt sind.

Leicht kann die rekursive Funktion zu einem kompilierfähigen Programm ausgebaut werden, das die gewünschten Parameter n und x in der Konsole abfragt und das berechnete Ergebnis ausgibt.

 
#include <cstring>
#include <iostream>
#include <math.h> 
#include <stdlib.h>
 
using std::cout;
using std::endl;
using namespace std;
 
int nsel;
double xsel;
 
double Hermite (int n, double x)
{
    if (n == 0) {return 1;}
    else if (n == 1) {return 2*x;}
    else if (n >= 2) {return ((2*x*Hermite(n-1,x)) - (2 * (n-1) * Hermite(n-2,x)));}
    else return 0;
}
 
int main(int argc, char *argv[])
{
    cout << "Rekursive Funktionen (Berechnung des Hermiteschen Polynoms Hn(x)" << endl;
    cout << "--------------------------------------------" << endl;
    cout << "Parameter n eingeben: ";
    char nraw[5];
    cin >> nraw;
    nsel = atoi(nraw);
    cout << "Parameter x eingeben: ";
    char xraw[5];
    cin >> xraw;
    xsel = atof(xraw);
    cout << "--------------------------------------------" << endl;
    cout << "Ergebnis: " << Hermite(nsel, xsel) << endl;
}
 
 

Die Interaktion mit dem Programm sieht dann beispielsweise so aus:

Parameter n eingeben: 10
Parameter x eingeben: 14
--------------------------------------------
Ergebnis: 2.63394e+14

 


2016-01-28 07:25:40