Текст подпрограммы и версий ii10r_p.zip , ii10e_p.zip |
Тексты тестовых примеров tii10r_p.zip , tii10e_p.zip |
Вычисление центральных разностей таблично заданной функции на равномерной сетке.
Пусть мы имеем таблицу значений вещественной функции y в узлах некоторой равномерной сетки:
y0 , y1 , y2 , y3 , y4 , ... , yn .
Тогда центральные разности первого порядка определяются следующими соотношениями:
δ1 y1/2 = y1 - y0 , δ1 y3/2 = y2 - y1 , δ1 y5/2 = y3 - y2 , ...
Центральные разности второго порядка выражаются через центральные разности первого порядка следующим образом:
δ 2 y1 = δ1 y3/2 - δ1 y1/2 , δ 2 y2 = δ1 y5/2 - δ1 y3/2 , ...
Формулы общего вида для вычисления центральных разностей имеют вид:
δ 2j + 1 yi + 1/2 = δ 2j yi + 1 - δ 2j yi и δ 2j yi = δ 2j - 1 yi + 1/2 - δ 2j - 1 yi - 1/2 .
И.С.Березин, Н.П.Жидков, Методы вычислений, т. 1, M., 1962.
procedure II10R(MU :Integer; NL :Integer; NS :Integer; NU :Integer; NO :Integer; LO :Integer; var Y :Array of Real);
Параметры
MU - | заданное число стpок, в описании размерности двумерного массива Y в подпрограмме, вызывающей данную подпрограмму (см. ниже) (тип: целый); |
NL, NS - NU | определяют расположение в двумерном массиве Y заданных значений функции, а именно, значения функции y0, y1, y2, ..., yn должны быть последовательно расположены в следующих компонентах массива Y: Y (NL, 1), Y (NL + NS, 1), Y (NL + 2 * NS, 1), ..., Y (NU, 1) (тип: целый); |
NO - | заданный максимальный порядок вычисляемых разностей (тип: целый); |
LO - | определяет порядок расположения вычисленных разностей в массиве Y (тип: целый); при этом если: |
LO=0 - | то δ 2j - 1 yi - 1/2 будет расположена в элементе массива Y (NL + I*NS - [NS/2], 2*J), а δ 2j yi - в элементе массива Y (NL + I*NS, 2*J + 1); |
LO=1 - | то δ 2j - 1 yi - 1/2 будет расположена в элементе массива Y (NL + I*NS - [NS/2], J + 1), а δ 2j yi - в элементе массива Y (NL + I*NS, J + 1); |
LO=2 - | то δ 2j - 1 yi - 1/2 будет расположена в элементе массива Y (NL + I*NS - [NS/2], J + 1), а δ 2j yi - в элементе массива Y (NL + I*NS, J + 2); |
Y - | вещественный двумерный массив, в котоpом задается таблица значений функции и помещаются вычисленные разности; длина массива Y должна быть при LO = 0 pавна MU * (NO + 1), при LO = 1 - MU * [(NO + 3)/2], при LO = 2 - MU * [(NO + 4)/2]. |
Версии
I I10E - | вычисление центральных разностей таблично заданной функции на равномерной сетке с расширенной (Extended) точностью. |
Вызываемые подпрограммы: нет
Замечания по использованию
1. |
Для I I10E параметр Y должен иметь тип Extended. | |
2. |
Значение параметра MU должно быть больше или pавно значению праметра NU. Tем самым, двумерный массив Y может быть частью другого двумерного массива большей размерности. | |
3. |
Порядок расположения вычисленных разностей в массиве Y при LO = 0 приводит к довольно большому расходованию памяти, если нужны только либо четные, либо нечетные разности. Поэтому, если нужны только четные разности, следует положить LO = 1 и NS = 1. Для получения же только нечетных разностей надо взять LO = 2 и NS = 1 . | |
4. | Значение NS всегда дожно быть больше или pавно 1 . |
Unit TII10R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, II10R_p; function TII10R: String; implementation function TII10R: String; var MU,NL,NS,NU,NO,LO,I,J :Integer; Y :Array [0..8] of Real; begin Result := ''; { результат функции } { прототип оператора DАТА на FORTRANе } Y[0] := 1.353352832E-01; Y[1] := 1.053992246E-01; Y[2] := 8.208499862E-01; Y[3] := 0.0; Y[4] := 0.0; Y[5] := 0.0; Y[6] := 0.0; Y[7] := 0.0; Y[8] := 0.0; MU := 3; NL := 1; NS := 1; NU := 3; NO := 2; LO := 0; II10R(MU,NL,NS,NU,NO,LO,Y); Result := Result + #$0D#$0A; for J:=1 to 3 do begin for I:=1 to 3 do begin Result := Result + Format('%20.16f ',[Y[(I-1)+(J-1)*3]]) + #$0D#$0A; end; end; Result := Result + #$0D#$0A; UtRes('TII10R',Result); { вывод результатов в файл TII10R.res } exit; end; end. Результаты: а) значения функции: Y(1, 1) = 1.353352832E-01 , Y(2, 1) = 1.053992246E-01 , Y(3, 1) = 8.208499862E-01 ; б) первые разности: Y(1, 2) = 0. , Y(2, 2) = -2.993605860E-02 , Y(3, 2) = 7.154507616E-01 ; в) вторые разности: Y(1, 3) = 0. , Y(2, 3) = 7.453868202E-01 , Y(3, 3) = 0.