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

Matlabaufgabe Histogramme

 

NicoNicsen
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.07.15
Wohnort: ---
Version: 2014b
     Beitrag Verfasst am: 20.07.2015, 14:29     Titel: Matlabaufgabe Histogramme
  Antworten mit Zitat      
Hey, ich bin neu hier und wollte das Forum mal ausprobieren, weil ich nicht weiterkomme. Folgende Aufgabe gilt es zu lösen:

Entwickeln Sie ein Programm, das ausgehend von gegebenen Informationen (Datenvektoren) ein Säulen-Histogramm und die empirische Verteilungsfunktion schätzt. Verallgemeinern Sie die Schätzung so, dass Sie mit variabler Bin-/Bandbreite die Berechnung vornehmen können. Implementieren Sie eine Berechnung der empirischen Momente sowie eine Berechnung von Schiefe und Exzess.

Die Datenvektoren können ganz einfache Vektoren sein oder meinetwegen auch Zufallsvektoren. Die Berechnung der empirischen Momente ist soweit auch kein Problem. Wo ich absolut nicht weiterkomme ist die Sache mit dem Säulen-Histogramm und der Verteilungsfunktion, da hier keine Matlab-Befehle wie "hist" oder sowas verwendet werden dürfen. Weiterhin ist auch keine Statistic toolbox vorhanden, also hilft mir das auch nicht weiter. Es soll quasi mit ganz einfachen aber effektiven Methoden vorgegangen werden. Kann mir da jemand helfen? Finde keine Lösung. Confused
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.07.2015, 18:52     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wo ich absolut nicht weiterkomme ist die Sache mit dem Säulen-Histogramm und der Verteilungsfunktion, da hier keine Matlab-Befehle wie "hist" oder sowas verwendet werden dürfen.

Ganz MATLAB besteht aus MATLAB-Befehlen. hist ist ein solcher. Was darf denn dann verwendet werden?
Man kann natürlich "händisch" in Kategorien einsortieren. Ob das sinnvoll ist, ist eine andere Frage.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
NicoNicsen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.07.15
Wohnort: ---
Version: 2014b
     Beitrag Verfasst am: 20.07.2015, 22:45     Titel:
  Antworten mit Zitat      
Naja also der Prof meinte, dass ihm die Verwendung von hist zu einfach ist. Bei seiner Implementierung wurden die Werte des Vektors in Klassen unterteilt und diese dann als eine Art "Treppenfunktion" geplottet, sodass es den Anschein hat, es wurde ein Histogramm erstellt. Wie er das im Einzelnen gemacht hat, weiss ich allerdings nicht. (der Plot mit "stairs" ist im übrigen auch nicht zulässig)

Weiss echt nicht weiter
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.07.2015, 22:58     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Naja also der Prof meinte, dass ihm die Verwendung von hist zu einfach ist.

Tja, so ist es halt, dass in MATLAB vieles recht einfach ist. Wie wäre es mit etwas komplexeren Aufgaben? Ist doch unsinnig, das Rad neu eckig zu erfinden, damit es schöner holpert.

Zitat:
Bei seiner Implementierung wurden die Werte des Vektors in Klassen unterteilt und diese dann als eine Art "Treppenfunktion" geplottet

Habe ich dir ja auch schon vorgeschlagen. Einsortieren in Kategorien, und dann bar verwenden. Ich hoffe, das ist dem Professor nicht auch noch zu einfach.

Die entscheidende Frage ist: wie soll die Aufgabe denn eigentlich gelöst werden?
Dann wäre es gut, wenn du deine ersten Ansätze postest. Und dann am besten konkrete Fragen dazu.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
NicoNicsen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.07.15
Wohnort: ---
Version: 2014b
     Beitrag Verfasst am: 21.07.2015, 15:32     Titel:
  Antworten mit Zitat      
Also meine Variante sieht erstmal so aus:

Code:
clc
clear all

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Generieren eines Zufallsvektors

n = 30                  % Größe des Zufallsvektors der erzeugt werden soll
Zufallsvektor = randn(n,1);    
l = sort(Zufallsvektor) % Sortieren der Zufallswerte
   
mini=min(l) % kleinster Wert im Zufallsvektor
maxi=max(l) % größter Wert im Zufallsvektor

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Berechnung der äquivalenten Intervalle

nk = 7                  % Anzahl der Klassen
bb = (maxi-mini)/nk      % Bandbreite / Spannbreite der Klassen

ig(1,1) = mini;  % Vektor mit unterster Intervallgrenze

for i = 1:nk      % bestimmen der übrigen Intervallgrenzen
   ig(i+1,1) = mini + bb * i;    
end

ig %Vektor mit den Intervallgrenzen

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Einordnen der Zufallswerte in die Intervalle

f(1,1) = 0;
for j = 1:nk
    f(j+1,1) = length ( find (l(:,1) < ig(j,1) | l(:,1) <= ig(j+1,1)));
end

f; % Vektor, der angibt, wieviele Zufallswerte kleiner sind als die 1. Grenze, 2. Grenze, usw


for k =1:nk
    b(k,1) = f(k+1,1)-f(k,1);
end

b % Zeigt an wieviele Elemente sich in den einzelnen Klassen befinden
  % Ähnlich wie "Bincount"

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Darstellen des Histogramms

plot(b)
title('Histogramm')
xlabel('Klassen')
ylabel('Anzahl der zugeordneten Zufallswerte')
axis([0 nk+1 0 max(b)+1])



Nun noch meine Frage, wie man das Histogramm nun am besten darstellen kann, ohne die Funktion "stairs" zu nehmen. Also das da sone schöne eckige, balkenförmige Geschichte rauskommt. Hast du noch weitere Vorschläge, was man irgendwo hierdran eventuell verbessern/effizienter gestalten kann?

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.07.2015, 15:40     Titel:
  Antworten mit Zitat      
Hallo,

zur Darstellung wie bereits vorgeschlagen bar .

Wenn möglich, sollte man for-Schleifen vermeiden. Oft geht das ganz einfach, z.B.
Code:


Wenn es nicht möglich ist und die finale Größe des Arrays bekannt ist, sollte es z.B. mit Nullen vorbelegt werden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
NicoNicsen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.07.15
Wohnort: ---
Version: 2014b
     Beitrag Verfasst am: 22.07.2015, 19:07     Titel:
  Antworten mit Zitat      
Okay vielen Dank, das hat schonmal gut funktioniert. Und hast du eine Idee bezüglich der empirischen Verteilungsfunktion? Wenn diese dargestellt wird, sieht der Plot bzw. der Graph im Plot wie ein Polygon aus und nicht wie diese schöne Treppenfunktion (von 0 anfangend bis irgendwann die 1 erreicht ist). Hast du ne Idee, wie man das darstellen kann, ohne die Funktion "Stairs" zu verwenden?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.07.2015, 19:17     Titel:
  Antworten mit Zitat      
Hallo,

der einzige Weg wäre, sich eine Funktion zu definieren, die sich so verhält und diese dann zu plotten. Für sinnvoll halte ich das aber nun wirklich nicht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
NicoNicsen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.07.15
Wohnort: ---
Version: 2014b
     Beitrag Verfasst am: 23.07.2015, 11:43     Titel:
  Antworten mit Zitat      
Okay, das mit der Funktion werde ich nochmal fragen müssen. Wir haben uns auch jetzt überlegt, dass wir eine Matrix erstellen wollen, die sowohl die Werte des Zufallsvektors untereinander in sortierter Reihenfolge enthält, als auch die jeweilige Klasse, zu der der Wert dann gehört. Also zum Beispiel so:

Code:
lb = [1,7    1
      2,4    2
      2,5    2
       .      .
       .      .
       n     n]

 


Hast du ne Idee, wie man das erstellen kann?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.07.2015, 11:49     Titel:
  Antworten mit Zitat      
Hallo,

in der aktuellen MATLAB-Version (R2015a) wurde speziell dafür discretize eingeführt. Wenn du ein älteres Release verwendest, dies bitte im Profil angeben.

Und Vorsicht: in MATLAB ist das Dezimaltrennzeichen Punkt, nicht Komma!

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
NicoNicsen
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.07.15
Wohnort: ---
Version: 2014b
     Beitrag Verfasst am: 23.07.2015, 12:00     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort Harald!

Ich verwende die Version 2014b, funktioniert der befehl dafür auch? Und wie müsste ich den eingeben?
Code:
lb = discretize(l,b)


So?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.07.2015, 21:36     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
funktioniert der befehl dafür auch?

Schau doch bitte dafür in die Doku.

Zitat:
Und wie müsste ich den eingeben?

In der Doku wird das ausführlich beschrieben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 24.07.2015, 09:48     Titel:
  Antworten mit Zitat      
immer sinnvoll:
Code:
help [befehl]

(sofern ihr den verwenden dürft Twisted Evil)
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
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.