Подпрограмма: 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 )