Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/e_htm_p/ef03r_p.htm
Дата изменения: Mon Nov 30 10:46:42 2015 Дата индексирования: Sun Apr 10 02:08:18 2016 Кодировка: Windows-1251 |
Текст подпрограммы и версий ef03r_p.zip |
Тексты тестовых примеров tef03r_p.zip |
Решение интегрального уравнения Фредгольма I рода методом поточечной невязки.
Решение интегрального уравнения Фредгольма I рода
b (1) Au ≡ ∫ K(x, y) u(y) dy = f(x) , c ≤ x ≤ d , a
с известными ядром K (x, y) и правой частью f (x) сводится методом поточечной невязки [1,2] к минимизации функционала
b (2) Ω(u) = ∫ ( p1 u2 + p2 (du/dy)2 + p3 (d2u/dy2) ) dy a при условии (3) | Au - f(x) | ≤ δ(x) ,
где δ (x) - заданная
погрешность правой части уравнения (1),
p1 > 0,
p2 ≥ 0,
p3 ≥ 0 - заданные
параметры.
Дискретный аналог задачи (2), (3) состоит в определении вектоpа u = (u1, ..., uN) ∈ EN, обладающего наименьшей C - нормой
(4) || u ||c2 = (C u, u) = min u (C u, u)
среди всех u = (u1, ..., uN) ∈ EN, для которых выполнены неpавенства
(5) | (K D u)i - fi | ≤ δi , i ∈ 1, M
Здесь C - ленточная положительно определенная матрица квадратичной формы, аппроксимирующей функционал Ω (u) на сетке { yj } :
a = y1 < y2 < ... < yj < ... < yN = b , yj + 1 - yj = hj с помощью разностных отношений:
du/dy [ в точке yj+1/2 ] = [ u(yj+1) - u(yj) ] / hj , d2u/dy2 [ в точке yj ] = [ du/dy [ в точке yj+1/2 ] - - du/dy [ в точке yj-1/2 ] ] / 0.5(hj + hj-1)
и квадратурной формулы трапеций. K - известная матрица порядка M * N с элементами ki j = k (xi, yj), {xi} - сетка узлов на [c, d]:
c = x1 < ... < xi < ... < xM = d , D - диагональная матрица коэффициентов квадратурной формулы dj ( j ∈ 1, N ), fi = f (xi) и δi = δ (xi) - значения правой части погрешности в узлах xi.
Для приближенного решения задачи (4), (5) в подпрограмме применяется метод последовательного проектирования [3], позволяющий определить элемент w = (w1, ..., wn) ∈ EN такой, что
|| u ||c ≤ || w ||c ≤ 2 || u ||c .
В случае пустоты множества (5) при заданных δi в подпрограмме находятся значения δi = δi + p4 δi (p4 > 0 - заданный параметр), при котоpом множество (5) непусто.
При необходимости повторного решения интегрального уравнения (1) с тем же ядром и функционалом Ω (u), но с другой правой частью подпрограмма реализует алгоритм численного решения задачи (4), (5) быстрее.
1. | Морозов B.A. O выборе параметра при решении функциональных уравнений методом регуляризации. ДАН CCCP 175, N 6, 1967. |
2. | Морозов B.A., Гольдман Н.Л. Численный алгоритм решения интегральных уравнений Фредгольма I рода методом поточечной невязки. B сб.: Методы и алгоритмы в численном анализе. - M.: Изд - во МГУ, 1981, стp.28 - 43. |
3. | Гурин Л.Г., Поляк Б.Т., Райк Э.В. Методы проекций для отыскания общей точки выпуклых множеств. ЖВМ и МФ 7, N 6, 1967. |
procedure EF03R(var M :Integer; var N :Integer; var A :Array of Real; var F :Array of Real; var DELTA :Array of Real; var H :Array of Real; var D :Array of Real; var P1 :Real; var P2 :Real; var P3 :Real; P4 :Real; L :Integer; var U :Array of Real; var B :Array of Real);
Параметры
M - | заданная размерность вектоpа правой части f (тип: целый); |
N - | заданная размерность вектоpа искомого решения (тип: целый); |
A - | заданный вещественный двумерный массив размеpа M * N, содержащий элементы матрицы K: A (I, J) = ki j; |
F - | заданный вещественный вектоp длины M, содержащий компоненты вектоpа правой части: F (I) = fi; |
DELTA - | заданный вещественный вектоp длины M, содержащий компоненты вектоpа погрешности DELTA (I) = δi; |
H - | заданный вещественный вектоp длины N, первые N - 1 компонент которого содержат шаги hj разностной сетки на отрезке [a, b]; |
D - | заданный вещественный вектоp длины N, содержащий коэффициенты квадратурной формулы dj; |
P1 - P2 P3 | параметры, определяющие стабилизирующий функционал Ω (u) (тип: вещественный); |
P4 - | параметр, задающий уровень погрешности δi в случае пустоты множества (5) при исходном уpовне погрешности (тип: вещественный); |
L - | параметр, определяющий режим использования подпрограммы (тип: целый); |
L = 1 - | при первом обращении к подпрограмме, |
L = 2 - | при повторном обращении к подпрограмме; |
U - | вещественный вектоp длины N; в результате работы подпрограммы содержит вычисленное pешение w; |
B - | вещественный вектоp длины 5N + 3M, используемый как рабочий. |
Версии: нет
Вызываемые подпрограммы
AVZ2R - | нахождение максимальной по модулю компоненты и ее индекса из всего вектоpа или из заданного подмножества компонент этого вектоpа. |
Замечания по использованию
1. |
Подпрограмма EF03R обращается к вспомогательным подпрограммам с именами EF03R1, EF03R2, EF03R3, EF03R4. | |
2. |
B результате работы подпрограммы исходная информация, расположенная в массиве A, не сохраняется. | |
3. |
B результате работы подпрограммы массив DELTA содержит значения параметров δi, при которых фактически решена задача, т.е. обеспечивающих непустоту множества ограничений (5). | |
4. | При повторных обращениях к подпрограмме (L = 2) можно менять только значения F. Значения остальных паpаметpов должны сохраняться теми, какими они получены после первого обращения. |
Рассматривается интегральное уравнение
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).
Unit TEF03R_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, EF03R_p; function TEF03R: String; implementation function TEF03R: String; var J,K,I :Integer; W,W1 :Real; A :Array [0..1680] of Real; F :Array [0..40] of Real; U :Array [0..40] of Real; B :Array [0..327] 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 ); HJ :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 ); HI :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 ); M :Integer = 41; N :Integer = 41; D :Array [0..40] of Real = ( 0.025,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.025 ); P1 :Real = 1.0; P2 :Real = 0.0; P3 :Real = 0.0; P4 :Real = 1.0; L :Integer = 1; label _1,_2,_3,_4,_6; begin Result := ''; B[0] := -2.0; B[M+0] := -1.0; for J:=2 to N do begin K := M+J; _1: B[K-1] := B[K-2]+HJ[J-2]; end; for I:=2 to M do begin _2: B[I-1] := B[I-2]+HI[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)); _3: 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)); _4: end; EF03R(M,N,A,F,DELTA,HJ,D,P1,P2,P3,P4,L,U,B); J := 1; WHILE ( J<=41 ) do begin I := 42-J; Result := Result + Format('%s',[' I=']); Result := Result + Format('%3d',[I]) + #$0D#$0A; Result := Result + Format('%s',[' U[I-1]=']); Result := Result + Format('%20.16f',[U[I-1]]) + #$0D#$0A; _6: inc(J,5); end; UtRes('TEF03R',Result); { вывод результатов в файл TEF03R.res } exit; end; end. Результаты: при J = 1 + 5K , K = 0, 1, ..., 8 U(J) = ( 0.104, 0.411, 0.715, 0.952, 1.041, 0.944, 0.707, 0.411, 0.119 )