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

Häufigkeiten der einzelnen Matrizenelemente feststellen

 

kitingfreak
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2014, 02:15     Titel: Häufigkeiten der einzelnen Matrizenelemente feststellen
  Antworten mit Zitat      
Hallo sehr geehrtes Forum!

Ich bin komplett neu auf dem gebiet Matlab und habe nun folgende Aufgabe zu lösen:

"Stellen Sie die Häufigkeiten der einzelnen Matrizenelemente fest und speichern Sie diese in den Vektoren(Arrays) c und d Hinweis: verwenden Sie die Funktionen find und length, und eine for Schleife wäre hilfreich."

Die Matrizen habe ich erfolgreich dargestellt (100x100, normal- und gleichverteilt) nur hänge ich hier jetzt komplett.
Nachdem ich diverse Einführungen in Matlab und Suchergebnisse des Forums gelesen habe und trotzdem keine Lösung gefunden habe, wende ich mich nun an euch. Ich hoffe ihr könnt mir helfen,

Danke im Voraus
LG Kitingfreak
Private Nachricht senden Benutzer-Profile anzeigen


JKnopf
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 16.03.14
Wohnort: Magdeburg
Version: ---
     Beitrag Verfasst am: 25.03.2014, 10:32     Titel:
  Antworten mit Zitat      
Hallo Kitingfreak,

Ohne zu wissen wie deine Matrizen genau aussehen, mit find kannst du bestimmte Werte in einer Matrix finden. Z.B.

Code:

F=find(M==1) %(auch andere operatoren möglich <, >...)
 


gibt dir einen Vektor aus in dem alle Elemente der Matrix M stehen, die gleich eins sind . Die Länge des Vektors gibt dir dann an, wie viel Elemente sich in deiner Matrix mit dem Wert 1 befinden (hier length nutzen). Das kannst du dann für alle Werte deiner Matrix machen. mit der for-Schleife würde ich die Anzahl der Werte, die du betrachtest, einbeziehen. Also für 10 werte von 1 bis 10

Code:


innerhalb der Schleife müsstest du dir noch einen Vektor V definieren, in dem du den jeweiligen Wert der Elementeanzahl für jeden Schleifendurchlauf ablegst. Dann noch den vektor mit

Code:

plotten.

Soweit erstmal...probiers mal ob es damit funktioniert...ansonsten stell deine Matritzen mal rein.

Gruß JKnopf
_________________

"good manners are just a way of showing other people we have respect for them" (Blast from the Past)

If you can't say somethin' nice ... don't say nothin' at all. (Thumper, Bambi)
Private Nachricht senden Benutzer-Profile anzeigen
 
kitingfreak
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2014, 23:18     Titel:
  Antworten mit Zitat      
Hallo JKnopf,

ich danke dir für deine Antwort, was meinst du mit bzw wie mache ich das:
"innerhalb der Schleife müsstest du dir noch einen Vektor V definieren, in dem du den jeweiligen Wert der Elementeanzahl für jeden Schleifendurchlauf ablegst."?

Danke LG Kitingfreak
Private Nachricht senden Benutzer-Profile anzeigen
 
JKnopf
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 16.03.14
Wohnort: Magdeburg
Version: ---
     Beitrag Verfasst am: 26.03.2014, 00:33     Titel:
  Antworten mit Zitat      
Hallo Kitingfreak,
Sorry, war vielleicht etwas unverständlich. hab das mal für eine Beispielmatrix gemacht. So habe ich mir das vorgestellt.

Code:

clear all; close all;clc


M=rand(100,100);
A=0:0.01:1;

for i=1:100
   
    F=find(M>=A(i)&M<A(i+1));
    V(i)=length(F);
end
figure(1)
hist(V)
 


Hoffe das hilft dir. wenn du dazu fragen hast. jeder zeit gerne

Gruß JKnopf
_________________

"good manners are just a way of showing other people we have respect for them" (Blast from the Past)

If you can't say somethin' nice ... don't say nothin' at all. (Thumper, Bambi)
Private Nachricht senden Benutzer-Profile anzeigen
 
kitingfreak
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2014, 01:51     Titel:
  Antworten mit Zitat      
Danke das schaut für mich schon um einiges verständlicher aus!! Smile
Ich werde das mal in meine bisherigen Versuche einbauen!
Bei der Angabe ist eine 100x100 Zufallsmatrix gefordert, als Startwert nehme ich den kleinsten Wert den ich durch den min(×) herausgefunden habe und als Wiederholungswert 10000 damit alle aufgelistet werden. Ist das korrekt so?
Wie ist das mit dem Parameter A aus deinem Beispiel? Den habe ich bei mir nicht definiert...Ich habe einfach eine Ganzzahlige Zufallsmatrix im Bereich 0 bis 10 erstellt.
Danke mfG
Kitingfreak
Private Nachricht senden Benutzer-Profile anzeigen
 
JKnopf
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 16.03.14
Wohnort: Magdeburg
Version: ---
     Beitrag Verfasst am: 26.03.2014, 10:22     Titel:
  Antworten mit Zitat      
Zitat:

Bei der Angabe ist eine 100x100 Zufallsmatrix gefordert, als Startwert nehme ich den kleinsten Wert den ich durch den min(×) herausgefunden habe und als Wiederholungswert 10000 damit alle aufgelistet werden. Ist das korrekt so?


Es ist für mich schwer ersichtlich, was genau gefordert ist, bzw. was du gemacht hast.

Zitat:

Wie ist das mit dem Parameter A aus deinem Beispiel?


A gibt mir eigentlich nur Werte zwischen 0 und 1 wieder. Also Werte, die innerhalb des Intervalls der Werte meiner Zufallsmatrix M liegen. A(i) und A(i+1) legen mir dann in der Schleife den Bereich fest in dem ich die Werte raussuchen will. z.B: A(2)=0.01 und A(3)=0.02, mit find such ich mir dann alle Werte aus der Matrix, die zwischen 0.01 und 0.02 liegen. Daraus bekomm ich dann meine Anzahl an Werten, die innerhalb des Intervalls liegen.

Zitat:

Ich habe einfach eine Ganzzahlige Zufallsmatrix im Bereich 0 bis 10 erstellt.


Den Bereich den du festlegst hängt immer von den Werten in deiner Matrix ab. Wenn deine Zufallsmatrix die selbe Funktion hat, wie bei mir A, dann würde ich dir das so nicht empfehlen, da man bei Verteilungen immer die gleiche Intervallbreite betrachtet.

Kann auch sein, dass wir an einander vorbei reden, aber ich hoffe nicht.

Gruß JKnopf
_________________

"good manners are just a way of showing other people we have respect for them" (Blast from the Past)

If you can't say somethin' nice ... don't say nothin' at all. (Thumper, Bambi)
Private Nachricht senden Benutzer-Profile anzeigen
 
kitingfreak
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2014, 10:55     Titel:
  Antworten mit Zitat      
"Erzeugen Sie zwei NxN Matrizen C und D (N=100), die ganzzahlige Zufallszahlen enthalten sollen. Die Zahlen der ersten Matrix sollen gleich verteilt im Intervall [0,10) sein (Achtung rechts halboffenes Intervall). Die zweite Matrix soll normalverteilte Zahlen enthalten (mit Mittelwert 0 und Standartabweichung s=10)"

Das ist meine Angabe, fangen wir mal so an, ist die folgende Aufstellung der Matritzen überhaupt korrekt?!:

Code:
C=round(0+10*(rand(100,100))


Code:
D=round(0+10*(randn(100,100))


Danke für deine Hilfe

LG Kitingfreak
Private Nachricht senden Benutzer-Profile anzeigen
 
JKnopf
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 16.03.14
Wohnort: Magdeburg
Version: ---
     Beitrag Verfasst am: 26.03.2014, 12:54     Titel:
  Antworten mit Zitat      
Ich denke das sieht so ganz gut aus. Bei dem halboffenen Intervall bin ich mir nicht ganz sicher. eigentlich ist beim halboffenen die zehn ja nicht mehr drin und bei ganzen zahlen dürfen ja dann nur werte bis 9 auftreten, aber da will ich mich nicht zuweit aus dem Fenster lehnen. auf jeden fall würde ich dann sowas rausbekommen.

Code:

clear all; close all;clc

C=round(0+10*(rand(100,100)));
D=round(0+10*(randn(100,100)));



AC=min(min(C)):1:max(max(C));
AD=min(min(D)):1:max(max(D));

for i=1:length(AC)
   
    FC=find(C==AC(i));
    VC(i)=length(FC);

end

for j=1:length(AD)
   
    FD=find(D==AD(j));
    VD(j)=length(FD);
   
end
   
figure(1)
bar(AC,VC)

figure(2)
bar(AD,VD)

 


Gruß Christian
_________________

"good manners are just a way of showing other people we have respect for them" (Blast from the Past)

If you can't say somethin' nice ... don't say nothin' at all. (Thumper, Bambi)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Anmerkungen:
- Skripte nicht mit clear all beginnen. Das löscht auch Haltepunkte und ist eigentlich nie eine gute Idee. Wenn, dann nur clear.
- Die Werte in C werden so nicht gleichverteilt sein: die 0 wird öfter als die 1 vorkommen, und auch die 10 wird vorkommen. So ist's richtig:
Code:
C=floor(0+10*(rand(100,100)));

- Die Schleifen sind hier nicht nötig. Man kann auch direkt mit hist arbeiten, z.B.
Code:
VC = hist(C(:), AC);

Wenn man das Rückgabeargument weglässt, hat man direkt das Balkendiagramm.
Das scheint aber selbst dem Aufgabensteller nicht klar gewesen zu sein ;)

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2014, 00:05     Titel:
  Antworten mit Zitat      
Danke euch beiden für die Antworten, langsam blick ich jetzt etwas durch...

@Harald: sollte statt dem floor nicht ein fix Befehl verwendet werden?
Das mit dem Balkendiagramm verstehe ich, jedoch war das eh nicht gefordert denke ich....

Ich habe das ganze probiert, es funktioniert, wenn ich jedoch VD plotte werden keine negativen Werte angegeben. Der Graph startet bei 0 wo ja eigentlich der Mittelwert sein sollte. Wenn ich die D Matritze alleine im Command Feld öffne, werden negative Werte angegeben. Ist das eventuell weil die schleife j bei 1 und nicht beim minimum Wert von D zu zählen beginnt?!

Danke mfG
Kitingfreak
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.03.2014, 00:51     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich nicht sehr falsch liege, machen floor und fix bei positiven Argumenten dasselbe: ab- bzw. Richtung 0 runden.

Wie "plottest" du VD? Mit
Code:

?
Dann werden eben [1, 2, ...] als x-Werte angenommen. Wenn du andere x-Werte haben willst, musst du sie angeben, z.B.
Code:


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2014, 17:53     Titel:
  Antworten mit Zitat      
Super jetzt funktioniert das so wie ich mir das vorgestellt hab! Very Happy
Eine Frage ist noch offen: Wie kann ich herausfinden wieviel Prozent der Elemente von D sich im Bereich (-s,s) (Standartabweichung) befinden?

Danke für die Hilfe!

MfG Kitingfreak
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Code:


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2014, 21:05     Titel:
  Antworten mit Zitat      
Guten Abend Harald,
danke für deine Antwort. Ich bin wie gesagt ein matlab neuling, aber fehlt da nicht die untere Grenze -s oder ist das in der Formel schon implementiert?! Daran bin ich nämlich mit meinen bisherigen Versuchen vor deinem post gescheitert.....
Bei der Anwendung deiner Formel kommt jedoch ein Wert um 95% heraus der allerdings recht gut hinkommt denk ich!
Danke mfG
kitingfreak
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

hat mit MATLAB an sich wenig zu tun:
x \in (-s, s) \rightarrow |x| < s

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.