MatrixTest.c

// File MatrixTest.c

#include <stdio.h>
#include "Matrix.h"

FILE *fout = stdout;
FILE *fin = stdin;

void TestGaussalg()
{
  double a[NMAX][NMAX];
  double x[NMAX];
  int i;
  int n;  // Anzahl der Gleichungen
  int m;  // m = n + 1 .... erweiterte Matrix
  int result;

  // um die Daten aus einer Datei zu lesen, sind die
  // folgenden Zeilen zu aktivieren
  if ((fin = fopen("gleichung.txt", "r")) == NULL)
  {
    printf("File nicht vorhanden\n");
    fin = stdin;
  }
   
  fout = fopen("resultat.txt", "w");

  MatIn(fin, a, &n, &m);    // Gleichungssystem einlesen
  MatOut(fout, a, n, m);    // Kontrollausgabe
  result = Gaussalg (a, n, x);
  
  if (result) 
  {
    fprintf(fout, 
      "\nLoesung des Gleichungssystems %2d Unbekannten\n", n);
    for (i = 0; i < n; i++)
      fprintf(fout, "x[%2d] = %+12.6g\n", i+1, x[i]);
  }
  else
  {
    fprintf(fout, "Gleichungssystem nicht loesbar\n");
  }

  if (fout != stdout)
  {
    if (result) 
    {
      fprintf(stdout, 
        "\nLoesung des Gleichungssystems %2d Unbekannten\n\n", n);
      for (i = 0; i < n; i++)
        fprintf(stdout, "x[%2d] = %+12.6g\n", i+1, x[i]);
    }
    else
    {
      fprintf(stdout, "Gleichungssystem nicht loesbar\n");
    }
  }
}


void TestInverse()
{
  double a[NMAX][NMAX] = {0.0};
  double ainv[NMAX][NMAX] = {0.0};
  double aKopie[NMAX][NMAX] = {0.0};
  int n;  // Anzahl der Gleichungen
  int result;

  // um die Daten aus einer Datei zu lesen, sind die
  // folgenden Zeilen zu aktivieren
  if ((fin = fopen("bsp3.txt", "r")) == NULL)
  {
    printf("File nicht vorhanden\n");
    fin = stdin;
  }
   
  fout = fopen("resultat.txt", "w");

  MatIn(fin, a, &n, &n);    // Matrix einlesen
  Copy(a, aKopie, n);        // kopieren der originalen Matrix auf aKopie
  fprintf(fout, "Matrix a\n");
  MatOut(fout, a, n, n);    // Kontrollausgabe
  // Inverse berechnen, dabei wird auch aKopie verändert
  result = Inverse(aKopie, ainv, n);
  
  if (result) 
  {
    fprintf(stdout, "\nInverse Matrix:\n");
    MatOut(stdout, ainv, n, n);
    fprintf(fout, "\nInverse Matrix:\n");
    MatOut(fout  , ainv, n, n);
    // Kontrolle: a * ainv muss eine Einheitsmatrix ergeben
    Produkt(a, ainv, aKopie, n);
    fprintf(stdout, "\nProbe: a x ainv = E\n");
    MatOut(stdout, aKopie, n, n);
    fprintf(fout, "\nProbe: a x ainv = E\n");
    MatOut(fout, aKopie, n, n);
  }
  else
  {
    fprintf(fout, "Matrix ist singulär\n");
    fprintf(stdout, "Matrix ist singulär\n");
  }

}


int main(void)
{
  //TestGaussalg();
  //fprintf(stdout, "\nWeiter mit Eingabetaste!");
  //fgetc(stdin);
  TestInverse();
  fprintf(stdout, "\nEnde mit Eingabetaste!");
  fgetc(stdin);
  return 0;
}

Zurück