Текст подпрограммы и версий ef02r_p.zip |
Тексты тестовых примеров tef02r_p.zip |
Приближенное решение интегрального уравнения Фредгольма I рода в классе кусочно - выпуклых функций с ограниченной первой производной.
Решение интегрального уравнения Фредгольма I рода
b ∫ k(x, y) u(y) dy = f(x) , c ≤ x ≤ d , a
при априорно известной информации об ограниченности первой производной искомого решения u = u (y) и об участках знакопостоянства его кривизны сводится на основе метода квазирешений В.К.Иванова к задаче минимизации
d b min ∫ ( ∫ k(x, y) u(y) dy - f(x) )2 dx v, u (a) c a
на множестве кусочно - монотонных функций v (y) = u' (y), определенных на отрезке [a, b]
y u(y) = u(a) + ∫ v(t) dt , a ≤ y ≤ b , a и удовлетворяющих ограничениям v1(y) ≤ v(y) ≤ v2(y) , a ≤ y ≤ b ,
v1 (y) и v2 (y) - заданные на отрезке [a, b] функции. Значение u (a) может считаться как известным, так и подлежащим определению.
Численная дискретизация этой вариационной задачи после аппроксимации соответствующих интегралов с помощью квадратурных формул на сетках ωx = {xi : c = x1 < ... < xi < ... < xM = d} и ωy = {yj : a = y1 < ... < yj < ... < yN = b} приводит к задаче квадратичного программирования
M N
(1) min ∑ pi ( ∑ dj ki j uj - fi )2
v, u1 i=1 j=1
при условии, что вектоp v = (v1, ..., vN - 1) удовлетворяет ограничениям
j -1 (2) uj = u1 + ∑ he ve , j = 2, ..., N e=1 (3) v1 j ≤ vj ≤ v2 j , j = 1, ..., N-1 (4) mj ( vj + 1 - vj ) ≥ 0 , j = 1, ..., N-2 ,
где ki j = k (xi, yj), fi = f (xi), dj > 0 - коэффициенты квадратурной формулы трапеции на сетке ωy , pi > 0 - весовые коэффициенты, hj = yj + 1 - yj - шаг сетки ωy , v1j = v1 (yj), v2j = v2 (yj), параметры mj определяются условиями кусочной монотонности функции v = u' и принимают значения 1, 0 или -1.
Численное решение задачи (1) - (4) основано на методе проекции сопряженных градиентов, который позволяет проводить итерационный процесс минимизации в конечномерном пространстве W2, ρ1 с нормой
N-1 || v || = ( || v || Q2 + ∑ ρj (vj - vj-1)2 )1/2 , j=2 N-1 || v || Q = ( ∑ qj vj2 ) , j=1
qj > 0 и ρj ≥ 0 - заданные числа. Если априори известно, что производная искомого решения является достаточно гладкой функцией, то задание параметров ρj > 0, связанных с конкретной нормировкой W2, ρ1 (при ρj ≡ 0 эта ноpма v совпадает с || v || Q) позволяет увеличить точность и улучшить качество приближений.
Итерационный процесс считается оконченным после выполнения заданного числа итераций или после достижения заданной точности.
1. | А.Н.Тихонов, В.Я.Арсенин, Методы решения некорректных задач. M. "Hаука", 1974. |
2. | В.А.Морозов, Н.Л.Гольдман, М.К.Самарин, Метод дескриптивной регуляризации и качество приближенных решений. ИФЖ, т.33, N 6, 1977. |
3. | Ф.П.Васильев, Лекции по методам решения экстремальных задач. Изд - во МГУ, 1974. |
4. | Н.Л.Гольдман, Приближенное решение интегрального уpавнения Фредгольма I рода в классе кусочно - выпуклых функций с ограниченной первой производной, сб. "Численный анализ на ФОРТРАНе". Изд - во МГУ, 1978. |
procedure EF02R(var M :Integer; N :Integer; var A :Array of Real; var F :Array of Real; var NG :Integer; var V1 :Array of Real; var V2 :Array of Real; var MU :Array of Integer; var H :Array of Real; var P :Array of Real; var Q :Array of Real; var R :Array of Real; var E :Real; var ISP :Integer; LU :Integer; var U :Array of Real; var FU :Real; var KN :Integer; var B :Array of Real);
Параметры
M - | заданная размерность вектоpа правой части f (тип: целый); |
N - | заданная размерность вектоpа искомого решения u = (u1, ..., uN) (тип: целый); |
A - | заданный вещественный двумерный массив размерности M * N, элементы которого A (I, J) = ki j; |
F - | заданный вещественный вектоp длины M, содержащий компоненты вектоpа правой части f; |
NG - | заданный признак наличия ограничений на производную искомого решения (тип: целый); |
NG = 0 - | если ограничения отсутствуют; |
NG = 1 - | если выполнены ограничения (3); |
NG = 2 - | если выполнены ограничения (4); |
NG = 3 - | если выполнены ограничения (3) и (4); |
V1 - | вещественный вектоp длины N, первые N - 1 компонент которого содержат нижние ограничения v1 j; |
V2 - | вещественный вектоp длины N, первые N - 1 компонент которого содержат верхние ограничения v2 j; |
MU - | целый вектоp длины N, первые N - 2 компонент которого содержат параметры mj; |
H - | вещественный вектоp длины N, первые N - 1 компонент которого содержат шаги hj разностной сетки ωy на отрезке [a, b]; |
P - | вещественный вектоp длины M, содержащий весовые коэффициенты pi > 0; |
Q - | вещественный вектоp длины N, первые N - 1 компонент которого содержат весовые коэффициенты qj > 0; |
R - | вещественный вектоp длины N + 1 значений параметров ρj таких, что: R (1) = 0., R (J) = ρj ≥ 0, j = 2, ..., N - 1, ρ (N) = 0., ρ (N + 1) = 0.; |
E - | заданная точность вычисления по градиенту (тип: вещественный); |
ISP - | заданное максимально допустимое число итераций (тип: целый); |
LU - | параметр, задаваемый из условия (тип: целый): |
LU = 1 - | если значение u (a) известно, |
LU = 0 - | если значение u (a) неизвестно; |
U - | вещественный вектоp длины N, задающий произвольное начальное приближение; U (1) = u (a) в случае заданного значения u (a); в результате работы подпрограммы U содержит вычисленное решение u; |
FU - | вещественная переменная, содержащая вычисленное значение минимизируемого функционала; |
KN - | целая переменная, указывающая причину выхода из подпрограммы: |
KN = 0 - | если выполнено заданное число итераций; |
KN = 1 - | если достигнута точность по градиенту, |
KN = 2 - | если достигнута точность по функционалу; |
KN = 3 - | если достигнута точность по аргументу; |
B - | вещественный вектоp длины M + 7N + 2, используемый как рабочий. |
Версии: нет
Вызываемые подпрограммы
EF01R - | приближенное решение интегрального уравнения Фредгольма I рода в классе ограниченных кусочно - монотонных функций. |
Замечания по использованию
1. |
Kpоме искомого решения u подпрограмма позволяет получить приближение для его производной: компоненты вычисленного вектоpа v = (v1, ..., vN - 1) расположены в B (M + 1), ..., B (M + N - 1). | |
2. |
При работе подпрограммы исходная информация, расположенная в массивах A и F, не сохраняется. | |
3. | Справедливы замечания 3) - 5) к использованию подпрограммы EF01R. |
Unit tef02r_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, EF02R_p; function tef02r: String; implementation function tef02r: String; var I,J,_i,KN :Integer; E,SF,Y,S,FU :Real; A :Array [0..120] of Real; F :Array [0..10] of Real; U :Array [0..10] of Real; B :Array [0..89] of Real; const V1 :Array [0..10] of Real = ( 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 ); V2 :Array [0..10] of Real = ( 1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,0.0 ); MU :Array [0..10] of Integer = ( 1,1,1,1,1,-1,-1,-1,-1,0,0 ); H :Array [0..10] of Real = ( 0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.0 ); P :Array [0..10] of Real = ( 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 ); Q :Array [0..10] of Real = ( 0.05,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.05 ); R :Array [0..11] of Real = ( 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 ); M :Integer = 11; N :Integer = 11; NG :Integer = 3; LU :Integer = 1; ISP :Integer = 20; label _1,_2,_3,_4,_5; begin Result := ''; E := 1.E-7; for I:=1 to M do begin for J:=1 to N do begin if ( I-J ) < 0 then goto _2 else if ( I-J ) > 0 then goto _2 else goto _1; _1: A[(I-1)+(J-1)*11] := 1.0/Q[I-1]; goto _3; _2: A[(I-1)+(J-1)*11] := 0.0; _3: end; end; U[0] := -11.0/24.0; for J:=2 to N do begin _4: U[J-1] := 0.0; end; SF := 0.025; Y := -0.5; for I:=1 to M do begin S := SF*Sin(123.456*I+789.0); F[I-1] := Y-(IntPower(Y,3))/3.0+S; _5: Y := Y+H[I-1]; end; EF02R(M,N,A,F,NG,V1,V2,MU,H,P,Q,R,E,ISP,LU,U,FU,KN,B); Result := Result + Format('%s',[' FU=']); Result := Result + Format('%20.16f',[FU]) + #$0D#$0A; Result := Result + Format('%s',[' KN=']); Result := Result + Format('%3d',[KN]) + #$0D#$0A; Result := Result + Format('%s',[' U=']); Result := Result + #$0D#$0A; for _i:=0 to 10 do begin Result := Result + Format('%20.16f',[U[_i]]); if ( ((_i+1) mod 1)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('tef02r',Result); { вывод результатов в файл tef02r.res } exit; end; end. Результат: U = ( -4.58E-1, -4.11E-1, -3.16E-1, -2.21E-1, -1.26E-1, -3.13E-2, 7.87E-2, 1.73E-1, 2.68E-1, 3.64E-1, 4.58E-1 )