Автор cайта: Владимир Потемкин fortran-90@yandex.ru
Вычисление сумм, произведений и коэффициентов
SM10
Программа SM10 вычисляет сумму бесконечного ряда с помощью преобразования Эйлера, которое заключаетсмя в следующем. Если ряд в левой части равенства
∞∞ ∑ ai = ∑ (∆ia0)/2i+1 i=0i=0 сходится, то это равенство справедливо и ряд в правой части равенства сходится быстрее. Здесь ∆ia0 обозначает разность вперед i-го порядка для a0 ∆a0 = a1 - a0 ∆1a0 = ∆a1 - ∆a0 ∆2a0 = ∆1a1 - ∆1a0 . . . . . . . . . . Программа особенно эффективна в случае медленно сходящихся, а также расходящихся знакопеременных рядов. Суммирование прекращается, как только Tim раз подряд абсолютные значения членов преобразованного ряда будут меньше, чем Eps.
Вызов программы
SM10(Fct, Eps, Tim)
Параметры программы
Fct, Eps, Tim - входные параметры;
Real SM10 - возвращаемое значение;
Real Fct(Integer i) - функция, вычисляющая значения членов ряда;
Real Eps - погрешность вычисления суммы;
Integer Tim - параметр повторения.
Пример
!Вычисление суммы знакопеременного ряда
program TestSM10
use NML
implicit none
real, parameter:: pi=3.1415926, Eps=1.E-8
integer, parameter:: Tim=4
real:: S, E
!begin
S=SM10(Pi4, Eps, Tim)
E=0.25*pi
print 10, S, E
10 format(/' Summa =',E18.10/' pi/4 =',E18.10)
!end
contains
real function Pi4(i)
integer, intent(in):: i
Pi4=1.0/float(2*i+1)
if(mod(i,2) /= 0) Pi4=-Pi4
return
end function Pi4
end program TestSM10
Summa = 0.7853981256E+00
pi/4 = 0.7853981256E+00
Программа DFT вычисляет дискретное (прямое и обратное) быстрое преобразование Фурье с прореживанием по времени. Алгоритм Кули-Тьюки.
Прямое и обратное дискретное преобразование Фурье задаётся формулами
где s(n) - исходный сигнал, S(k) - его Фурье-образ, j - мнимая единица. Предполагается, что сигнал s(n) - периодический, в этом случае Фурье-образ будет тоже периодическим с тем же периодом.
Основная идея быстрого преобразования Фурье (БПФ) состоит в разбиении отсчётов сигнала на две части и вычислении БПФ уже для каждой из частей меньшей размерности N/2 (прореживание по времени). Во втором варианте БПФ (прореживание по частоте) на две части разбивается спектр сигнала. Подробное описание обоих алгоритмов можно найти в многочисленной литературе.
[Б14]
Вызов программы
call DFT(N, S, Error, Dir)
Параметры программы
N, Dir - входные параметры;
S - входной и выходной параметр;
Error - выходной параметр;
Integer N - количество отсчётов сигнала или Фурье-образа, N должно быть степенью числа 2, большей нуля;
Complex S[0:N-1] - массив с отсчётами;
Integer Dir - направление преобразования, Dir>0 или отсутствует - прямое преобразование Фурье, Dir<0 - обратное преобразование Фурье;
Integer Error - индикатор ошибки, Error=0 в случае нормального завершения программы, Error>0 если размерность массива S не является степенью числа 2.
Программа CNM вычисляет биномиальные коэффициенты Cnm = n!/(m!(n-m)!) по рекуррентной формуле Cni+1 = (n-i)/(i+1)Cni для i = 0, 1, ..., m-1, причем Cn0 = 1.
Вызов программы
CNM(n, m)
Параметры программы
Integer n, m - входные параметры;
Integer CNM - возвращаемое значение.