Текст подпрограммы и версий
ef02r_p.zip
Тексты тестовых примеров
tef02r_p.zip

Подпрограмма:  EF02R (модуль EF02R_p)

Назначение

Приближенное решение интегрального уравнения Фредгольма 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 )