WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Histogramm aus Messwerten erstellen

 

Jaylan
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 27.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2016, 14:10     Titel: Histogramm aus Messwerten erstellen
  Antworten mit Zitat      
Hallo liebe MatLaber,

nun ich habe mich nochmal an mein Problem gesetzt und hänge nun an folgender Stelle fest.

Die Aufgabe ist es aus Daten, die als textfile vorliegen (320 Zeilen mit je ein Messwert), ein Histogramm zu erstellen und zu plotten.

Schritte meines Programms:
1. Daten aufnehmen:
Code:
daten=importdata('daten.txt');

2. Spanne R ermitteln: MAX-MIN:
Code:
r=max(daten)-min(daten);

3.Klassenweite (bin-Intervall) berechnen:
Code:

4.Daten zuordnen? <- Wie mache ich das?

5. Mittelwert, Median, Varianz, Std.Abweichung, IQR berechne ich einfach mit den Matlab-Formeln.

Die y-Achse soll die Anzahl der jeweiligen Werte in den bins Darstellen.
Die x-Achse Intervalle der bins.


Kann man die Anzahl der bins auch vielleicht varrieren? Standard sind ja 10 bins.
Im Endeffekt soll einfach ein richtiges Histogramm der Daten erstellt werden.
Freue mich über jede Hilfestellung!!

Vielen Dank im Voraus.

Gruß,

Jaylan
Private Nachricht senden Benutzer-Profile anzeigen


gs
Forum-Century

Forum-Century


Beiträge: 172
Anmeldedatum: 17.03.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2016, 14:29     Titel:
  Antworten mit Zitat      
Hi,

Deinen Vektor kannst du mit den Befehl
Code:
sortieren

Mittelwert:
Code:

Standardabweichung:
Code:

Median:
Code:

Varianz:
Code:

IQR:
Code:

Histogrammplot:
Code:


Denke mal die Hilfe ist selbsterklärend.

Daten zuordnen ist noch ein bissel tricky, da ich deine Datenstruktur nicht kenne.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Jaylan
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 27.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2016, 12:56     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank für deine Hilfe! Die Matlab-Formeln waren mir aber bereits bekannt Smile
Mir geht es eigentlich darum, die Messwerte sinnvoll in die bins zuzuordnen und diese bins in geeignete Intervalle zu teilen.

Viele Grüße

Anbei ein Auszug aus meinen Messdaten. Es befinden sich jeweils 8 Spalten. Jede Spalte ist eine eigene Datenreihe. D.h. insgesamt sollten 8 verschiedene Histogramme erstellt werden.

Jaylan

messdaten.txt
 Beschreibung:

Download
 Dateiname:  messdaten.txt
 Dateigröße:  2.17 KB
 Heruntergeladen:  427 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.06.2016, 21:51     Titel:
  Antworten mit Zitat      
Hallo Jaylan,

Bitte erkläre nun noch, was "sinnvoll" in Deinem Fall heißt. Das hängt ja von der Fragestellung ab. Die Anzahl von 10 Intervallen gefällt Dir nicht, aber möchtest Du mehr oder weniger bekommen?

Die "bins" sind die Intervalle. Man teilt also nicht die "bins in geeignete Intervalle ein".

gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Jaylan
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 27.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2016, 07:36     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich habe mir nun folgendes zusammengestellt.
Das Histogramm soll möglichst normalverteilt sein.
Die "bins in geeignete Intervalle teilen" heisst, dass die min und max Grenzen der bins, sich aus den Messwerten ergeben sollen.

Das Skript gibt mir jedoch an folgender Stelle eine Fehlermeldung:

Code:
[num, pos] = hist(x, nBins);


==SKRIPT==

Code:
% Einlesen der Daten.
daten = dlmread('messdaten.txt');

% Auf die Spalte 3 von "daten" zugreifen.
% Der : steht dabei für "alle Zeilen".
x = daten(:, 3);
nBins = 10;

% Berechnen des Histogramms.
[num, pos] = hist(x, nBins);
nWerte = dim(x);

% Berechnen von: Standartabweichung, Mittelwert.
sigma = var(x, 1);
mu = mean(x);

% y = linspace (a, b, n)
% Der Befehl linspace generiert einen Vektor von (einschließlich) a bis b mit insgesamt n Werten, die in diesem Intervall gleichmäßig angeordnet sind.
t = linspace(min(x), max(x), nWerte);


% Berechnen der Normalverteilung (Gaußkurve)
% Die Standardabweichung &#963; beschreibt die Breite der Normalverteilung.

f = (1/sqrt(2*pi*sigma)) .* exp( - ((t - mu).^2)./(2*sigma));
 
 % Skalierungsfaktor
 f = f * max(num) * sqrt(2*pi*sigma);
 
  % Histogramm plotten
  figure;
  hold on;
  bar(pos, num, 0.6, 'r', 'EdgeColor', 'r');
  plot(t, f, 'b');
  hold off;
  grid on;
  gausstitle = sprintf('Gauss Kurve\n\\mu = %f, \\sigma = %f', mu, sigma);
  legend('Histogramm', gausstitle, 'Location', 'BestOutside');
  ylabel('Anzahl');
  xlabel('Wert');
  title('Histogramm der 1. Dimension');
 
end;


Freue mich über deine Hilfe!

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Jaylan
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 27.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2016, 13:40     Titel:
  Antworten mit Zitat      
Hallo nochmal,

ich habe nun einige Änderungen durchgeführt.
Das Skript läuft nun durch,... es werden aber irgendwie die Balken der Histogramme, sowie die Gaußkurve nicht gezeichnet.

Würde mich freuen, wenn sich das mal jemand angucken könnte. Die Daten sind im Anhang. Nutze die Matlab Version 2008.

Code:
% Einlesen der Daten.
daten = dlmread('messdaten.txt')

% Auf die Spalte 3 von "daten" zugreifen.
% Der : steht dabei für "alle Zeilen".
x = daten(:, 3)

%Anzahl bins
nBins = 10;

% Berechnen des Histogramms.
[bincounts, ind] = histc(x, nBins);
nWerte = length(x);

% Berechnen von: Standartabweichung, Mittelwert.
sigma = var(x, 1);
mu = mean(x);
IQR = iqr(x);
med = median(x);
maximum = max(x);
minimum = min(x);

% y = linspace (a, b, n)
% Der Befehl linspace generiert einen Vektor von (einschließlich) a bis b mit insgesamt n Werten, die in diesem Intervall gleichmäßig angeordnet sind.
t = linspace(min(x), max(x), nWerte);


% Berechnen der Normalverteilung (Gaußkurve)
% Die Standardabweichung &#963; beschreibt die Breite der Normalverteilung.

f = (1/sqrt(2*pi*sigma)) .* exp( - ((t - mu).^2)./(2*sigma));
 
 % Skalierungsfaktor
f = f * max(bincounts) * sqrt(2*pi*sigma);
 
% Histogramm plotten
figure;
hold on;
% bar(t, ind,'histc')
bar(t, f, 0.6, 'g', 'EdgeColor', 'g');
plot(t, f, 'b');
hold off;
grid on;
gausstitle = sprintf('Gauss Kurve\n\\mu = %f, \\sigma = %f, IQR = %f, med = %f, min = %f, max = %f', mu, sigma, IQR, med, minimum, maximum);
legend('Histogramm', gausstitle, 'Location', 'BestOutside');
ylabel('Anzahl');
xlabel('Wert');
title('Histogramm der 3. Dimension');
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.