Macierz odwrotna w c++

0

Mam pytanko. Czy istnieje jakies polecenie obliczania macierzy odwrotnej?

0

Google!!
Poniższa funkcja operuje na TStringGrid o nazwie Matrix. Przerobisz sobie do własnych potrzeb.

//---------------------------------------------------------------------------
void __fastcall TfMatEdit::InvertGauss (int col, int row, int n)
/* Funkcja liczy macierz odwrotną algorytmem Gaussa.
   Parametry:
    col - pierwsza kolumna macierzy
    row - pierwszy wiersz macierzy
    n   - liczba kolumn/wierszy
*/
{long double d, temp, c, **a;
 int i, j, k, m, nn, *ipvt;

 ipvt = new int[n];
 nn = n;

 for (i=0; i<nn; i++)
  ipvt[i] = i;

 a = new long double*[n];
 for (k=0; k<n; k++)
  a[k] = new long double[n];

 for (i=0; i<n; i++)            //przepisanie macierzy do tablicy pomocniczej
  for (j=0; j<n; j++)
   a[i][j] = StrToFloat(Matrix->Cells[i+col][j+row]);

 for (k = 0; k < nn; k++)
 {temp = 0.;
  m = k;
  for (i = k; i < nn; i++)
  {d = a[k][i];
   if (fabs (d) > temp)
   {temp = fabs (d);
    m = i;
   }
  }
  if (m != k)
  {j = ipvt[k];
   ipvt[k] = ipvt[m];
   ipvt[m] = j;
   for (j = 0; j < nn; j++)
   {temp = a[j][k];
    a[j][k] = a[j][m];
    a[j][m] = temp;
   }
  }
  d = 1 / a[k][k];
  for (j = 0; j < k; j++)
  {c = a[j][k] * d;
   for (i = 0; i < nn; i++)
   a[j][i] -= a[k][i] * c;
   a[j][k] = c;
  }
  for (j = k + 1; j < nn; j++)
  {c = a[j][k] * d;
   for (i = 0; i < nn; i++)
   a[j][i] -= a[k][i] * c;
   a[j][k] = c;
  }
  for (i = 0; i < nn; i++)
  a[k][i] = -a[k][i] * d;
  a[k][k] = d;
 }

 for (i=0; i<nn; i++)
  for (j=0; j<nn; j++)
   Matrix->Cells[ipvt[i]+col][j+row] = FloatToStr(a[i][j]); //Zapisanie macierzy w dobrej kolejności
 delete[] ipvt;

 for (k=0; k<n; k++)            //Kasowanie tablicy pomocniczej
  delete[] a[k];
 delete[] a;
}
//---------------------------------------------------------------------------
0

thx ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1