www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Matlab" - Matrix aus n Zeilen erzeugen
Matrix aus n Zeilen erzeugen < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Matrix aus n Zeilen erzeugen: Frage zum Quellcode
Status: (Frage) beantwortet Status 
Datum: 15:26 Mi 02.05.2012
Autor: bmtil

Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hallo, ich bin sehr neu im Gebiet Matlab Programmierung, und habe eine Frage, die vermutlich jeden Matlab Profi zum Lachen bringt.

Und zwar, ich erzeuge mir eine randomisierte dreidimensionale Matrix A:

zum Bsp. so:
a = 0;  &untere Intervallgrenze
b = 1;  &obere Intervallgrenze

A = round(50 * (a + (b-a) * rand(7,7,9)))

Nun möchte ich eine zufällige ganzzahlige reelle Zahl erzeugen, die kleiner ist, als die maximale Anzahl an Zeilen dieser Matrix A, also zwischen 0 und 6.  Wie kann ich das in Matlab eingeben?
hab das mit:
r=round(randn(0,6));
versucht, aber irgendwie klappt es nicht.

desweiteren möchte ich dass mir eine neue Matrix A' erzeugt wird, indem von der alten Matrix A, die ersten r Zeilen genommen werden.

also irgendwie so soll es aussehen:

A'=A(r, r, 9);

Mit freundlichen Grueßen und vielen Dank.


        
Bezug
Matrix aus n Zeilen erzeugen: Antwort
Status: (Antwort) fertig Status 
Datum: 21:18 Mi 02.05.2012
Autor: wieschoo

hi,
> Ich habe diese Frage in keinem Forum auf anderen
> Internetseiten gestellt.
>  Hallo, ich bin sehr neu im Gebiet Matlab Programmierung,
> und habe eine Frage, die vermutlich jeden Matlab Profi zum
> Lachen bringt.
>  
> Und zwar, ich erzeuge mir eine randomisierte
> dreidimensionale Matrix A:
>  
> zum Bsp. so:
>   a = 0;  &untere Intervallgrenze
>   b = 1;  &obere Intervallgrenze
>  
> A = round(50 * (a + (b-a) * rand(7,7,9)))
>

Ich frage mich ob das einfacher geht. Matlab hat ne schlecht Dokumentation m.E. Vielleicht geht auch soetwas wie rand(7,7,[min,max]). Kann ich grad nicht testen.

> Nun möchte ich eine zufällige ganzzahlige reelle Zahl
> erzeugen, die kleiner ist, als die maximale Anzahl an
> Zeilen dieser Matrix A, also zwischen 0 und 6.  Wie kann
> ich das in Matlab eingeben?

Der Befehl ist randi(...) von RandInteger

> hab das mit:
>   r=round(randn(0,6));
>  versucht, aber irgendwie klappt es nicht.
>  
> desweiteren möchte ich dass mir eine neue Matrix A'
> erzeugt wird, indem von der alten Matrix A, die ersten r
> Zeilen genommen werden.
>  
> also irgendwie so soll es aussehen:
>  
> A'=A(r, r, 9);

Das ' transponiert die Matrix. Das geht also nicht. Als erstes würde ich dir zur Verbesserung die Umbennenung
AA=A(r,r,9) vorschlagen

In Wirklichkeit geht das aber so
r=4;
AA = A(1:r,1:r);

>  
> Mit freundlichen Grueßen und vielen Dank.

freundliche Grüße zurück

Bezug
                
Bezug
Matrix aus n Zeilen erzeugen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 14:18 Do 03.05.2012
Autor: bmtil

Vielen Dank für die Antwort.
Irgendwie funktioniert bei meiner 2008a Matlab version der Befehl randi nicht.
Wenn ich eingebe
n = randi (10,100); &erzeuge mir eine Zufallszahl n zwischen 10 und 100

kommt die Fehlermeldung: ??? Undefined function or method 'randi' for input arguments of type 'double'

Bin gerade echt am verzweifeln was das angeht.

Anyway, ich hab jetzt eine etwas veränderte Aufgabe.

Im Pseudocode sieht sie so aus:
Zuerst erzeugt man eine Matrix A (zufaellige Matrix, wie das geht weiss ich nun).
Dann "wuerfelt" man zwei Zahlen.
Erste Zahl k bestimmt den "Startwert", ab der Zeile mit dieser Nummer, werden die Zeilen gepickt.
Die Anzahl der gepickten Zeilen bestimmt die zweite gewürfelte Zahl n. Vorgang wird so oft wiederholt bis die neue Matrix B voll ist.

Leider bin ich gerade voellig verzweifelt an dem schreiben von dem richtigen Code, da ich mit der Matlab syntax voellig ueberfordert bin.

Bezug
                        
Bezug
Matrix aus n Zeilen erzeugen: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:28 Do 03.05.2012
Autor: wieschoo

Das bekommst du schon hin. Poste mal alles, was du meinst schon zu haben. Ich Schau mir das heute den späten Nachmittag an.

Bezug
                                
Bezug
Matrix aus n Zeilen erzeugen: Quellcode
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:20 Do 03.05.2012
Autor: bmtil

a = 0;  &untere Intervallgrenze
b = 1;  &obere Intervallgrenze

A = round(50 * (a + (b-a) * rand(11,11))) &bau mir eine 11x11 zufaellige Matrix

n = randi(1,11) &bau mir eine ganzzahlige Zufallszahl n, im Bereich 1 bis 11

k = randi(1,11) &bau mir eine ganzzahlige Zufallszahl k, im Bereich 1 bis 11

&n = Startwert, ab diesem Startwert werden die Zeilen der Matrix A ausgewaehlt

&k = Anzahl, ab Startwert n, werden k Zeilen genommen und der neuen Matrix B zugeführt

so, ein weiteres Problem, wie sage ich dass die Matrix B, aus den neuen k Zeilen der Matrix A besteht.

Dann, ist das der erste Durchlauf. Beim zweiten Durchlauf müssen wieder n und k gewürfelt, wieder dadurch die Zeilen bestimmt, und den bereits bestehenden Zeilen der Matrix B zugefügt.

Das ganze so lange, bis Matrix B 100 neue Zeilen hat.

Vielen Dank und freundliche Grueße.

Bezug
                        
Bezug
Matrix aus n Zeilen erzeugen: Antwort
Status: (Antwort) fertig Status 
Datum: 21:10 Do 03.05.2012
Autor: wieschoo

Hat länger gedauert.

> Vielen Dank für die Antwort.
>  Irgendwie funktioniert bei meiner 2008a Matlab version der
> Befehl randi nicht.
>  Wenn ich eingebe
> n = randi (10,100); &erzeuge mir eine Zufallszahl n
> zwischen 10 und 100

randi ist im alten Matlab randint

Um eine Zahl [mm] $k\in\{min,\ldots,max\}$ [/mm] zufällig zu wählen geht also
k=randint(1,1,[min,max]);


ich würde also so anfangen

MatrixDimension = 10;    % Matrixgroesse
MinRange = 0;   % A hat Einträge >= MinRange
MaxRange = 5;   % A hat Einträge <=MaxRange


wobei ich mir nicht mehr sicher bin ob > oder >= und < oder <=.

Das zufällige Erzeugen geht also so

A=randint(MatrixDimension,MatrixDimension,[MinRange,MaxRange]);

Die Zielmatrix sollte ersteinmal leer sein

B=[];

jetzt würde ich mir merken, wie viele Zeilen schon besetzt sind
visitedRows = 1; % merken der neu besetzten Zeilen

Probier mal folgenden Misch-Matlab-Pseudo-Code umzusetzen

solange visitedRows kleiner als MatrixDimension
    wähle k zufällig zwischen "1" und "Matrix Dimension-1"
    wähle n zufällig zwischen "1" und "Matrix Dimension-k"
        B = [B;A(k:k+n,:)];
    visitedRows = visitedRows + n;
ende solange



Damit würde folgendes entstehen:

A =
     5     4     5     1
     0     4     3     0
     5     3     0     0
     0     5     1     3
B =
     5     3     0     0
     0     5     1     3
     0     4     3     0
     5     3     0     0
     0     5     1     3

Hoffentlich habe ich richtig verstanden, was du möchtest. Darf man fragen welchen Hitnergrund die Aufgabe hat? Oder ist das "nur" eine Übungsaufgabe?

Bezug
                                
Bezug
Matrix aus n Zeilen erzeugen: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:25 Do 03.05.2012
Autor: bmtil

Vielen Dank fuer die Hilfe.
So hab ich das gemeint.
Der Hintergrund der Aufgabe ist eine groeßere Optimierungsaufgabe.
Es geht darum einen Tabu Search Algorhitmus zu entwickeln, welcher die minimale Konditionszahl einer sogenannten Lead Field Matrix bestimmt.
In der Lead Field Matrix sind bestimmte Magnetfeldsensoren über ihre Positionen verteilt. Das Problem ist, dass in dieser Matrix redundante Informationen enthalten seien können, die Anzahl der Sensoren ist im 4 stelligen Bereich.
Aus dieser Lead Field Matrix muss eben eine neue Matrix erzuegt werden, indem zufaellig Zeilen ausgewaehlt werden. Aus der neuen Matrix wird dann die Condition Number bestimmt, je geringer diese ist, desto hoeher ist der Informationsgehalt. Das ganze ist quasi dann die "neighborhood function" Nachbarschaftsfunktion des Tabu Suche Algorhitmus. Indem diese neue Matrix bestimmt wurde, und die zu der Liste der moeglichen Loesungen zugefuegt wird, versucht dann der Algorhitmus vorherzusagen wie die optimale erzeugte Matrix aus der Lead Field Matrix auszusehen hat, also die geringste Condition Number besitzt.
Und das ist eben ein Teil des großen programms, wie ich eben aus der Lead Field Matrix eine neue zufaellig erzeugen kann, war meine Idee und ich wollte testen.

Ich weiss, ist eine riesengroße Aufgabe und es wird ganz schoen knackig sein, den Kram zu programmieren, vorallem in voellig neuer Syntax. Mit LabView haette ich da nicht solche Probleme ^^.

Mit freundlichen Grueßen

Bezug
                                        
Bezug
Matrix aus n Zeilen erzeugen: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 22:12 Do 03.05.2012
Autor: wieschoo

Cool, danke. Da ist das nicht so "trocken". Gibt es da eventuell ein empfehlenswertes Paper in der Richtung.

Man kann nie genug wissen ;-)

Bezug
                                
Bezug
Matrix aus n Zeilen erzeugen: *freu
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:08 Fr 04.05.2012
Autor: bmtil

Also, hier ist mal meine Umsetzung des Pseudocodes. Hab das ganze intuitiv mit der While-Schleife gebaut:

>> while visitedRows < MatrixDimension
   k=randint(1,1,[1,MatrixDimension-1]); %wähle k (startwert) zwischen 1 und MatrixDimension-1
   n=randint(1,1,[1,MatrixDimension-k]); %wähle n zufällig zwischen "1" und "Matrix Dimension-k"
   B = [B;A(k:k+n,:)];  %Zielmatrix B wird mit zufaelligen Reihen aus der Matrix A befuellt
   visitedRows = visitedRows + n;
end

DAs ist schonmal ziemlich cool.
Ich hoffe ich bin nicht zu sehr auf die Nerven gegangen und hoffe dass ich hier weiterhin Fragen stellen kann/darf, also dass meine Fragen nicht son trivial waren.

<Was die Paper zu der Lead Field Matrix angeht, gibt eigentlich genuegend bei google zu finden, bzw. die Abstracts.

Grueße

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]