Текст подпрограммы и версий
zp60r_p.zip  zp60e_p.zip 
Тексты тестовых примеров
tzp60r_p.zip  tzp60e_p.zip 

Подпрограмма:  ZP60R (модуль ZP60R_p)

Назначение

Вычисление значений полиномов Чебышева от последовательности значений аргументов.

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

Пусть задана последовательность значений X = (x1, x2,..., xM). Подпрограмма ZP60R вычисляет значения полиномов Чебышева Tk ( xi ), k = 0, 1,..., N, которые размещаются в двумерном массиве  T  размеров N + 1 на M следующим образом:

                            |   T0( x1 ),  T0( x2 ),  ...  ,  T0( xM )    |
                            |   T1( x1 ),  T1( x2 ),  ...  ,  T1( xM )    |
                  T   =     . . . . . . . . . . . . . .                                                   (1)
                            |   TN( x1 ),  TN( x2 ), ... ,  TN( xM )  |

Вычисления выполняются по рекуррентному соотношению

           Tk( xi )   =   2 xi Tk-1( xi )  -  Tk-2( xi ),   k = 2, 3,..., N 

Бахвалов Н.С. Численные методы. М.: Наука, 1977.

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

procedure ZP60R(var X :Array of Real; M :Integer; N :Integer;
                var N1 :Integer; var T :Array of Real);

Параметры

X - вещественный одномерный массив, длины M, содержащий заданные значения аргументов;
M - длина массива X (тип: целый);
N - заданное максимальное значение степеней полиномов Чебышева, значения которых необходимо вычислить на заданной сетке X (тип: целый);
N1 - заданное значение, равное N+1 (тип: целый);
T - вещественный двумерный массив размеров N1 на M, в котором размещаются вычисленные значения полиномов Чебышева в виде (1).

Версии

ZP60E - вычисление значений полиномов Чебышева от последовательности значений аргументов в режиме расширенной (Extended) точности; при этом параметры X и T должны иметь тип Extended.

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

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

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

Unit tzp60r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ZP60R_p;

function tzp60r: String;

implementation

function tzp60r: String;
var
M,N,N1,J,I :Integer;
T :Array [0..29] of Real;
const
X :Array [0..5] of Real = ( 0.0,1.0,2.0,3.0,4.0,5.0 );
begin
Result := '';  { результат функции }
M := 6;
N := 4;
N1 := 5;
ZP60R(X,M,N,N1,T);
Result := Result + #$0D#$0A;
for I:=1 to 5 do
 begin
  for J:=1 to 6 do
   begin
    Result := Result + Format('%20.16f ',[T[(I-1)+(J-1)*5]]) + #$0D#$0A;
   end;
 end;
Result := Result + #$0D#$0A;
UtRes('tzp60r',Result);  { вывод результатов в файл tzp60r.res }
exit;
end;

end.


Результаты: 

                     |    1    1     1     1     1      1   |
                     |    0    1     2     3     4      5   |
           T  =      |   -1    1     7    17    31     49   |
                     |    0    1    26    99   244    485   |
                     |    1    1    97   577  1921   4801   |