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

prozedur schreiben mit tabelle

 

Toile87
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 13.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2009, 11:33     Titel: prozedur schreiben mit tabelle
  Antworten mit Zitat      
Hey ihr
Ich habe folgende Aufgabe:
(8.3) Schreiben Sie eine Prozedur, die zu einer Liste (beliebiger Länge) von (zufälligen) Zahlen aus der Menge 1 bis 6 eine Tabelle mit einer relativen Häufigkeitsverteilung dieser Zahlen ausgibt.

Diese Liste bekommt man ja durch:
L:=[random(1..6) () $ i=1..50]

Ich dachte mir, ich nehm dann einfach statt 1 und 50 x und y, aber das hier: L:=[random(1..6) () $ i=x..y] will Matlab iwie nicht annehmen woran liegt das?

Und ich weiß auch nicht, wie ich den Rest der Aufgabe hinkriegen soll.
Ich hatte bisher das hier:
F:=proc(x,y)
begin
T:= for i in L do
T[i] := T[i] + 1;
end_for:
T
end_proc

Aber irgendwie haut das alles nicht hin Kann mir da jemand helfen?
Lieben Dank schonmal
Private Nachricht senden Benutzer-Profile anzeigen


Sani
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 03.09.09
Wohnort: Neu-Ulm
Version: R2007b
     Beitrag Verfasst am: 15.09.2009, 13:26     Titel:
  Antworten mit Zitat      
Hallo Toile87,

irgendwie sieht dein Code aus als wäre er in Delphi / Pascal geschrieben, aber definitiv hab ich sowas in MatLab noch nicht gesehen ^^

Ich hab ne Lösung für dich erstellt, kann man bestimmt noch optimieren aber funktioniert so:

Code:

clear all
close all
clc
tic  

    L=round(rand(100,1)*5)+1;       % Liste mit 100 Zufallszahlen von 1 bis 6
    L=sort(L);                      % Liste sortieren
    m=size(L);                      % Größe der Liste ermitteln
    wert=1;
    A=[1 2 3 4 5 6; 0 0 0 0 0 0];
    i=1;
    y=1;
    anzahl=0;
    for i=1:1:m
     if L(i,1)==wert
       anzahl=anzahl+1;
     else
       wert=wert+1;
       A(2,y)=anzahl;
       y=y+1;
       anzahl=1;
     end
    end
    A(2,y)=anzahl;
    hist(L)
    A
toc
 


Zur Erklärung:

Code:


gibt die eine Zufallszahl zwischen 0 und 1 aus. Die Parameter sagen, dass es 100 Werte in einer Spalte sein sollen.
Multipliziert mit 5 ergeben das Werte zwischen 0 und 5.

Code:


rundet mathematisch richtig auf den naheliegenden Integerwert
Da wir Werte zwischen 1..6 und nicht 0..5 haben wollen addieren wir +1

Code:


sortiert die Liste aufwärts gerichtet

Code:


ermittelt die Größe der Liste (Anzahl der Einträge)



A ist der Aufbau der "Lösungstabelle" mit noch 6 Nullen, die vom Ergebnis ersetzt werden.

Dann eine Schleife und eine If-Bedingung - dürfte selbsterklärend sein.

den letzten Wert muss man dann "manuell" in die Lösungsmatrix schreiben, warum weiss ich auf die schnelle jetzt nicht.


Wenn man sich den ganzen Schreibkram sparen möchte kann man auch einfach

Code:


eingeben und Matlab spuckt ein fertiges Diagramm aus...

Den Inhalt kann man auch auslesen mit

Code:


da stehen aber noch ein paar Nullen drin die ich auf die schnelle nicht rausbekommen hab.

Hoffe ich konnte helfen!

Greez

Sani
Private Nachricht senden Benutzer-Profile anzeigen
 
Sani
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 03.09.09
Wohnort: Neu-Ulm
Version: R2007b
     Beitrag Verfasst am: 15.09.2009, 13:32     Titel:
  Antworten mit Zitat      
achso

wenn das eine function mit Rückgabewert werden soll muss man natürlich den Funktionskopf noch ergänzen(es empfiehlt sich alle clear und close-befehle zu entfernen Wink):

Code:
function A = haeufigkeit(L)

tic  

 
    L=sort(L);                      % Liste sortieren
    m=size(L);                      % Größe der Liste ermitteln
    wert=1;
    A=[1 2 3 4 5 6; 0 0 0 0 0 0];
    i=1;
    y=1;
    anzahl=0;
    for i=1:1:m
     if L(i,1)==wert
       anzahl=anzahl+1;
     else
       wert=wert+1;
       A(2,y)=anzahl;
       y=y+1;
       anzahl=1;
     end
    end
    A(2,y)=anzahl;
    hist(L)
    A
toc

end


wobei A die Matrix der Rückgabewerte ist und L die Liste wo du bekommst.



Aufgerufen wird dann Folgendermasen:

Code:

Haeufigkeitsverteilung=haeufigkeit(Liste_mit_Zufallszahlen);
 



dein m-File solltest du dann auch haeufigkeit.m nennen.

Greez
Private Nachricht senden Benutzer-Profile anzeigen
 
Toile87
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 13.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2009, 12:10     Titel:
  Antworten mit Zitat      
ui, das muss ich mir erstmal alles im detail angucken. Ganz ganz lieben Dank!!!!
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 - 2024 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.