|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/i_htm_p/ii10r_p.htm
Дата изменения: Thu Nov 26 15:12:53 2015 Дата индексирования: Sun Apr 10 01:14:50 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий 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.