Классическим методом решения систем линейных алгебраических уравнений (СЛАУ) является метод Гаусса. На первом этапе этого метода осуществляется так называемый прямой ход, когда путём элементарных преобразований над строками систему приводят к ступенчатой или треугольной форме, либо устанавливают, что система несовместна. А именно, среди элементов первого столбца матрицы выбирают ненулевой, перемещают его на крайнее верхнее положение перестановкой строк и вычитают получавшуюся после перестановки первую строку из остальных строк, домножив её на величину, равную отношению первого элемента каждой из этих строк к первому элементу первой строки, обнуляя тем самым столбец под ним. После того, как указанные преобразования были совершены, первую строку и первый столбец мысленно вычёркивают и продолжают пока не останется матрица нулевого размера. Если на какой-то из итераций среди элементов первого столбца не нашёлся ненулевой, то переходят к следующему столбцу и проделывают аналогичную операцию.
На втором этапе осуществляется так называемый обратный ход, суть которого заключается в том, чтобы выразить все получившиеся базисные переменные через небазисные и построить фундаментальную систему решений либо, если все переменные являются базисными, то выразить в численном виде единственное решение системы линейных уравнений. Эта процедура начинается с последнего уравнения, из которого выражают соответствующую базисную переменную (а она там всего одна) и подставляют в предыдущие уравнения, и так далее, поднимаясь по «ступенькам» наверх. Каждой строчке соответствует ровно одна базисная переменная, поэтому на каждом шаге, кроме последнего (самого верхнего), ситуация в точности повторяет случай последней строки. Реализация на Delphi вышеописанного алгоритма представлена ниже. Также можно бесплатно скачать исходный код этой программы.

type
  Vector = array[1..MaxDimension] of Double;
  Matrix = array[1..MaxDimension] of Vector;
  ...
  var a: Matrix;
      b,x: Vector;
      h: Double;
      i,j,k,n:integer;
begin
  //Ввод данных
  //Размерность системы
  n := StrToIntDef(Text, StringGrid1.ColCount);
  //Коэффициенты
  for j := 0 to n - 1 do
    for i := 0 to n - 1 do
      a[i + 1, j + 1] := StrToFloatDef(StringGrid1.Cells[j, i], 0);
  //Правая часть уравнения
  for I := 0 to n - 1 do
    b[i + 1] := StrToFloatDef(StringGrid2.Cells[0, i], 0);
  //Прямой ход - исключение переменных
  for i:=1 to n-1 do
    for j:=i+1 to n do
    begin
      a[j,i]:=-a[j,i]/a[i,i];
      for k:=i+1 to n do
        a[j,k]:=a[j,k]+a[j,i]*a[i,k];
        b[j]:=b[j]+a[j,i]*b[i]
    end;
    x[n]:=b[n]/a[n,n];
    //Обратный ход - нахождение корней
    for i:=n-1 downto 1 do
    begin
      h:=b[i];
      for j:=i+1 to n do h:=h-x[j]*a[i,j];
      x[i]:=h/a[i,i]
    end;
    //Вывод результата
    for i:=1 to n do
      ListBox1.Items.Append('x(' + IntToStr(i) + ')=' + FloatToStr(x[i]));

Программа решения систем линейных уравнений методом Крамера на Delphi с полными исходными кодами (BDS 2006)
скачать [файлообменник Deposit Files]

Программа решения систем линейных уравнений методом Гаусса на Delphi с полными исходными кодами (BDS 2006)
скачать [файлообменник Deposit Files]