|
Текст подпрограммы и версий zp60r_p.zip zp60e_p.zip |
Тексты тестовых примеров tzp60r_p.zip tzp60e_p.zip |
Вычисление значений полиномов Чебышева от последовательности значений аргументов.
Пусть задана последовательность значений 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 |