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

Zufallsmatrix mit nxm Einträgen aus dem Intervall [0,10]

 

Sabine2346

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2011, 16:35     Titel: Zufallsmatrix mit nxm Einträgen aus dem Intervall [0,10]
  Antworten mit Zitat      
Hallo!
Ich fange grade an, mich mit Matlab auseinander zu setzen und komm teilweise noch nicht so gut klar.

Ich soll ein Programm schreiben, dass einem nach der Anzahl der Spalten(m) und Zeilen(n) fragt, und dann zufällig eine nxm Matrix mit zufälligen REELLEN Zahlen im Intervall zwischen [0,10] erzeugt wird.

Das Programm ist soweit fertig, nur leider habe ich mit ganzen Zahlen gearbeitet. Jetzt komm ich nicht klar, dass es reellen Zahlen sein sollen. Dabei dürfte es doch gar nicht so schwer sein.

Hat jemand eine Idee?


soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2011, 16:39     Titel:
  Antworten mit Zitat      
Wie hast du denn die ganzzahligen Zufallszahlen erzeugt Wink?!
Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
Sabine2346

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2011, 16:46     Titel:
  Antworten mit Zitat      
A=zeros(n,m);
for i=1:n
for j=1:m
A(i,j)= randi(11,1)-1;


so hab ich die ganzen Zahlen erzeugt. ich denke, ich muss rand statt randi benutzen.
Ich hab schon einiges ausprobiert, aber lande nie im Intervall [0,10]...
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2011, 17:03     Titel:
  Antworten mit Zitat      
Genau, du brauchst rand. Hast du dir die Hilfe zu rand durchgelesen? Du erzeugst somit Zufallszahlen im Intervall [0,1]. Wenn du nun mit 10 multiplizierst erhälst du das Intervall[0, 10], also:
Code:
A = rand(m,n)*10;


Zuletzt bearbeitet von soad am 19.11.2011, 17:09, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 19.11.2011, 17:05     Titel:
  Antworten mit Zitat      
Nein, sie benutzt randi und erzeugt die Zufallszahlen im Intervall [1,11] und zieht dann 1 ab. Das sollte richtig sein. Was passt denn daran nicht?

Code:


.. geht bei mir..
Private Nachricht senden Benutzer-Profile anzeigen
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2011, 17:10     Titel:
  Antworten mit Zitat      
@ eupho: Sie möchte ja reelle Zufallszahlen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Sabine2346

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2011, 17:18     Titel:
  Antworten mit Zitat      
ja genau, ich brauche reelle Zahlen.
mit *10 hab ich das auch schon ausprobiert, aber irgendwie funktioniert das alles trotzdem nicht.

mit rand(n,m)*10 kommt immer diese fehlermeldung:
??? Subscripted assignment dimension mismatch.
 
Harald
Forum-Meister

Forum-Meister


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

wenn diese Fehlermeldung kommt, versuchst du vermutlich, diese Matrix einer anderen zuzuweisen, die nicht die passende Dimension hat. Das hat aber nichts mit den Zufallszahlen zu tun.

Einfaches Beispiel:
Code:
z(1:2) = 4:6


3 Elemente an 2 Stellen schreiben --> wird nichts, selbe Fehlermeldung.

Grüße,
Harald
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: 19.11.2011, 22:39     Titel:
  Antworten mit Zitat      
Hallo Sabine,

"rand(n, m)" erzeugt eine Matrix mit Zahlen zwischen 0 und 1, während "randi(n, m)" einen Vektor mit m Elementen zwischen 0 und n erzeugt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 19.11.2011, 22:57     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo Sabine,

"rand(n, m)" erzeugt eine Matrix mit Zahlen zwischen 0 und 1, während "randi(n, m)" einen Vektor mit m Elementen zwischen 0 und n erzeugt.

Gruß, Jan


Ich korrigiere, zwischen 1 und n Smile
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: 19.11.2011, 23:07     Titel:
  Antworten mit Zitat      
Hallo eupho,

Zitat:
Ich korrigiere, zwischen 1 und n

Richtig.
Danke! Es ist sehr hilfreich, wenn aufmerksame Leser sich um Tippfehler kümmern.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sabine2346

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2011, 12:47     Titel:
  Antworten mit Zitat      
Ah danke, ich glaube ich hab ne Lösung gefunden!! :

[ A(i,j)=rand(1:n,1:m)*10;]%

Jetzt bekomme ich endlich meine Matrix mit reellen Einträgen, und auch alles weitere läuft.
Allerdings meckert Matlab immer noch, bevor meine Matrix ausgespuckt wird ( und das so rund 30 mal nacheinander):

Warning: Input arguments must be scalar.

Ich verstehe das Problem nicht. Was ist als Input arguments gemeint? n und m? aber die sind doch skalar, weil das ganze zahlen sind..
 
Sabine2346

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2011, 12:51     Titel:
  Antworten mit Zitat      
Code:
 A(i,j)=rand(1:n,1:m)*10;  
 
Schäfchen
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 23.01.11
Wohnort: Karlsruhe
Version: 2008 a, 2010b
     Beitrag Verfasst am: 20.11.2011, 13:08     Titel:
  Antworten mit Zitat      
du brauchst gar keine for-schleife

Code:
erstellt schon eine n x m Matrix mit zufallseinträgen zw. 0 und 1.
Programmiertechnisch ist die bereits vorgeschlagene Variante
Code:
wesentlich eleganter (ohne for-Schleife)
Private Nachricht senden Benutzer-Profile anzeigen
 
sabine2346

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2011, 13:18     Titel:
  Antworten mit Zitat      
also ich muss ja nicht nur so eine matrix erstellen.
ich muss auch noch die einträge in der matrix, die in den intervallen [3,4] und [8,9] liegen, zählen.

mein programm bislang:

Code:

n=input('Wieviele Zeilen hat die Matrix: ');
m=input('Wieviele Spalten hat die Matrix: ');

    y=0;
    A=zeros(n,m);
    for i=1:n
    for j=1:m
        A(i,j)=rand(1:n,1:m)*10;
        if A(i,j)>=3 && A(i,j)<=4 || A(i,j)>=8 && A(i,j)<=9
            y=y+1;
        end
    end
    end

disp('Die zufällige Matrix A ist: ')
disp(A)    
disp([num2str(y),' Eintrag/Einträge in A ist/sind Elemente aus M'])
 
 
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.