Μέθοδος απαλοιφής του GAUSS για λύση γραμμικών εξισώσεων.

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
skoufos
Δημοσιεύσεις: 20
Εγγραφή: 10 Δεκ 2010 19:02

Μέθοδος απαλοιφής του GAUSS για λύση γραμμικών εξισώσεων.

Δημοσίευση από skoufos » 10 Δεκ 2010 19:23

Η άσκηση έχει να κάνει με τη δημιουργία προγράμματος σε γλώσσα c το οποίο θα λύνει γραμμικές εξισώσεις με τη μέθοδο απαλοιφής του Gauss. η εκφώνηση έχει ώς εξής:
Ζητείται η ανάπτυξη ενός προγράμματος που θα επιλύει γραμμικό σύστημα εξισώσεων με τη μέθοδο Gauss. τα δεδομένα εισόδου θα διαβάζονται απο αρχείο κειμένου με το όνομα 'Gauss_in.txt' . Η έξοδος του προγράμματος θα ειναι ενα αρχείο με όνομα 'Gauss_out.txt'.
Τα περιεχόμενα του αρχείου θα είναι ένας αριθμός σε κάθε γραμμή.
Στην πρώτη γραμμή περιέχει το πλήθος των εξισώσεων και στη συνέχεια τους συντελεστές κάθε εξίσωσεις γραμμή - γραμμή.

παραδειγμα
για την εξίσωση
3*χ1+4*χ2=3
χ1+2*χ2=1

το αρχείο θα περιέχει τα ακόλουθα δεδομένα:
2
3
4
3
1
2
1.

ο κώδικας που έχω γραψει είναι ο εξής

#include <stdio.h>

int n;
float a[10][11];

void forwardSubstitution() {
int i, j, k, max;
float t;
for (i = 0; i < n; ++i) {
max = i;
for (j = i + 1; j < n; ++j)
if (a[j] > a[max])
max = j;

for (j = 0; j < n + 1; ++j) {
t = a[max][j];
a[max][j] = a[j];
a[j] = t;
}

for (j = n; j >= i; --j)
for (k = i + 1; k < n; ++k)
a[k][j] -= a[k]/a * a[j];

/* for (k = 0; k < n; ++k) {
for (j = 0; j < n + 1; ++j)
printf("%.2f\t", a[k][j]);
printf("\n");
}*/
}
}

void reverseElimination() {
int i, j;
for (i = n - 1; i >= 0; --i) {
a[n] = a[n] / a[i][i];
a[i][i] = 1;
for (j = i - 1; j >= 0; --j) {
a[j][n] -= a[j][i] * a[i][n];
a[j][i] = 0;
}
}
}

void gauss() {
int i, j;

forwardSubstitution();
reverseElimination();

for (i = 0; i < n; ++i) {
for (j = 0; j < n + 1; ++j)
printf("%.2f\t", a[i][j]);
printf("\n");
}
}

int main(int argc, char *argv[]) {
int i, j;

FILE *fin = fopen("gauss.in", "r");
fscanf(fin, "%d", &n);
for (i = 0; i < n; ++i)
for (j = 0; j < n + 1; ++j)
fscanf(fin, "%f", &a[i][j]);
fclose(fin);

gauss();

return 0;
}

το πρόβλημα είναι πως εχω μπερδέψει το σημείο που λέει πως θα περνει τα δεδομένα απο αρχείο και θα τα δινει πάλι μεσω αρχείου.
καμια βοήθεια για να λειτουργήσει σωστά με βάση την εκφώνηση??
ευχαριστώ πολυ!!!!

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Μέθοδος απαλοιφής του GAUSS για λύση γραμμικών εξισώσεων.

Δημοσίευση από virxen75 » 11 Δεκ 2010 01:00

1) διαβάζεις το αρχείο συμπληρώνεις τον πίνακα
2)επιλύεις (αν επιλύεται)
3)στο σημείο που τελειώνει το πρόγραμμα(επιλύεται ή οχι)
θα γράψεις στο αρχείο σου τα δεδομένα του πίνακα που έχεις καταλήξει με την
ίδια μορφή που το διάβασες.Δηλαδή στην πρώτη γραμμή το σύνολο των αγνώστων
μετά συντελεστές και αποτέλεσμα

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης