Текст подпрограммы и версий ef04r_p.zip |
Тексты тестовых примеров tef04r_p.zip |
Решение интегрального уравнения Фредгольма I рода методом поточной невязки с дескриптивной регуляризацией.
Приближенное решение интегрального уравнения Фредгольма I рода
b (1) Au ≡ ∫ k(x, y) u(y) dy = f(x) , c ≤ x ≤ d , a
с гладким ядром и правой частью f (x), заданной с погрешностью δ (x), при априорно известной информации об ограниченности первой призводной исходного решения u (y) и об участках знакопостоянства его кривизны сводится методом поточной невязки с дескриптивной регуляризацией [1,2] к отысканию общей точки u (y) множеств Uδ , Uν , Uμ :
(2) Uδ = { u: | Au - f(x) | ≤ δ(x) } , (3) Uν = { u: v1(y) ≤ u'(y) ≤ v2(y) ∀y ∈ [a, b] } , (4) Uμ = { u: μ(y) u''(y) ≥ 0 ∀y ∈ [a, b] , μ(y) = sign u''(y) }
т.е. к выделению из множества Uδ формальных решений уравнения (1) приближенного решения u (y), удовлетворяющего условиям (3), (4). v1 (y) и v2 (y) - заданные на отрезке [a, b] функции.
Дискретный аналог задачи (2) - (4) состоит в определении вектоpа u = (u1, ..., uN)∈EN, удовлетворяющего системе линейных неpавенств:
(5) | (K Du)i - fi | ≤ δi , i = 1, 2, ..., M , (6) v1 j ≤ (uj+1 - uj) / hj ≤ v2 j , j = 1, 2, ..., N-1 , (7) μj ( (uj+1 - uj) / hj - (uj - uj-1) / hj-1 ) ≥ 0 , j = 2, 3, ..., N-1 ,
где u = (u1, ..., uN)∈EN, K - матрица порядка M * N с элементами Ki j = k (xi, yj), {xi} - сетка узлов на отрезке [c, d]: c = x1 < ... < xi < ... < xM = d, {yj} - сетка узлов на отрезке [a, b]: a = y1 < ... < yj < ... < yN = b, yj+1 - yj = hj, D - диагональная матрица коэффициентов dj квадратурной формулы, j = 1, 2, ..., N, fi = f (xi) и δi = δ (xi) - значения правой части и погрешности в узлах xi, i = 1, 2, ..., M. Через v1 j, v2 j и μj обозначены значения функций v1 (y), v2 (y) и μ (y) в узлах yj.
Для приближенного решения системы неpавенств (5) - (7) применяется численный алгоритм, разработанный в [3]. B случае пустоты множества (5) при заданном уpовне погрешности в подпрограмме предусмотрено нахождение значений δ1 = δi + p δi (p > 0 - заданный параметр), при которых множество (5) непусто.
1. | Морозов B.A. O выборе параметра при решении функциональных уравнений методом регуляризации - ДАН CCCP, 1967, 175, N 6. |
2. | Тихонов A.H., Морозов B.A. Методы регуляризации некоppектно поставленных задач. - B сб.: Вычислительные методы и программирование. Вып.35. M.: Изд - во МГУ, 1981. |
3. | Гольдман Н.Л. Об одной модификации метода дескриптивной регуляризации решения интегральных уравнений Фредгольма I рода. - B сб.: Методы и алгоритмы в численном анализе. M.: Изд - во МГУ, 1982. |
procedure EF04R(M :Integer; var N :Integer; var A :Array of Real; var F :Array of Real; var DELTA :Array of Real; P :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 UP :Array of Real; var U :Array of Real; var B :Array of Real);
Параметры
M - | заданная размерность вектоpа правой части f (тип: целый); |
N - | заданная размерность вектоpа искомого решения (тип: целый); |
A - | заданный вещественный двумерный массив размера M * N, содержащий элементы матрицы K: А (I, J) = Ki j; |
F - | заданный вещественный вектоp длины M, содержащий компоненты вектоpа правой части: F (I) = fi; |
DELTA - | заданный вещественный вектоp длины M, содержащий компоненты вектоpа погрешности: DELTA (I) = δi; |
P - | параметр, задающий уровень погрешности δi в случае пустоты множества (5) при исходном уpовне погрешности (тип: вещественный); |
NG - | заданный признак наличия ограничений на искомое решение (тип: целый): |
NG = 0 - | если ограничения (6), (7) отсутствуют; |
NG = 1 - | если выполнены ограничения (6); |
NG = 2 - | если выполнены ограничения (7); |
NG = 3 - | если выполнены ограничения (6) и (7); |
V1 - | заданный вещественный вектоp длины N, первые N - 1 компонент которого содержат ограничения v1 j: V1 (J) = v1 j; |
V2 - | заданный вещественный вектоp длины N, первые N - 1 компонент которого содержат ограничения v2 j: V2 (J) = v2 j; |
MU - | заданный целый вектоp длины N, первые N - 2 компонент которого содержат параметры μj: MU (J) = μj; |
H - | заданный вещественный вектоp длины N, первые N - 1 компонент которого содержат шаги hj разностной сетки на отрезке [a, b]: H (J) = hj; |
UP - | заданный вещественный вектоp длины N, содержащий произвольное приближение: UP (J) = uj; |
U - | вещественный вектоp длины N; в результате работы подпрограммы содержит вычисленное решение u; |
B - | вещественный вектоp длины 3M + 12N + 4, используемый как рабочий. |
Версии: нет
Вызываемые подпрограммы
AVZ2R - | нахождение максимальной по модулю компоненты из всего вектоpа или из заданного подмножества этого вектоpа. |
IA20R - | наилучшая среднеквадратическая аппроксимация одномерной функции на множестве кусочно - выпуклых функций с ограниченной первой производной. |
Замечания по использованию
1. |
B подпрограмме в качестве квадратурной формулы используется формула трапеций, коэффициенты dj которой определяются заданием шагов hj разностной сетки на [a, b]. | |
2. |
B результате работы подпрограммы исходная информация, расположенная в массиве A, не сохраняется. | |
3. | B результате работы подпрограммы массив DELTA содержит значения параметров δi, при которых фактически решена задача, т.е. обеспечивающих непустоту множества ограничений (5). |
Рассматривается интегральное уравнение 1 ∫ k(x, y) - u(y) dy = F(x) -1 с ядром k(x, y) = (1 + (x - y)2)-1 , правой частью F(x) = (2 - x2) ( arctg(1 - x) + arctg(1 + x) ) - 2 - - x ln( (1 + (1 - x)2) / (1 + (1 + x)2) ) и точным решением u(y) = 1 - y2 .
Ниже приводится фрагмент программы, вычисляющей приближенное решение.
Для аппроксимации интеграла применяется квадратурная формула трапеций с использованием равномерной сетки по x на отрезке [- 2, 2] с шагом hi = 0.1 (число узлов M = 41) и равномерной сетки по y на отрезке [- 1, 1] с шагом hj = 0.05 (число узлов N = 41). Решение ищется в классе функций u (y) со следующими свойствами:
u'(y) ≥ 0 при -1 ≤ y ≤ 0 , u'(y) ≤ 0 при 0 < y ≤ 1 , u''(y) ≤ 0 при -1 ≤ y ≤ 1.Unit TEF04R_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, EF04R_p; function TEF04R: String; implementation function TEF04R: String; var NG,M,N,J,K,I,_i :Integer; P,W,W1 :Real; A :Array [0..1680] of Real; F :Array [0..40] of Real; U :Array [0..40] of Real; B :Array [0..618] of Real; const DELТА :Array [0..40] of Real = ( 0.001,0.001,0.001,0.001,0.001,0.001,0.001,0.001, 0.001,0.001,0.001,0.001,0.001,0.001,0.001,0.001, 0.001,0.001,0.001,0.001,0.001,0.001,0.001,0.001, 0.001,0.001,0.001,0.001,0.001,0.001,0.001,0.001, 0.001,0.001,0.001,0.001,0.001,0.001,0.001,0.001, 0.001 ); НХ :Array [0..40] of Real = ( 0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1, 0.1,0.1,0.1,0.1,0.0 ); HY :Array [0..40] of Real = ( 0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05, 0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05, 0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05, 0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05, 0.05,0.0 ); V1 :Array [0..40] 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, 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,100.0,100.0,100.0, 100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0, 100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0, 100.0,0.0 ); V2 :Array [0..40] of Real = ( 100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0, 100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0, 100.0,100.0,100.0,100.0,0.0,0.0,0.0,0.0,0.0,0.0, 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, 0.0,0.0,0.0 ); MU :Array [0..40] of Integer = ( 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 ); UP :Array [0..40] 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, 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, 0.0,0.0,0.0,0.0,0.0 ); label _1,_2,_4,_5; begin Result := ''; P := 1.0; NG := 3; M := 41; N := 41; B[0] := -2.0; B[M+0] := -1.0; for J:=2 to N do begin K := M+J; V1[J-2] := -V1[J-2]; MU[J-2] := -MU[J-2]; _1: B[K-1] := B[K-2]+HY[J-2]; end; for I:=2 to M do begin _2: B[I-1] := B[I-2]+HX[I-2]; end; for I:=1 to M do begin for J:=1 to N do begin K := M+J; A[(I-1)+(J-1)*41] := 1.0/(1.0+IntPower(B[K-1]-B[I-1],2)); _4: end; end; for I:=1 to M do begin W := 1.0+B[I-1]; W1 := 1.0-B[I-1]; F[I-1] := (1.0+W*W1)*(ArcTan(W)+ ArcTan(W1))-2.0-B[I-1]*Ln((1.0+W1*W1)/(1.0+W*W)); _5: end; EF04R(M,N,A,F,DELTA,P,NG,V1,V2,MU,HY,UP,U,B); Result := Result + Format('%s',[' РЕШЕНИЕ U=']); Result := Result + #$0D#$0A; for _i:=0 to 40 do begin Result := Result + Format('%20.16f ',[U[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('TEF04R',Result); { вывод результатов в файл TEF04R.res } end; end. Результаты: при J = 1 + 5K , K = 0, 1, ..., 8 U(J) = ( 0.056, 0.415, 0.716, 0.950, 1.038, 0.942, 0.707, 0.416, 0.063 )