Zur Druckansicht wechseln Visit the English version of this page

www.jb-electronics.de » Programmieren » ROOT » Fehlerdiagramme

Fehlerdiagramme

Wie schon erwähnt: Werden Messungen durchgeführt, gehören dazu unweigerlich Messfehler. Zu einer vernünftigen Analyse gehört es daher auch, diese Messfehler zu visualisieren und auszuwerten.

Hier ist die generelle Idee eines Fehlerbalkens zu sehen:

Ein Fehlerbalken

Dabei ist der blaue Messwert M ein Punkt irgendwo in einem xy-Koordinatensystem. Die vier Fehlerbalken σ(x) und σ(y) sind nichts anderes als die Standardabweichung.

Nützlicherweise bietet ROOT mit der Klasse TGraphErrors ein fast komplettes Fehlerdiagramm-Paket. Das Problem ist, dass vorher noch ein 2D-Histogramm erstellt werden muss, damit dem Fehlerdiagramm Achsen zugeordnet werden können. Das ist nicht so intuitiv klar, daher entstand auch dieser kleine Artikel hier.

Zweidimensionale Fehler σ(x), σ(y)

Im Beispielcode wird also zunächst ein (leeres) 2D-Histogramm erstellt. Der allgemeine Aufruf zum Erstellen eines 2D-Histogramms geschieht nach dieser Syntax:

// Erstellen eines 2D-Histogramms mit ROOT
TH2D *histo2D = new TH2D("histo2D", "Titel", bins_x, min_x, max_x, bins_y, min_y, max_y);

Dabei sind min bzw. max die Grenzen auf der jeweiligen Achse. Die Variablen bins_x und bins_y geben an, wie viele Messpunkte maximal im Histogramm gespeichert werden können, sie haben also hier den gleichen Wert.

Nun kann auch das Fehlerdiagramm erstellt werden:

// Erstellen des 2D-Fehlerdiagrammes mit ROOT
TGraphErrors *fehlerdiagramm = new TGraphErrors(N);

Dabei gibt N (wie oben die Variablen bin_x und bin_y) die maximale Anzahl der speicherbaren Messpunkte an.

Gefüllt wird das Diagramm nun so:

// Trage Messwert Mi in das Fehlerdiagramm ein
fehlerdiagramm->SetPoint(i, messwertex[i], messwertey[i]);
fehlerdiagramm->SetPointError(i, fehlerx[i], fehlery[i]);

Dabei gibt das i an, dass es sich bei den eingefügten Datenpunkt M um den i-ten Punkt handelt.

In einem Beispielskript mit Zufallswerten liefert uns das nach den Draw-Befehlen auch schon folgendes Diagramm:

2D Fehlerdiagramm in ROOT

Wichtig: Im Beispielskript sind als Fehler Zufallswerte verwendet worden, in dem Bild ist nicht die Standardabweichung eingezeichnet.

Das zugehörige Root-Beispielskript gibt es hier zum Download: fehlerbalken2d.c (3 KB).

Eindimensionaler Fehler σ(x) = 0, σ(y)

Manchmal kann es auch erforderlich sein, mehrere Messwerte derselben Messgröße nebeneinander anzuzeigen, um die Fehler der verschiedenen Messungen zu vergleichen. Dann kann immer noch das obige Skript verwendet werden, jedoch mit ein paar kleinen Modifikationen:

  1. Der Fehler in x-Richtung (wenn wir auf der x-Achse unsere Messungen auftragen) ist nun null.
  2. Bei N Messungen müssen wir den x-Wertebereich des Histogrammes wiefolgt initialisieren:

    // Erstellen eines 2D-Histogramms mit ROOT
    TH2D *histo2D = new TH2D("histo2D", "Titel", bins_x, min_x, max_x, bins_y, min_y, max_y);

    Hier ist dann min_x = 0 und max_x = N + 1, wenn N die Anzahl der Messungen ist. Die +1 ist nur kosmetischer Natur; sie dient dazu, dass der letzte Wert nicht auf dem Rand des Histogrammes landet.

  3. Beim Einfügen des i-ten Messwerts ist ja nun die x-Koordinate = i und der Fehler in x-Richtung ist null:

    // Trage Messwert Mi in das Fehlerdiagramm ein
    fehlerdiagramm->SetPoint(i, i, messwerte[i]);
    fehlerdiagramm->SetPointError(i, 0, fehler[i]);

Und auch hier liefern uns diese Schritte folgendes Diagramm:

1D Fehlerdiagramm in ROOT

Wichtig: Im Beispielskript sind als Fehler Zufallswerte verwendet worden, in dem Bild ist nicht die Standardabweichung eingezeichnet.

Das zugehörige Root-Beispielskript gibt es hier zum Download: fehlerbalken1d.c (2 KB).

Beispiel aus der Praxis:

Im wirklichen Leben angewendet sieht das dann zum Beispiel so aus:

1D Fehlerdiagramm in der Praxis

Das sind die Messergebnisse eines Versuches, bei dem mit Hilfe von Blutdruckdifferenzen die Erdbeschleunigung ermittelt wird. Zusätzlich eingezeichnet sind als Geraden die Mittelwerte. Achtung: Hier sind die Fehlerbalken auch einmal wirklich die Standardabweichung.

Alles in allem: die Fehlerdiagramme sind eine sehr nützliche Sache.

Nach oben

show print layout Die deutsche Version der Seite besuchen

www.jb-electronics.de » Programming » ROOT » Error Graphs

Error Graphs

My apologies...

There is no English translation of this page available yet. It will take some more time for me to translate the whole website.

If you have a particular interest in this page getting translated as fast as possible, please contact me; I will see what I can do. Please click here for the German version.

To the top