Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » C# Determinante bestimmen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen C# Determinante bestimmen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
dennii09
Grünschnabel


Dabei seit: 21.03.2015
Beiträge: 3

C# Determinante bestimmen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hallo,

und zwar möchte/soll ich die Determinanten von Matritzen bestimmen.
Ich möchte dies gerne über for-Schleifen machen, da ich finde, dass man es dadruch bestimmt am einfachsten hat.
Jedoch bin ich mir nicht ganz sicher, wie ich es mache. Für eine 2x2 Matrix habe ich es hinbekommen. Für eine 3x3 Matrix steht mir auch eine Idee im Kopf, jedoch ist der Rechnenweg mir zu lang und ich glaube es gehe auch kürzer.

Mein Code für die 2x2 Matrix sieht so aus, dass ich zwei for-schleifen mache, und eine Variabel soll die Zeilen, die andere die Spalten abarbeiten. Da die Schleifen ja die Variabeln mehrmals durchlaufen, ich aber nur einen Durchlauf benötige unterbreche ich die Schleifen einfach.

Könnt ihr mir helfen, wie man es 1. besser und 2. für eine 3x3 oder höhere Matrix machen kann?

Vielen Dank für eure Hilfe

Meine Ideen:
int[,] matrix = { { 2, 2 }, { 2,10} };


for(int i = 0;i<=matrix.GetLength(0)-1;i++)
{
for(int j=0;j<=matrix.GetLength(1)-1;j++)
{
int s1 = matrix[i, 0]*matrix[i+1,j+1]-matrix[i+1,j]*matrix[i,j+1];

Console.WriteLine(s1);
break;
}
break;
21.03.2015 10:29 dennii09 ist offline E-Mail an dennii09 senden Beiträge von dennii09 suchen Nehmen Sie dennii09 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Für 3x3 gibt es noch Sarrus, für höhere Ordnungen hilft Rekursion.
Du wirst aber recht schnell an die Grenzen kommen, wenn du es mit Unterdeterminanten angehst. Ich würde dir Gauss empfehlen, damit kriegst du es in annehmbarer Zeit hin.

Ich habe das vor einiger Zeit schonmal hier geschrieben, [C# IndexOutOfRangeException Problem]LINK[/URL].

Habe es mal auf dein Problem angepasst:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
private static double Determinante(double[,] matrix) {
	int n = matrix.GetLength (0);
	for (int i = 0; i < n; i++)
	{
		if (matrix[i, i] == 0)
		{
			for (int zeile=i; zeile<n; zeile++) {
				if (matrix [i, zeile] != 0) { //zeile tauschen
					for (int k = 0; k < n; k++) {
						double tmp = matrix [k, i];
						matrix [k, i] = matrix [k, zeile];
						matrix [k, zeile] = tmp;
					}
				}
			}
		}
		if (matrix[i, i] == 0) continue;
		for (int j = i + 1; j < n; j++)
		{
			//0er erzeugen durch Addition
			double faktor = -matrix[j, i] / matrix[i, i];
			for (int k = 0; k < n; k++) {
				matrix [j, k] += faktor * matrix [i, k];
			}
		}
	}
	double result = 1;
	for (int i = 0; i < n; i++) {
		result *= matrix [i, i];
	}
	return result;
}


__________________
Syntax Highlighting fürs Board (Link)
21.03.2015 11:10 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
dennii09
Grünschnabel


Dabei seit: 21.03.2015
Beiträge: 3

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Puh, dass ist erstmal ein großer Brocken für einen, der die Informatik noch nicht so beherrscht. Na gut aber ich werde es schon hinbekommen.

Ich habe allerdings eine Frage bezüglich des Abschnitts, wo der Zeilen Tausch stattfindet. Kannst du mir den mal erklären, wie ich mir das vorstellen kann auch bezüglich der Schleifen?

Vielen Dank für deine Antwort und den Code.
21.03.2015 11:42 dennii09 ist offline E-Mail an dennii09 senden Beiträge von dennii09 suchen Nehmen Sie dennii09 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich tausche die Zeilen i[/i] und [b]zeile miteinander.
Mit k gehe ich die Spalten durch (ich stelle gerade fest, hier könnte ich auch bei i starten, statt bei 0).
Wenn ich den Wert der einen Zeile mit dem aus einer anderen überschreiben will, ist der erste Wert futsch, daher das Zwischenspeichern in tmp.

Bist du vertraut mit dem Gauß Algorithmus? Sonst würde ich dir raten, erst das Verfahren zu verstehen und dann den Code durchzulesen. Im Wikipediaartikel ist noch ein b auf der rechten Seite der Gleichung. Wenn du dir das wegdenkst und dann bei der Dreiecksmatrix das Produkt der Hauptdiagonalen bildest, hast du den Wert der Determinanten.

Edit: um meinen Code zu verstehen, reicht es, wenn du in der wikipedia Kapitel 1.1 liest.

__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 21.03.2015 11:57.

21.03.2015 11:55 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
dennii09
Grünschnabel


Dabei seit: 21.03.2015
Beiträge: 3

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ja mit dem Gauß-Algorithmus bin ich vertraut. Nur es in einen Quellcode zu schreiben braucht dann doch noch bisschen mehr. Aber danke für die Antwort hat mir auf jedenfall sehr geholfen und ich hoffe, dass ich damit dann auch Rechnungen oberhalb 3x3 Matrizen berechnen kann, indem ich deinen Code erweitere.

Vielen Dank für deine Hilfe.
21.03.2015 12:07 dennii09 ist offline E-Mail an dennii09 senden Beiträge von dennii09 suchen Nehmen Sie dennii09 in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » C# Determinante bestimmen