
Листинг_№10
%Программа сглаживания функции с помощью метода
%сильной регуляризации путем решения дифференциального
%уравнения второго порядка (62) согласно разностным
%схемам (63), (65), (65')
function smoothing
%Определяем область интегрирования
a=0; b=1;
%Определяем число узлов разностной схемы и ее шаг
N=101; h=(b-a)/(N-1);
%Определяем сетку по x
x=a:h:b;
%Определяем функцию, которая немного зашумлена
for i=1:N
f(i)=x(i)*sin(2*pi*x(i))+0.1*randn;
end
%Выбираем пару значений параметра регуляризации
alpha=[1e-3 1e-4];
%Организуем цикл расчетов с разными значениями
%параметра регуляризации
for s=1:length(alpha)
%Вычисляем начальные значения коэффициентов
%прогонки y(i-1)=c(i)y(i)+d(i), учитывая левое
%граничное условие (65)
c(2)=(alpha(s)*p1(x(1)))/...
(alpha(s)*p1(x(1))+0.5*h^2*(1+alpha(s)*p0(x(1))));
d(2)=(0.5*h^2*f(1))/...
(alpha(s)*p1(x(1))+0.5*h^2*(1+alpha(s)*p0(x(1))));
%Вычисляем коэффициенты прогонки
for i=2:(N-1)
c(i+1)=(alpha(s)*p1(x(i)+0.5*h))/...
(h^2*(1+alpha(s)*p0(x(i)))+alpha(s)*...
(p1(x(i)+0.5*h)+p1(x(i)-0.5*h))-...
alpha(s)*p1(x(i)-0.5*h)*c(i));
d(i+1)=(alpha(s)*p1(x(i)-0.5*h)*d(i)+h^2*f(i))/...
(h^2*(1+alpha(s)*p0(x(i)))+alpha(s)*...
(p1(x(i)+0.5*h)+p1(x(i)-0.5*h))-...
alpha(s)*p1(x(i)-0.5*h)*c(i));
end
%Учитывая правое граничное условие (65'),
%находим y(N) и далее вычисляем все решение y(i)
y(N)=(alpha(s)*p1(x(N))*d(N)+0.5*h^2*f(N))/...
(alpha(s)*p1(x(N))+0.5*h^2*(1+alpha(s)*...
p0(x(N)))-alpha(s)*p1(x(N))*c(N));
for i=N:-1:2
y(i-1)=c(i)*y(i)+d(i);
end
%Рисуем зашумленное решение f и сглаженное решение y
subplot(1,2,s); plot(x,f,x,y);
end
%Определяем функцию p0
function y=p0(x)
y=1+x^2;
%Определяем функцию p1
function y=p1(x)
y=1+x^2;
На рис.10 приведен итог работы кода программы листинга_№10. На левом рисунке представлена зашумленная функция f(x) и ее сглаженный вариант yi, полученный с помощью метода сильной регуляризации, т.е. путем решения дифференциального уравнения (62) по разностным схемам (63), (65), (65). В качестве параметра регуляризации выбиралось значение 103. На правом рисунке представлены аналогичные профили, но при параметре регуляризации, равном 104. Видно, что степень сглаживания на правом рисунке менее выражена по сравнению с аналогичным профилем на левом рисунке. Подбирая значение параметра регуляризации можно добиться нужной степени сглаживания искомой функции.
Рис.10. Сглаживание функции f(x) с помощью метода сильной регуляризации путем численного решения уравнения (62)
Дифференцирование функции. Задачу дифференцирования u(x) = f(x), x [a,b] можно представить в виде уравнения Вольтерра первого рода:
,
которое в свою очередь может быть переписано в виде уравнения Фредгольма первого рода с разрывным ядром:
, (66)
где
(66)
Поскольку условие непрерывности ядра не является существенным, применим к данной задаче метод сильной регуляризации, тогда, учитывая (51), (66), (66), получим
(67)
Подставляя (67) в (51) и считая n = 1, получим следующее интегро-дифференциальное уравнение:
(68)
плюс пара граничных
условий
.
Для численного решения интегро-дифференциального уравнения (68) введем равномерные сетки по переменным и : i = a + h(i 1), j = a + h(j 1), i,j = 1,2,…,N, h = (b a)/(N 1). Аппроксимируем вторую производную в (68) симметричной второй разностью, а интегралы, входящие в левую часть уравнения, по формулам трапеции, тогда получим следующее разностное уравнение:
(69)
где , i = 2,…,N 1. Следуя схеме предыдущего примера (64), аппроксимируем граничные условий u(a) = u(b) = 0 со вторым порядком точности по h, тогда левое и правое граничные условия предстанут в виде:
(70)
. (70)
На листинге_№11 приведен код программы численного дифференцирования функции f(x) методом сильной регуляризации путем решения интегро-дифференциального уравнения (68) с помощью разностной схемы (69) — (70). Выбиралось следующее представление для функции f: f(x) = sin(x) + (x), где (x) — небольшая шумовая добавка. Численное решение y разностной задачи (69) — (70) сравнивалось с точным значением производной ya = cos(x) в рамках оценки ошибки error = ||y ya||C.