Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Matrizenrechnung: Gauß'scher Algorithmus

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
03.12.2003, 18:20 Uhr
~kool
Gast


Hallo!
In der Schule haben wir im EDV-Unterricht folgendes gemacht:
Matrizenrechnung - Gauß'scher Algorithmus als Besipiel - Lösung von Gleichungen mit beliebig vielen Unbekannten:

Hat man nun z.B. folgende 2 Gleichungen:
3x+3y=24
2x+12y=66

Dann haben wir folgende Lösungs-bzw. Einheitsmatrix:
1 0 0
0 1 0
0 0 1

Nun habe ich ein Programm geschrieben, in das man 2 Gleichungen in einen StringGrid eingeben kann und per Klick auf einen Button werden die Unbekannten ermittelt. Jedoch klappt das Ganze nicht so wie ich mir das vorgestellt habe... Hier mal mein Code:


C++:
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
StringGrid1->Cells[0][0]="X";
StringGrid1->Cells[1][0]="Y";
StringGrid1->Cells[2][0]="Ergebnis";
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
double a[3][3], tausch;
int j, i;

for (i=1; i<3; i++)
  for (j=0; j<3; j++)
    a[j][i]=StringGrid1->Cells[j][i].ToDouble();

/* a[0][1] soll 1 werden */
tausch=a[0][1];
for (j=0; j<3; j++)
  a[j][1]=a[j][1]/tausch;

/* a[0][2] soll 0 werden */
tausch=a[0][2]; // tausch = Multiplikator
for (j=0; j<3; j++)
  a[j][1]=a[j][2]-a[j][1]*tausch;

/* a[1][2] soll 1 werden */
tausch=a[1][2];
for (j=0; j<3; j++)
  a[j][2]=a[j][2]/tausch;

/* a[1][1] soll 0 werden */
tausch=a[1][1];
for (j=0; j<3; j++)
  a[j][2]=a[j][1]-a[j][2]*tausch;

/* Ausgabe */  
for (i=1; i<3; i++)
  for (j=0; j<3; j++)
    StringGrid1->Cells[j][i]=a[j][i];
}
//---------------------------------------------------------------------------



Hoffe hier hat sich jemand schonmal mit sowas beschäftigt und kann mir weiterhelfen...
Mfg, Kool
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.12.2003, 20:51 Uhr
Pablo
Supertux
(Operator)


Und was klappt nicht? Kannst du nicht kompilieren? Oder was ist denn das Problem?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.12.2003, 22:57 Uhr
Belisar



Muss sagen, irritiert mich schonmal, daß deine Matrix 3x3 is obwohl du im R2 bist. Also nur 2 unbekannte hast.

Is jetzt nicht unbedingt der Gaußalgorithmus, der jetzt kommt (weiss nicht mehr genau so wie der geht):

|3 3||x| = |24|
|2 12||y|= |66|

schreibt man auch häufig als:

|3 3 |24| dann :3
|2 12 |66| -2*1Zeile

1 1 | 8
0 10 | 50 :10

1 1 | 8 - 2 zeile
0 1 | 5

1 0 | 3
0 1 | 5 also x = 3 und y =5

100
010
001 hat meiner meinung nach keine aussage zu deinem Beispiel Gleichungssystem.

Und mein programm würd dann die 1 Zeile normieren, in dem diese durch den WErt des 1 Elementes geteilt wird. dann die 1 Zeile von der 2. sooft abziehen, daß das erste element der 2. Zeile 0 ist. dann die 2. zeile wieder normieren indem ich durch den wert des 2 elementes teile..
und dann sooft die 2. Zeile von der ersten abziehen, daß da als zweites ne 0 steht. dann biste fertig.

Schlagt mich wenn ich mich irre...

Dieser Post wurde am 03.12.2003 um 23:24 Uhr von Belisar editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.12.2003, 09:22 Uhr
derphilipder



Beim Gauss' schen Eleminationsverfahren wandeld man solange um, bis man eine obere Dreieckasmatrix hat, also sowas:

2 2 7
0 8 5
0 0 6

Dann setzt man einfach von unten nach oben ein.
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.12.2003, 09:34 Uhr
Belisar



Aha und was soll bitte ne 3x3 Matrix bei nur zwei Variablen x und y?
Kann sein, daß ich mich völlig irre, aber für mich ergibt das keinen Sinn...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.12.2003, 16:06 Uhr
derphilipder



War doch nur n Beispiel...dann sieht das Ding eben so aus:

2 7
0 3
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.12.2003, 16:14 Uhr
Belisar



Ja, ok. Ich weiss nur nicht, ob kool genau weiss, wie das funktioniert.
Weil wenn er das nicht weiss, kann er es schlecht programmieren.


Zitat:

Hat man nun z.B. folgende 2 Gleichungen:
3x+3y=24
2x+12y=66

Dann haben wir folgende Lösungs-bzw. Einheitsmatrix:
1 0 0
0 1 0
0 0 1



<---- Sieht mir jedenfalls danach aus, als ob er es nicht verstanden hätte. Den Code des Programms hab ich mir gar nicht angeschaut.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.12.2003, 17:16 Uhr
~kool
Gast


@ Belisar: Natürlich hab ichs verstanden! Die Einheitsmatrix ist die Matrix in die man die Gleichungen umformen will!!!
Haben wir diese Gleichungen:
3x+3y=24
2x+12y=66

Muss am Ende folgendes rauskommen:
1 0 3 // 3=x
0 1 5 // 5=y

Und was die Einheitsmatrix genau ist hat dir ja derphilippder erklärt!

In dem hier geposteten Code habe ich in meinem StringGrid in der Zeile 0 noch eine fixedrow in der Überschriften stehen:
X-Koeff Y-Koeff Ergebnis

Da das so irgendwie nicht funktioniert hat habe ich das Programm nochmal neu geschrieben, nämlich ohne diese eine fixedrow und jetzt gehts!!!


C++:
int i, j;
double a[3][2], tausch;

// einlesen
for (i=0; i<2; i++)
  for (j=0; j<3; j++)
    a[j][i]=StringGrid1->Cells[j][i].ToDouble();

// a[0][0] soll 1 werden
tausch=a[0][0];
for (j=0; j<3; j++)
  a[j][0]=a[j][0]/tausch;

// a[0][1] soll 0 werden
tausch=a[0][1];
for (j=0; j<3; j++)
  a[j][1]=a[j][1]-a[j][0]*tausch;

// a[1][1] soll 1 werdem
tausch=a[1][1];
for (j=0; j<3; j++)
  a[j][1]=a[j][1]/tausch;

// a[1][0] soll 0 werden
tausch=a[1][0];
for (j=0; j<3; j++)
  a[j][0]=a[j][0]-a[j][1]*tausch;

// ausgeben
for (i=0; i<2; i++)
  for (j=0; j<3; j++)
    StringGrid1->Cells[j][i]=a[j][i];



Bei meinem anderen Code trat immer das Problem auf, dass mir irgendwelche falschen Zahlen am Ende ausgegeben wurden... Werd mich da gleich auch nochmal dran setzen...
Mfg, Kool
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.12.2003, 17:46 Uhr
derphilipder



Ich habe erklärt was die einheitsmatrix ist?
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
04.12.2003, 18:02 Uhr
Belisar



Kein Grund gleich mit drei Ausrufezeichen zu kommen!!! war ja nicht klar, daß du das wusstest.
Und einheitsmatrix hat derphilipder auch nicht erklärt, sondern obere Dreiecksmatrix.

Dann setz dich mal schön dran.

Dieser Post wurde am 04.12.2003 um 18:12 Uhr von Belisar editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: