Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Determinante

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> C/C++
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Paul_H



Anmeldungsdatum: 01.02.2006
Beiträge: 52
Wohnort: Bonn

BeitragVerfasst am: 11. Mai 2006 18:40    Titel: Determinante Antworten mit Zitat

Hallo Leute,
wir haben kürzlich mit C angefangen (Gottseidank), und sollen nun ein Programm schreiben, welches folgende Matrizen multipliziert und anschließend nach Sarrus die Determinante der Ergebnismatrix berechnet.




Nun ja, an sich kein Problem. Mein Programm gibt jetzt meines Erachtens auch das richtige Ergebnis aus, aber die Programme von ein paar Studienkollegen geben in jedem Fall Null aus. Vielleicht seht ihr euch mein Programm mal an und sagt mir, was ihr davon haltet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paul_H



Anmeldungsdatum: 01.02.2006
Beiträge: 52
Wohnort: Bonn

BeitragVerfasst am: 11. Mai 2006 18:52    Titel: Antworten mit Zitat

Ist die Dateierweiterung nun für jeden ersichtlich???

Ich kann nur drauf zugreifen, wenn ich eingeloggt bin.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paul_H



Anmeldungsdatum: 01.02.2006
Beiträge: 52
Wohnort: Bonn

BeitragVerfasst am: 11. Mai 2006 18:54    Titel: Antworten mit Zitat

#include <stdio.h>
#include <math.h>

main() {
int a=0;
int d=0;
int b=0;
int c=1;

double x[3][4];
double y[4][3];
double z[3][3];
double det;

/* Füllen der Matrizen mit dem Testbeispiel */

/* A */
for(a=0; a<4; a++){

for(b=0; b<3; b++){ /* fülle Matrize mit 1...12 auf */
y[a][b] = c;
c++;} }

/* B */
c=1;
for(a=0; a<3; a++){

for(b=0; b<4; b++){ /* fülle Matrize mit Wurzel_1... */
x[a][b] = sqrt(c); /* ...Wurzel_12 auf */
c++;} }


/* Berechnung von C durch Matrizenmultiplikation */

c=0;
d=0;

for(a=0; a<3; a++){ /* berechne nach bekannter Art und Weise*/
for(b=0; b<3; b++){ /* (X * Y) bzw. (B * A) */
z[a][b] = x[a][c]* y[d][b]+ x[a][c+1]* y[d+1][b]+
x[a][c+2]* y[d+2][b]+ x[a][c+3]* y[d+3][b];}
}

/* Ausgabe Matrix C */
printf("\nZ = X * Y: \n\n"); /* gebe schnell Matrix Z bzw. C mit 5 Nach- */
for(a=0; a<3; a++){ /* kommastellen aus */
for(b=0; b<3; b++){
printf("%.5f ", z[a][b]);} printf("\n");}


/* Berechnung der Det nach 'Sarrus' */

det = z[0][0]* z[1][1]* z[2][2]
+ z[0][1]* z[1][2]* z[2][0]
+ z[0][2]* z[1][0]* z[2][1]
- z[2][0]* z[1][1]* z[0][2]
- z[2][1]* z[1][2]* z[0][0]
- z[2][2]* z[1][0]* z[0][1];

printf("\n detC = %.28f \n", det); /*Det verdammt klein*/

} /*copyright 2006*/


Zuletzt bearbeitet von Paul_H am 11. Mai 2006 22:23, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tobias



Anmeldungsdatum: 15.02.2005
Beiträge: 149

BeitragVerfasst am: 11. Mai 2006 21:45    Titel: Antworten mit Zitat

Der exakte Wert der Determinante ist nach meiner Berechnung 0.

Wenn du einen sehr kleinen Wert erhältst, ist das nicht unbedingt auf einen Fehler im Algorithmus zurückzuführen sondern kann ein Rundungsfehler wegen fehlender Genauigkeit sein.

Kannst du mir erklären, was das .28 in printf "%.28f" macht?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paul_H



Anmeldungsdatum: 01.02.2006
Beiträge: 52
Wohnort: Bonn

BeitragVerfasst am: 11. Mai 2006 21:57    Titel: Antworten mit Zitat

ja klar, also das .28f sorgt dafür, dass 28 Stellen nach dem Komma ausgegeben werden.

Wahrscheinlich ist der Wert der Determinante wirklich null, und der Wert entsteht durch zwangsläufiges Abrunden bei kritischen Wurzeln.

Da ich aber diesbezgl. nicht sicher war, und ich halt zufällig entdeckt hab, dass viele Stellen nach dem Komma (bis zur 28ten) tatsächlich noch Ziffern ungleich null auftauchen, hat mich das doch ziemlich verwirrt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> C/C++ Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen