Diagonaldominante Matrix < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 00:02 So 02.01.2011 | Autor: | ssgr |
Ich soll in Matlab eine zufällige Matrix A erstellen, die diagonaldominant ist.
Gibt es dazu einen Befehl?
Die Matrix hat 1000 Zeilen und Spalten, deshalb weiß ich jetzt nicht, wie ich das am besten machen kann.
Ich würde mich freuen, wenn mir jemand weiterhelfen kann!
Vielen Dank!
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Eine Funktion kenne ich nicht. Aber das selber zu schreiben ist auch nicht grad schwer. Du erzeugst dir eine zufällige Matrix und änderst die Hauptdiagonale um:1: | function D = diagdom( n,min,max )
| 2: | D=randi([min,max],n,n);
| 3: | EPS=2;
| 4: | for i=1:1:n
| 5: | sum=0;
| 6: | for j=1:1:n
| 7: | if j==i
| 8: | continue;
| 9: | end
| 10: | sum =sum+ abs(D(i,j));
| 11: | end
| 12: | sig = randi([0,1],1);
| 13: | D(i,i)=((-1)^sig)*(sum+EPS);
| 14: | end
| 15: | end
| Es gibt keine einheitliche Definition von Diagonaldominanz.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 14:43 Mo 03.01.2011 | Autor: | ssgr |
Hallo wieschoo!
Vielen Dank für deine Hilfe.
Ich habe noch eine kleine Frage: Was ist "min" und "max"?
Viele Grüße!
|
|
|
|
|
Hi,
ich kommentiere den (leicht veränderten) Quelltext noch einmal aus:
1: | function D = diagdom( n,min,max )
| 2: | // Parameter n = Groesse der matrix
| 3: | // Eintraege der Matrix werden zufällig aus der Menge {min,min+1,...,max-1,max\ gezogen
| 4: | D=randi([min,max],n,n);
| 5: | // D ist diese Matrix
| 6: | for i=1:1:n
| 7: | // fuer jede Zeile i
| 8: | sum=0;
| 9: | // Zeilensumme =0
| 10: | for j=1:1:n
| 11: | // fuer jede Spalte j
| 12: | if j==i
| 13: | // ist i=j, dann sind wir auf der Hauptdiagonalen, das ueberspringen wir
| 14: | continue;
| 15: | end
| 16: | // sonst ist Zeilensumme = Zeilensumme + betrag ( Eintrag an Stelle (i,j))
| 17: | sum =sum+ abs(D(i,j));
| 18: | end
| 19: | sig = ((-1)^(randi([0,1],1)); // zu fälliges Vorzeichen + oder -
| 20: | EPS=2; // Korrekturterm unten mehr dazu
| 21: | D(i,i)=sig*(sum+EPS); // Eintrag auf der Hauptdiagonalen an der Stelle (i,i)
| 22: | // = Zeilensumme + EPS (damit dieser dominant wird)
| 23: | end
| 24: | end
|
Du kannst es noch verbessern randi gibt Ganzzahlen zurück. Vielleicht sind dir Gleitkommazahlen lieber.
Das EPS kannst du auch für jeden Eintrag noch einmal zufällig aus dem Intervall [mm]]0,\infty[[/mm] ziehen.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:07 Do 06.01.2011 | Autor: | ssgr |
Danke vielmals für deine Erklärungen!
:)
|
|
|
|