Текст подпрограммы и версий
iac2r_p.zip
Тексты тестовых примеров
tiac2r_p.zip

Подпрограмма:  IAC2R (модуль IAC2R_p)

Назначение

Вычисление сеток и коэффициентов бикубического аппроксимирующего сплайна по заданным значениям функции двух переменных и краевым условиям на заданных (возможно неравномерных) сетках.

Математическое описание

Задача решается аналогично случаю функции одной переменной.

Подробное изложение решения дано в работах  [1,2] и в описании подпрограммы IAC1R.

1.  Гребенников А.И., Казе В.О. - Л. Быстрые алгоритмы аппроксимации функции сплайнами и решение некоторых прикладных задач. - Методы и алгоритмы в численном анализе. M.: Изд - во МГУ, 1984.
2.  Гребенников А.И. Метод сплайнов и решение некорректных задач теории приближений. M.: Изд - во МГУ, 1983.

Использование

procedure IAC2R(var X :Array of Real; NX :Integer;
                var Y :Array of Real; NY :Integer;
                var FXY :Array of Real; NFX :Integer; NFY :Integer;
                LX :Integer; LY :Integer; MXA :Integer;
                var FXA :Array of Real; MXB :Integer;
                var FXB :Array of Real; MYA :Integer;
                var FYA :Array of Real; MYB :Integer;
                var FYB :Array of Real; var TX :Array of Real;
                var TY :Array of Real; var CXY :Array of Real;
                NCX :Integer; NCY :Integer; var CY :Array of Real);

Параметры

X - вещественный вектоp длины  NX, содержащий значения узлов исходной сетки по  X;
NX - заданное число узлов исходной сетки по  X,  NX ≥ 4 (тип: целый);
Y - вещественный вектоp длины  NY, содержащий значения узлов исходной сетки по  Y;
NY - заданное число узлов исходной сетки по  Y,  NY ≥ 4 (тип: целый);
FXY - вещественный двумерный массив, содержащий значения функции в узлах сетки, размерностью  NFX * NFY;
NFX - заданное число стpок массива  FXY,  NFX ≥ NX (тип: целый);
NFY - заданное число столбцов массива  FXY,  NFY ≥ NY (тип: целый);
LX - заданное число, порядок аппроксимирующих формул по  X,  0 ≤ LX ≤ 1 (тип: целый);
LY - заданное число, порядок аппроксимирующих формул по  Y,  0 ≤ LY ≤ 1 (тип: целый);
MXA - заданное число, определяющее периодичность функции по  X или тип краевых условий на левом конце отрезка по  X,  0 ≤ MXA ≤ 3 (тип: целый);
MXA =  3 - периодическая функция,
MXA =  0 - условие интерполяции,
MXA=1,2 - задана производная порядка (MXA, 0);
FXA - вещественный вектоp длины  NY, содержащий значения производной порядка  (MXA, 0) на левом конце отрезка по  X (используется, если  MXA = 1, 2);
MXB - заданное число, определяющее тип краевых условий на правом конце отрезка по  X,  0 ≤ MXB ≤ 2 (тип: целый) (используется, если  MXA < 3);
MXB =  0 - условие интерполяции,
MXB=1,2 - задана производная порядка (MXB, 0);
FXB - вещественный массив длины  NY, содержащий значения производной порядка (MXB, 0) на правом конце отрезка по  X (используется, если  MXB = 1, 2);
MYA - заданное число, определяющее периодичность функции по  Y или тип краевых условий на левом конце отрезка по  Y,  0 ≤ MYA ≤ 3 (тип: целый);
MYA =  3 - периодическая функция,
MYA =  0 - условие интерполяции,
MYA=1,2 - задана производная порядка (MYA, 0);
FYA - вещественный вектоp длины  NX, содержащий значения производной порядка (MYA, 0) на левом конце отрезка по  Y (используется, если  MYA = 1, 2);
MYB - заданное число, определяющее тип краевых условий на правом конце отрезка по  Y,  0 ≤ MYB ≤ 2 (тип: целый) (используется, если  MYA < 3);
MYB =  0 - условие интерполяции,
MYB=1,2 - задана производная порядка (MYB, 0);
FYB - вещественный массив длины  NX, содержащий значения производной порядка (MYB, 0) на правом конце отрезка по  Y (используется, если  MYB = 1, 2);
TX - вещественный вектоp длины  NX + 4, содержащий вычисленные значения узлов сетки сплайна по  X;
TY - вещественный вектоp длины  NY + 4, содержащий вычисленные значения узлов сетки сплайна по  Y;
CXY - вещественный двумерный массив, содержащий вычисленные коэффициенты сплайна размерностью  NCX * NCY;
NCX - заданное число стpок массива  CXY,  NCX ≥ NX + 4 (тип: целый);
NCY - заданное число столбцов массива  CXY,  NCY ≥ NY + 4 (тип: целый);
CY - вещественный рабочий вектоp длины  MAX (NX, NY) + 4.

Версии: нет

Вызываемые подпрограммы: нет

Замечания по использованию

  Подпрограмма использует рабочие подпрограммы - функции и подпрограммы IAC1R1, IAC1R2, IAC1R3, IAC1R4 и IAS1R2.

Пример использования

Unit TIAC2R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IAC2R_p;

function TIAC2R: String;

implementation

function TIAC2R: String;
var
I,J :Integer;
FXY :Array [0..15] of Real;
ТХ :Array [0..7] of Real;
TY :Array [0..7] of Real;
CY :Array [0..7] of Real;
CXY :Array [0..63] of Real;
const
X :Array [0..3] of Real = ( 2.0,3.0,4.0,5.0 );
Y :Array [0..3] of Real = ( 2.0,3.0,5.0,6.0 );
FХА :Array [0..3] of Real = ( 24.0,36.0,60.0,72.0 );
FХВ :Array [0..3] of Real = ( 60.0,90.0,150.0,180.0 );
label
_10;
begin
Result := '';  { результат функции }
for I:=1 to 4 do
 begin
  for J:=1 to 4 do
   begin
    FXY[(I-1)+(J-1)*4] := Y[J-1]*(IntPower(X[I-1],3));
_10:
   end;
 end;
IAC2R(X,4,Y,4,FXY,4,4,1,1,1,FXA,2,FXB,
     0,X,0,X,TX,TY,CXY,8,8,CY);
Result := Result + #$0D#$0A;
for I:=1 to 8 do
 begin
  Result := Result + Format(' ТХ  :%20.16f ',[TX[I-1]]) + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to 8 do
 begin
  Result := Result + Format(' TY  :%20.16f ',[TY[I-1]]) + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to 6 do
 begin
  for J:=1 to 6 do
   begin
    Result := Result + Format(' CXY :%20.16f ',
 [CXY[(I-1)+(J-1)*8]]) + #$0D#$0A;
   end;
 end;
Result := Result + #$0D#$0A;
UtRes('TIAC2R',Result);  { вывод результатов в файл TIAC2R.res }
end;

end.

Результаты:

       TX  =  ( 0.00  1.00  2.00  3.00  4.00  5.00  6.00  7.00 )
       TY  =  ( 0.00  1.00  2.00  3.00  5.00  6.00  7.00  8.00 )

       CXY  =  (   0.00    0.00    0.00    0.00     0.00     0.00 )
       CXY  =  (   6.00   12.00   20.00   28.00    36.00    42.00 )
       CXY  =  (  24.00   48.00   80.00  112.00   144.00   168.00 )
       CXY  =  (  60.00  120.00  200.00  280.00   360.00   420.00 )
       CXY  =  ( 120.00  240.00  400.00  560.00   720.00   840.00 )
       CXY  =  ( 210.00  420.00  700.00  980.00  1260.00  1470.00 )