2Der
Formel (abgewandelt aus [2]):
2=Die Variable
Bsp.: Die Zahl 123 kam 321 mal vor, daraus folgt daß in
2
// Name: CHII.CPP
// Aufgabe: Implementierung Chi-Quadrat-Testes in C++.
// Ersteller: Sascha Heinisch
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
#include <math.h>
void main()
{
ifstream input;
unsigned long r,n,i,t;
unsigned long *wert;
float chi,tt;
clrscr(); // Bildschirm Löschen
input.open("chitest.dat"); // Datei öffnen
input>>r;input>>n; // Radius und Anzahl lesen
cout<<"Radius :"<<r<<" Anzahl :"<<n<<endl;
wert = new unsigned long [r+1] ;
for (i=0;i<=r;i++) wert[i]=0; // Feld für Radien
for (i=1;i<=n;i++) // die Absolute Häufigkeit
{ //wird hier bestimmt
input>>t;
wert[t]++;
}
tt=0;
for (i=0;i<=r;i++)
tt=tt+wert[i]*wert[i];
// die Summe der Quadrate
// der Häufigkeiten wird gebildet
chi = tt*(float)r/(float)n - (float) n;
// dividiert durch die zu erwartende Häufigkeit
// und subtrahiert mit der Gesamtanzahl
cout<<"Chiquadrat "<<chi<<endl;
if (chi<r) chi=r-chi+r;
if ((chi-r) < 2*sqrt(r))
cout<<" --> Der Generator ist gut!";
else
cout<<" --> Der Generator ist schlecht!";
char c=getch();
delete [r+1] wert ;
input.close(); //Datei schließen
}
Das C++ Programm lädt eine Datei an deren Anfang der Zahlenradius
steht, dann die Gesamtanzahl der Zufallswerte. Aufgrund dieser
Daten wird ein dynamisches Feld angelegt, und die Häufigkeiten
der einzelnen Zahlen ermittelt.
Ergibt sich für
2
2]|≤2 *