Текст подпрограммы и версий ec00r_p.zip |
Тексты тестовых примеров tec00r_p.zip |
Решение одномерного интегрального уравнения I рода с разностным ядром на прямой (- ∞, + ∞) методом регуляризации с применением алгоритма Быстрого Преобразования Фурье и (или) вычисление значений критериальных функций.
Приближенное решение одномерного интегрального уравнения I рода типа свертки
+∞ (1) Ax ≡ ∫ k(t - τ) x(τ) dτ = y(t) , -∞ < t < +∞ , -∞
с гладким ядром k осуществляется методом однопараметрической регуляризации А.Н.Тихонова [1] путем сведения задачи к минимизации по x сглаживающего функционала
(2) Mα [x, y] = || Ax - y ||2 + α Ω[x] , где : +∞ || Ax - y ||2 = 1/2π ∫ | K(λ) X(λ) - Y(λ) |2 dλ - квадрат невязки, -∞ α > 0 - параметр регуляризации, +∞ Ω[x] = 1/2π ∫ | λ |2p | X(λ) |2 dλ - стабилизирующий функционал -∞ порядка p ≥ 0 (p не предполагается целым);
K (λ), X (λ), Y (λ) - преобразования Фурье ядра k, решения x и приближенной правой части y.
Функционал (2) минимизирует функция +∞ (3) xα(t) = 1/2π ∫ K*(λ) Y(λ) / ( | K(λ) |2 + α λ2p ) exp (iλt) dt , -∞ -∞ < t < +∞ , где * - знак комплексного сопряжения.
Считается, что k (t) → 0, x (t) → 0, y (t) → 0 при t → ±∞ и функции k (t), y (t) заданы на конечном отрезке [-Т/2, Т/2] в узлах равномерной сетки по t :
ts = s Δt , s = -N/2, -N/2 + 1, ... , -1, 0, 1, ... , N/2 - 1 ,
где N - четное число узлов, Δ (t) = T/N - шаг сетки.
Задача состоит в решении дискретного уравнения типа свертки с ядром ks = k (ts) и приближенной правой частью ys = = y (ts) методом регуляризации p - ого порядка в спектральной области λ. Численный алгоритм основан на применении Дискретного Преобразования Фурье временных рядов [2].
Приведем задачу к "каноническому" виду, вычислив ДПФ функций ks и ys :
N/2-1 Km = ∑ ks exp(-i λm ts) , S = -N/2 N/2-1 Ym = ∑ ys exp(-i λm ts) , S = -N/2
где λm = m Δλ , m = - N/2, - N/2 + 1 , ..., - 1, 0, 1, ..., N/2 - 1 , Δλ = 2π/(N Δt) , i = √-1.
Аналогично определяются Xm, Xmα - ДПФ рядов xs = x (ts) и xsα =xα (ts).
Далее, аппроксимируя интегралы в pавенствах (2), (3) и в преобразованиях Фурье по формуле прямоугольников, получаем дискретные аналоги сглаживающего функционала Mα [xs, ys] и минимизирующего его регуляризованного решения
N/2-1 (4) xsα = 1/ NΔt ∑ KTmYm /( | Km |2 + α/Δt2 λm2p ) exp(2π i m s / N) , m= -N/2 s = -N/2, -N/2 + 1, ..., N/2 - 1 .
Подпрограмма реализует формулу (4) и вычисляет значения четырех критериальных функций, которые могут быть использованы для выбора параметра регуляризации α, а именно, вычисляются приближенные:
1) невязка ρ(α) = || Axα - y || , 2) ноpма решения γ(α) = Ω1/2 [ xα ] , 3) значение регуляризующего функционала φ(α) = [ ρ2(α) + αγ2(α) ]1/2 , 4) функция "чувствительности" (для выбора квазиоптимального значения α) τ(α) = α Ω1/2 [ dxα/dα ] , где +∞ Ω[x] = 1/2π ∫ | λ | | X(λ) |2 dλ ≡ Ω[x] -∞ при p = 1/2.
Вычисление всех критериальных функций происходит в спектральной области λ (через компоненты ДПФ). Это требует порядка N операций и значительно облегчает задачу выбора параметра регуляризации. Восстановление искомого решения по формуле (4) целесообразно производить лишь для выбранных значений λ.
Подпрограмма предусматривает работу в следующих режимах (в зависимости от значения параметра L).
1. | Задача приводится к "каноническому" виду; этот режим позволяет избежать повторного вычисления Km, Ym, когда происходит повторное обращение к подпрограмме с тем же ядром и той же правой частью, например, при выборе α (L = 1). |
2. | При условии, что задача приведена к "каноническому" виду, строится решение xsα и вычисляются значения крикритериальных функций ρ (α), γ (α), φ (α), τ (α) при заданном значении α (L = 2). |
3. | При условии, что задача приведена к "каноническому" виду, вычисляются только значения критериальных функций ρ (α), γ (α), φ (α), τ (α) при при заданном значении α без построения решения xsα (L = 3). |
4. | Вычисляется только ДПФ правой части ys; этот режим необходим для приведения задачи к "каноническому" виду, когда повторно решается уравнение с тем же ядром, но с другой правой частью (L = 4). |
Для оптимального вычисления прямого и обратного ДПФ применяся алгоритм быстрого преобразования Фурье [2], за счет которого реализованный в подпрограмме алгоритм численного решения задачи является эффективным в смысле быстродействия, экономии памяти ЭВМ и уменьшения ошибок округления, при этом время вычислений пропорционально N log2N, а объем памяти пропорционален N.
Полное описание изложенного алгоритма содержится в статье [3].
1. | А.Н.Тихонов. O регуляризации некоppектно поставленных задач, ДАН CCCP, 1963, т.153, N 1, 49 - 52. |
2. | В.А.Морозов, Н.Н.Кирсанова, А.Ф.Сысоев. Комплекс алгоритмов быстрого преобразования Фурье дискретных рядов, сб. "Численный анализ на ФОРТРАНе", вып. 15. Изд - во МГУ, M., 1976. |
3. | М.В.Арефьева. Быстрый регуляризирующий алгоритм решения интегральных уравнений Фредгольма I рода типа свертки, сб. "Численный анализ на ФОРТРАНе. Методы и алгоритмы". Изд - во МГУ, M., 1978. |
procedure EC00R(N :Integer; DT :Real; var A :Array of Real; var Y :Array of Real; ALP :Real; P :Real; L :Integer; var H :Array of Real; var X :Array of Real; var Z :Array of Real);
Параметры
N - | количество заданных значений ядра и правой части уравнения, N ≥ 4 - целая степень числа два (тип: целый); |
DT - | заданный шаг сетки по переменным t, τ, DT > 0 (тип: вещественный); |
A - | вещественный вектоp длины N, содержащий заданные значения ядра уравнения на сетке: A (I) = kI-N/2-1, I = 1, 2, ..., N; |
Y - | вещественный вектоp длины N, содержащий заданные значения правой части уравнения на сетке: Y (I) = yI- N/2- 1, I = 1, 2, ..., N; |
ALP - | заданное значение параметра регуляризации α, ALP ≥ 0 (тип: вещественный); |
P - | заданное значение порядка регуляризации p, P ≥ 0 (тип: вещественный); |
L - | параметр, определяющий режим использования подпрограммы (тип: целый): |
L = 1 - | выполняется приведение задачи к "каноническому" виду, |
L = 2 - | строится решение и вычисляются значения критериальных функций, |
L = 3 - | вычисляются только значения критериальных функций; |
L = 4 - | выполняется приведение задачи с новой правой частью с тем же ядром к "каноническому" виду; |
H - | вещественный вектоp длины 4, содержащий вычисленные значения критериальных функций при заданном значении ALP: H (1) = ρ(α), H (2) = γ(α), H (3) = φ(α), H (4) = τ(α); |
X - | вещественный вектоp длины N, содержащий вычисленные значения регуляризованного решения на сетке: X (I) = xαI- N/2- 1, I = 1, 2, ..., N; |
Z - | вещественный вектоp длины N, используемый в подпрограмме как рабочий. |
Версии: нет
Вызываемые подпрограммы
FTF1C - | подпрограмма вычисления дискретного или обратного дискретного преобразования Фурье комплексного ряда длины, равной степени двух, методом быстрого преобразования Фурье. |
Замечания по использованию
1. |
B результате работы подпрограммы при L = 1 в массиве A содержится преобразование Фурье ядра Km, а в массиве Y - преобразование Фурье правой части Ym; на выходе подпрограммы при L = 3 в массиве X содержится преобразование Фурье регуляризованного решения Xmα. C учетом симметрии вещественной части и антисимметрии мнимой части преобразований Фурье вещественных рядов относительно центра m = N/2, хранятся только половины значений Km, Ym, Xmα, m = 0, 1, ..., N/2. Например, в массиве A спектр располагается следующим образом:A(I) = Re KI-1 , I = 1, 2, ..., N/2 + 1 , A(I) = Im KI-N/2-1 , I = N/2 + 2, N/2 + 3, ..., N ; при этом учитывая также, что Im Km = 0, m = 0, N/2. | |
2. |
При первом обращении к подпрограмме (L = 1) необходимо задать параметры N, DT, A, Y, определяющие уpавнение. B дальнейшем (L = 2, 3) можно менять только параметры ALP и P, характеризующие регуляризатор, сохраняя значения N, DT, A, Y. При L = 4 значения параметров N, DT, а также должны сохраняться. | |
3. | Массивы A, Y, X используются при всех значениях L, а рабочий массив Z - только в одном режиме при L = 2. |
Рассматривается решение интегрального уравнения типа свертки (1) с ядром k (t) = exp (- t2) и правой частью y (t) = (π/2) 1/2 exp (- t2/2) ( точное решение x (t) = exp (- t2) ) или y1 (t) = (π/3) 1/2 exp (- 2/3 t2) ( точное решение x1 (t) = exp (- 2t2) ).
Ниже приводится фрагмент программы, вычисляющей решения и соответствующие значения критериальных функций при фиксированном параметре регуляризации α = 10- 2 с использованием регуляризатора порядка p = 1 и равномерной на отрезке [ - 1, 1 ] сетки из N = 8 точек.
Unit TEC00R_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, EC00R_p; function TEC00R: String; implementation function TEC00R: String; var I,_i,L :Integer; T :Real; A :Array [0..7] of Real; Y :Array [0..7] of Real; H :Array [0..3] of Real; X :Array [0..7] of Real; Z :Array [0..7] of Real; Y1 :Array [0..7] of Real; ХТ :Array [0..7] of Real; XT1 :Array [0..7] of Real; const N :Integer = 8; DT :Real = 0.25; ALP :Real = 1.0E-2; P :Real = 1.0; PI :Real = 3.14159265359; label _1; begin Result := ''; for I:=1 to N do begin T := DT*(-N/2+I-1); A[I-1] := Exp(-T*T); XT[I-1] := Exp(-T*T); Y[I-1] := Sqrt(PI/2.0)*Exp(-T*T/2.0); XT1[I-1] := Exp(-2.0*T*T); _1: Y1[I-1] := Sqrt(PI/3.0)*Exp(-T*T*2.0/3.0); end; Result := Result + Format('%s',[' ЯДPO']); Result := Result + #$0D#$0A; for _i:=0 to 7 do begin Result := Result + Format('%20.16f ',[A[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' ТОЧНОЕ PEШEHИE']); Result := Result + #$0D#$0A; for _i:=0 to 7 do begin Result := Result + Format('%20.16f ',[XT[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' ПРАВАЯ ЧACTЬ']); Result := Result + #$0D#$0A; for _i:=0 to 7 do begin Result := Result + Format('%20.16f ',[Y[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; L := 1; EC00R(N,DT,A,Y,ALP,P,L,H,X,Z); L := 2; EC00R(N,DT,A,Y,ALP,P,L,H,X,Z); Result := Result + Format('%s',[' КРИТЕРИАЛЬНЫЕ ФYHKЦИИ']); Result := Result + #$0D#$0A; for _i:=0 to 3 do begin Result := Result + Format('%20.16f ',[H[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' PEГYЛЯРИЗОВАННОЕ PEШEHИE']); Result := Result + #$0D#$0A; for _i:=0 to 7 do begin Result := Result + Format('%20.16f ',[X[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' ТОЧНОЕ PEШEHИE']); Result := Result + #$0D#$0A; for _i:=0 to 7 do begin Result := Result + Format('%20.16f ',[XT1[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' ПРАВАЯ ЧACTЬ']); Result := Result + #$0D#$0A; for _i:=0 to 7 do begin Result := Result + Format('%20.16f ',[Y1[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; L := 4; EC00R(N,DT,A,Y1,ALP,P,L,H,X,Z); L := 2; EC00R(N,DT,A,Y1,ALP,P,L,H,X,Z); Result := Result + Format('%s',[' КРИТЕРИАЛЬНЫЕ ФYHKЦИИ']); Result := Result + #$0D#$0A; for _i:=0 to 3 do begin Result := Result + Format('%20.16f ',[H[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' PEГYЛЯРИЗОВАННОЕ PEШEHИE']); Result := Result + #$0D#$0A; for _i:=0 to 7 do begin Result := Result + Format('%20.16f ',[X[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('TEC00R',Result); { вывод результатов в файл TEC00R.res } exit; end; end. Результаты: H = ( 0.13239, 1.08822, 0.17138, 0.33298 ) X = ( 0.378, 0.475, 0.713, 0.963, 1.072, 0.963, 0.713, 0.475 )