solareclipse
Cadet 2nd Year
- Registriert
- Nov. 2015
- Beiträge
- 19
Hallo zusammen,
ich habe ein mysteriöses Problem:
Ich schreibe einen Gauß-Algorithmus zur Lösung eines beliebig großen LGS und habe Probleme aus der Datei die Werte für die Matrix A (System A*v=rh) einzulesen. Hier ein Code-Ausschnitt:
Die Konsole gibt bei Ausführen des Programms folgendes aus:
Jetzt ist es sehr eigenartig, wenn ich eine zweite Matrix B initialisiere - aber ohne irgend welche Werte zu bestücken - und den Speicher dieser hinterher auch wieder lösche, dann funktioniert auf einmal das Einlesen der Daten in die ursprüngliche Matrix!
Code mit zweiter Matrix:
Jetzt läuft alles wie geschmiert, die erste Matrix wird befüllt und ich kann meinen Gauß laufen lassen...
Kann mir jemand sagen, warum ich eine zweite Matrix brauche, um die erste zum Laufen zu bringen??? Das ist wirklich sehr strange...
Vielen Dank für eure Antworten!!
ich habe ein mysteriöses Problem:
Ich schreibe einen Gauß-Algorithmus zur Lösung eines beliebig großen LGS und habe Probleme aus der Datei die Werte für die Matrix A (System A*v=rh) einzulesen. Hier ein Code-Ausschnitt:
C:
/*-------------------------------------------------------------------------------------------------------------*/
FILE *input;
input = fopen(Dateiname,"r");
if (input!=NULL){
rewind(input);
while ((c=fgetc(input))!=EOF){
if(c=='\n') {zeilenzahl++;}
}
zeilenzahl-=1;
printf("Zeilenanzahl: %d\n",zeilenzahl);
matrix=amatrix(zeilenzahl); //Allokierung Matrix
v=avector(zeilenzahl); //Allokierung Lösungsvektor
rh=avector(zeilenzahl); //Allokierung Rechte Hand Seite
l=avector(zeilenzahl); //Allokierung Rechenquotient für GAUSS;
rewind(input);
for (i=0;i<zeilenzahl;i++){
for(j=0;j<zeilenzahl+1;j++){
if(j!=zeilenzahl){
fscanf(input,"%le",&matrix[i][j]);
}
else if(j==zeilenzahl){
fscanf(input,"%le",&rh[i]);
}
}
}
fclose(input);
}
Die Konsole gibt bei Ausführen des Programms folgendes aus:
Code:
-----Der Name der Einlesedatei lautet: try.txt-----
Zeilenanzahl: -1217253386
Jetzt ist es sehr eigenartig, wenn ich eine zweite Matrix B initialisiere - aber ohne irgend welche Werte zu bestücken - und den Speicher dieser hinterher auch wieder lösche, dann funktioniert auf einmal das Einlesen der Daten in die ursprüngliche Matrix!
Code mit zweiter Matrix:
C:
/*-------------------------------------------------------------------------------------------------------------*/
FILE *input;
input = fopen(Dateiname,"r");
if (input!=NULL){
rewind(input);
while ((c=fgetc(input))!=EOF){
if(c=='\n') {zeilenzahl++;}
}
zeilenzahl-=1;
printf("Zeilenanzahl: %d\n",zeilenzahl);
matrix=amatrix(zeilenzahl); //Allokierung Matrix
v=avector(zeilenzahl); //Allokierung Lösungsvektor
rh=avector(zeilenzahl); //Allokierung Rechte Hand Seite
l=avector(zeilenzahl); //Allokierung Rechenquotient für GAUSS;
bmatrix=amatrix(zeilenzahl); //zweite Matrix, eigentlich unnütz! Sorgt aber dafür, dass die erste Matrix auf einmal Werte bekommt!??
v2=avector(zeilenzahl);
rh2=avector(zeilenzahl);
l2=avector(zeilenzahl);
free(bmatrix);
free(v2);
free(rh2);
free(l2);
rewind(input);
for (i=0;i<zeilenzahl;i++){
for(j=0;j<zeilenzahl+1;j++){
if(j!=zeilenzahl){
fscanf(input,"%le",&matrix[i][j]);
}
else if(j==zeilenzahl){
fscanf(input,"%le",&rh[i]);
}
}
}
fclose(input);
}
Kann mir jemand sagen, warum ich eine zweite Matrix brauche, um die erste zum Laufen zu bringen??? Das ist wirklich sehr strange...
Vielen Dank für eure Antworten!!