|
Текст подпрограммы и версий 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 )