Классы-оболочки Delphi определяют свойства, в том числе индексированные и свойства по умолчанию, чтобы сделать работу с матрицами, списками и ячейками привычной и естественной для программиста. Поскольку в Delphi нельзя, как в C++, переопределить операции присваивания и приведения типа, для доступа к элементам матриц и списков приходится использовать свойства AsDouble, AsString, AsMatrix, и т. д.
Наиболее быстрый способ реализации метода — вывести его путем наследования из заранее заготовленного стандартного класса TStdMethodDef. Следующий код показывает реализацию метода вычисления для алгоритма наименьших квадратов.

    type
      TLSMCalc = class(TmaStdMethodDef)
      public
        function GetDescription(out descr: PWideChar): HResult; override; stdcall;
        // Вернуть структуру метода

        function CalcDef: HResult; override; stdcall;
        // Вычисление выходной матрицы целиком
        function CalcCellDef(argno: integer; index: maIndex;
          out Cell: ImaCell): HResult; override; stdcall;
        // Вычисление одной ячейки выходной матрицы
        // если функция не используется, не описывайте ее
      end;

      // Структура метода

    function TLSMCalc.GetDescription(out descr: PWideChar): HRESULT;
    begin
      descr := 'Calc St|F ->St|{y}';
      result := MA_NOERROR;
    end;

    // Вычисление выходной матрицы целиком

    function TLSMCalc.CalcDef: HRESULT;
    var
      A, y, coeff: TmaMatrix;
      N, F, i, j: integer;
      sum: double;
    begin
      result := MA_NOERROR;
      try
        try
          A := Input['Sc|F'].AsMatrix;
          y := Output['Sc|{y}'].AsMatrix;
          coeff := Param['Coeff'].AsMatrix;
          // собственно вычисление
          N := A.Size[0]; // число строк матрицы A=Sc|F
          F := A.Size[1]; // число столбцов матрицы A=Sc|F
          for i := 0 to N - 1 do begin
            sum := 0;
            for j := 0 to F - 1 do
              sum := sum + A[i][j].AsDouble * coeff[j].AsDouble;
            y[i].AsDouble := sum;
            ProgressExc((i + 1) / N, 'Calculating LSM');
            // полезно, если вычисления длитеьные
          end;
        finally
          A.Free; y.Free; coeff.Free;
      end; except
        on E: EUserInterrupt do result := MA_ERR_INTERRUPT;
        // если выполнение прервано пользователем
      else result := MA_ERR_CLIENTFAIL;
      end;
    end;

    // Вычисление одной ячейки выходной матрицы

    function TLSMCalc.CalcCellDef(argno: integer; index: maIndex;
      out Cell: ImaCell): HResult; stdcall;
    var
      A, coeff: TmaMatrix;
      N, F, i, j: integer;
      sum: double;
    begin
      result := MA_NOERROR;
      try
        try
          A := Input['Sc|F'].AsMatrix;
          coeff := Param['Coeff'].AsMatrix;
          // собственно вычисление
          F := A.Size[1]; // число столбцов матрицы A=Sc|F

          i := index.idx[0];

          sum := 0;
          for j := 0 to F - 1 do
            sum := sum + A[i][j].AsDouble * coeff[j].AsDouble;
          Cell - > SetasDouble(sum);
        finally
          A.Free; coeff.Free;
      end; except
        result := MA_ERR_CLIENTFAIL;
      end;
    end;