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

Zufallszahlen aus Gleichverteilung mit Mittelwert

 

fMRI_gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2013, 12:30     Titel: Zufallszahlen aus Gleichverteilung mit Mittelwert
  Antworten mit Zitat      
Liebe alle,

ich möchte aus einer Gleichverteilung 60 (ganzzahlige) Zufallszahlen ziehen, die 2 Kriterien erfüllen müssen: Intervall zwischen 2 und 9 sowie Mittelwert von M = 6.

Mit dem Code hier kriege ich meine 60 gleichverteilten Zahlen im Intervall 2-9, aber das mit dem Mittelwert ist hier noch nicht implementiert:

a = 2;
b = 9;
var = floor(a+(b-a+1)*rand(1,60));

Wie kann ich das lösen?

Danke!


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.09.2013, 12:51     Titel:
  Antworten mit Zitat      
hmm das ist dann nicht wirklich zufall. das ist als wenn ich sage denk dir 2 belibige zahlen aber die summe muss 8 sein. wenn ich eine hab ist die andere bestimmt und nicht zufall.
mir kommen da mehrere ideeen um sowas halbzufälliges zu erzeugen du könntest ca 25 zahlen aus der unteren hälfte zufällig nehmen und 25 aus der oberen hälfte und dich dann die letzen 10 schritte an den mittelwert annähren wobei der letze schritt dann berechnet ist. was du auch machen könntest wäre wirklich zufällig alle werte zu nehmen und dann in einer while schleife zu testen. das kann aber von 1 sec bis ewig dauern.
so in der art
Code:
clear
b=0.1;
while mod(b,1)~=0 || b>9 ||b<2
A=randi(8,1,59)+1;
b=360-sum(A);
end
A=[A,b]

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
fMRI_gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2013, 13:07     Titel:
  Antworten mit Zitat      
Hey, die Variante klappt bei mir tatsächlich innerhalb von ca. 30 Sekunden Smile Allerdings ist der Range anschließend 1-8 und nicht 2-9.

Wenn ich die Zeile so ändere:
Code:
A=randi(9,2,59)+1;
, kommt allerdings "??? Operands to the || and && operators must be convertible to logical scalar values". Wo müsste man das anpassen?

Außerdem ist mir folgendes aufgefallen:
Wenn man die 60 generierten Zahlen in SPSS auf Gleichverteilung testet (mittels Kolmogorov-Smirnov Test), kommt raus, dass die Verteilung KEINE Gleichverteilung ist. Wie kann das sein?
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.09.2013, 13:08     Titel:
  Antworten mit Zitat      
Hallo

so z.B:

Code:

a = 2
b = 9
v = 0
while mean(v)> 6.01 || mean(v)< 5.99
   v = floor(a+(b-a+1)*rand(1,60));
end

fprintf('Mittelwert %f\n', mean(v))
 



PS: VAR ist reservieretes Wort in Matlab für Varianz-Berechnung.
Vermeide bei der Variablennamensgebung VAR als Variblenname zu nutzen
Private Nachricht senden Benutzer-Profile anzeigen
 
fMRI_gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2013, 13:12     Titel:
  Antworten mit Zitat      
Hm nee, das führt zu einem merkwürdigen Output:

Bildschirmfoto 2013-09-10 um 13.11.02.png
 Beschreibung:

Download
 Dateiname:  Bildschirmfoto 2013-09-10 um 13.11.02.png
 Dateigröße:  22.97 KB
 Heruntergeladen:  598 mal
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.09.2013, 13:12     Titel:
  Antworten mit Zitat      
Zitat:
Allerdings ist der Range anschließend 1-8 und nicht 2-9.

das sollte nicht so sein.
dafür ist die +1 da. da muss dir ein fehler beim abschreiben unterlaufen sein. deine lösung
Code:
A=randi(9,2,59)+1;

liefer eine 2x59 matirx mit den werten 2-10 was doch nicht das ist was du willst glaube ich.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.09.2013, 13:13     Titel:
  Antworten mit Zitat      
Zitat:
Hm nee, das führt zu einem merkwürdigen Output:

was ist an dem output bitte merkwürdig?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.09.2013, 13:22     Titel:
  Antworten mit Zitat      
fMRI_gast hat Folgendes geschrieben:
Hm nee, das führt zu einem merkwürdigen Output:



Lieber Gast

der Output ist nicht merkwürdig.
Erste 3 Ausgabewerte sind Initialisierungen von a,b,v,
das sind 3 erste Zeilen, um WHILE-Schleife zum Laufen zu bringen
Am Ende zeige ich nur das der Vektor v den Mittelwert 6 hat

Schaue doch in v rein, das sind 60 Zufallswerte, welche deine Kriterien erfüllen. Einfach v eintippen, oder whos



Code:

a = 2;
b = 9;
v = 0;
while mean(v)> 6.01 || mean(v)< 5.99
   v = floor(a+(b-a+1)*rand(1,60));
end

fprintf('Mittelwert %f\n', mean(v))


 
Private Nachricht senden Benutzer-Profile anzeigen
 
fMRI_gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2013, 13:53     Titel:
  Antworten mit Zitat      
Entschuldigung und danke für den Zusatz (v anschauen!) - bin nicht wirklich firm in Matlab und habe erwartet, dass die Zahlen geprintet werden. Es funktioniert prima!

Was mich immer noch stutzig macht, ist, dass der Kolmogorov-Smirnov Test signifikant wird (-> signifikant von einer Gleichverteilung abweicht). Ich habe die 60 Zahlen als Variable in SPSS analysiert.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.09.2013, 14:16     Titel:
  Antworten mit Zitat      
Hallo

habe jetzt nachgeschaut mit RAND bekommst nur Normalverteilung
Für die Gleichverteilung brauchst du andere Funktion UNIFCDF/UNIFRND, dafür ist aber Statistik Tbx notwendig

schaue aber noch hier:

http://www.gomatlab.de/ganzzahlige-.....-im-intervall-t14593.html

Zuletzt bearbeitet von denny am 10.09.2013, 14:37, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.09.2013, 14:24     Titel:
  Antworten mit Zitat      
das problem sollte bei meiner lösung aber nicht auftreten.
_________________

richtig Fragen
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: 10.09.2013, 14:40     Titel:
  Antworten mit Zitat      
Hallo denny,

RAND erzeugt gleichverteilte Zahlen, RANDN normalverteilte.

Hallo fRMI_gast,

Einen möglichst zufälligen Vektor mit eine festgesetzten Summe kannst man mit http://www.mathworks.com/matlabcent.....om-vectors-with-fixed-sum erzeugen.

Gruß, Jan
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.