WinFuture-Forum.de: Stufenform Mittels Gauss-algorithmus - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Stufenform Mittels Gauss-algorithmus


#1 Mitglied ist offline   mush 

  • Gruppe: aktive Mitglieder
  • Beiträge: 895
  • Beigetreten: 29. Mai 07
  • Reputation: 7

  geschrieben 31. Mai 2009 - 18:09

Nabend.

Ich habe die Schulaufgabe bekommen, den Gauss-Algo für Matrizen zu programmieren, sodass man die Dreicksform (Stufenform) erhält.

Ich habe bereits ein einigermaßen kompletten Programm geschrieben welches auch teilweise funktioniert. Allerdings gibt er nicht immer das richtige Ergebnis aus.

Mein bisheriges Programm habe ich angehangen.

Es wäre nett wenn sich das mal jemand ansehen könnte.

PS: Ja ich weiß wie katastrophal der bisherige Code aussieht, aber mit blieb noch nicht die Zeit für Optimierungsversuche.

Dieser Beitrag wurde von mush bearbeitet: 02. Juni 2009 - 15:19

insane in the membrane
0

Anzeige



#2 Mitglied ist offline   mush 

  • Gruppe: aktive Mitglieder
  • Beiträge: 895
  • Beigetreten: 29. Mai 07
  • Reputation: 7

geschrieben 02. Juni 2009 - 01:22

*push*
insane in the membrane
0

#3 Mitglied ist offline   W@yne 

  • Gruppe: aktive Mitglieder
  • Beiträge: 889
  • Beigetreten: 20. Juli 05
  • Reputation: 0

geschrieben 02. Juni 2009 - 01:42

Pfui, bah, Java...

Wann genau gibt es denn nicht das richtige Ergebnis aus? Vielleicht würde das beim Fehlersuchen helfen.
0

#4 Mitglied ist offline   mush 

  • Gruppe: aktive Mitglieder
  • Beiträge: 895
  • Beigetreten: 29. Mai 07
  • Reputation: 7

geschrieben 02. Juni 2009 - 15:19

Ich mag Java auch nicht, ich bin allerdings dazu gezwungen es zu benutzen.

Wenn ich die Matrix
2 4 6
1 2 3

eingebe bekomme ich die richtige Ausgabe:
[1,000000] [2,000000] [3,000000]
[0,000000] [0,000000] [0,000000]


Wenn ich allerdings foldendes eingebe:
1 2 3 4
2 4 6 8
1 3 4 6

bekomme ich fälschlicher Weise:
[1,000000] [2,000000] [3,000000] [4,000000]
[0,000000] [1,000000] [1,000000] [2,000000]
[0,000000] [0,000000] [0,000000] [0,000000]


Richtig wäre:
[1,000000] [0,000000] [1,000000] [0,000000]
[0,000000] [1,000000] [1,000000] [2,000000]
[0,000000] [0,000000] [0,000000] [0,000000]


Gruß.
insane in the membrane
0

#5 Mitglied ist offline   W@yne 

  • Gruppe: aktive Mitglieder
  • Beiträge: 889
  • Beigetreten: 20. Juli 05
  • Reputation: 0

geschrieben 02. Juni 2009 - 15:45

Hm, du zählst die Zeilen ja nur hoch, prüfst aber nach einem Durchlauf nicht, ob die verarbeitete Zeile vielleicht auf eine vorige Zeile passen könnte, oder?
Versuch mal, multipass() rekursiv zu verwenden.
0

#6 Mitglied ist offline   mush 

  • Gruppe: aktive Mitglieder
  • Beiträge: 895
  • Beigetreten: 29. Mai 07
  • Reputation: 7

geschrieben 02. Juni 2009 - 16:14

Wie genau meinst du das?

Ich dachte bislang ich sorge mit den zwei for-Schleifen in multipass() für die notwendige Rekursion.

Ich befürchte dass es außerdem in gaussian() ein Problem gibt, da die oberste Zeile in keinem Fall angetastet wird und ausschließlich als Referenz genommen wird.

Dieser Beitrag wurde von mush bearbeitet: 02. Juni 2009 - 16:15

insane in the membrane
0

#7 Mitglied ist offline   mush 

  • Gruppe: aktive Mitglieder
  • Beiträge: 895
  • Beigetreten: 29. Mai 07
  • Reputation: 7

geschrieben 04. Juni 2009 - 12:40

*push*
insane in the membrane
0

#8 Mitglied ist offline   W@yne 

  • Gruppe: aktive Mitglieder
  • Beiträge: 889
  • Beigetreten: 20. Juli 05
  • Reputation: 0

geschrieben 04. Juni 2009 - 13:12

Nö, for-Schleifen sind keine Rekursion.
0

#9 Mitglied ist offline   Ludacris 

  • Gruppe: Moderation
  • Beiträge: 4.666
  • Beigetreten: 28. Mai 06
  • Reputation: 218
  • Geschlecht:Männlich

geschrieben 08. Juni 2009 - 23:52

meinst du sowas da?


	A = input(' Matrix A eingeben: ');
	b = input(' Vektor b eingeben: ');
	 
	n=length(b);
	 
	% In Dreiecksform umwandeln
	for k=1:n-1
	for i=k+1:n
	if(A(k,k) == 0) then
	error(' Es befinden sich 0-Elemente auf der Hauptdiagonalen ');
	end
	A(i,k) = A(i,k) / A(k,k);
	b(i) = b(i) - b(k)*A(i,k);
	for j=k+1:n
	A(i,j) = A(i,j) - A(k,j)*A(i,k);
	end
	end
	end
	 
	% Rueckwertssubstitution
	x=zeros(n,1);
	for i=n:-1:1
	x(i) = (b(i)-A(i,i+1:n)*x(i+1:n)) / A(i,i);
	end
	x


(das ganze wurde in matlab geschrieben)

Dieser Beitrag wurde von Ludacris bearbeitet: 08. Juni 2009 - 23:56

0

#10 _scy89_

  • Gruppe: Gäste

geschrieben 10. Juli 2009 - 23:09

ok es ist spät und es kann sein das ich hinterm mond stehe, man möge mir diese vllt dumme Frage nachsehen.
Das Gaußsche Eliminationsverfahren ist doch für nxn matrizen. Wie sollen denn die Stufenfrom bei mxn matrizen aussehen, und wo ist das die Diagonal?

Und müsste bei deiner 2ten Matrix nicht auf jedenFall die 2te Zeile eine null Zeile sein[(Zeile2) - 2*(Zeile1)].
Bei deiner ersten MAtrix müsste bei mir auch < <2,4,6>, <0,0,0> > rauskommen und nicht < <1,2,3>, <0,0,0> >. Das ist zwar fast dasselbe, aber der Wert der Matrix ist verändert und das darf eigentlich nicht sein.
0

#11 Mitglied ist offline   W@yne 

  • Gruppe: aktive Mitglieder
  • Beiträge: 889
  • Beigetreten: 20. Juli 05
  • Reputation: 0

geschrieben 10. Juli 2009 - 23:11

Bei mxn ist die Diagonale nicht komplett...
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0