
Листинг_№1
%Численное решение интегрального уравнения (7)
%с помощью разностной схемы (9) в комплексе с
%методом последовательных приближений
clear all
%Определяем точность сходимости итераций eps и
%максимальное количество итераций smax
eps=1e-5; smax=30;
%Определяем число узлов в разностной схеме
%и шаг сетки
N=101; h=1.0/(N-1);
%Определяем сетку по x
x=0:h:1;
%Определяем начальное распределение решения
%в методе последовательных приближений
for n=1:N
y(n)=0.1*randn;
end
%Оцениваем отличие начального распределения
%решения от аналитического решения (7') в
%норме C
for n=1:N
z(n)=abs(y(n)-x(n)+1-sqrt(2.0/3));
end
error(1)=max(z);
%Рисуем начальное распределение в виде красной
%линии
subplot(1,2,1);
plot(x,y,'Color','red','LineWidth',1.5);
hold on
s=1; er=1;
%Организуем цикл последовательных приближений
%к искомому решению согласно схеме (9)
while (er>eps)&(s<smax)
for n=1:N
I=0.5*(y(1)^2+y(N)^2);
for m=2:(N-1)
I=I+y(m)^2;
end
y2(n)=x(n)-h*I;
end
%Находим разность между новой и предыдущей
%итерациями
for n=1:N
z(n)=abs(y2(n)-y(n));
end
%Оцениваем ошибку сходимости в норме C
er=max(z);
y=y2;
s=s+1;
subplot(1,2,1); plot(x,y,'LineWidth',1.5);
hold on
%Находим разность между текущей итерацией и
%аналитическим решением (7')
for n=1:N
z(n)=abs(y(n)-x(n)+1-sqrt(2.0/3));
end
error(s)=max(z);
end
%Определяем аналитическое решение
for n=1:N
ya(n)=x(n)-1+sqrt(2.0/3);
end
%Рисуем аналитическое решение черной жирной линией
subplot(1,2,1);
plot(x,ya,'Color','black','LineWidth',3);
%Рисуем график зависимости ошибки численного решения
%от шага итерации
subplot(1,2,2);
semilogy(1:s,error,'LineWidth',2);
На рис.1 приведен
итог работы кода программы листинга_№1.
На левом рисунке изображены графики
последовательных итераций, которые
сходятся к аналитическому решению
.
Случайная кривая, изображенная красной
линией, выступала в качестве начального
приближения в процедуре последовательных
приближений. Черной жирной линией
изображено аналитическое решение
.
На правом графике изображена зависимость
ошибки численного решения error
=
от номера итераций. Видна довольно
высокая скорость сходимости. Отметим,
что второе аналитическое решение
не удается воспроизвести согласно
численной процедуре (9), т.к. итерации
расходятся.
Рис.1. Численное решение интегрального уравнения (7) с помощью метода последовательных приближений (9)
Рассмотрим далее линейные задачи. Для линейных задач обоснование сходимости содержится в теории Фредгольма, которая здесь не приводится из-за своей громоздкости2. Пусть для аппроксимации интеграла, взятого на отрезке [a,b], используется одна из линейных квадратурных формул с узлами xn, и весами cn, n = 1,…,N, т.е.
. (10)
Применим формулу (10) к однородному уравнению Фредгольма (5), тогда получим
. (11)
Система (11)
представляет собой систему на определение
собственных значений матрицы K
с элементами
.
Матрица K
имеет N
собственных значений, которые являются
приближением к первым собственным
значениям ядра K(x,).
Разностное уравнение (11) решают с помощью
методов, разобраны в лекции №6, посвященной
проблеме собственных значений.
Изучим задачу (11)
на примере решения однородного уравнения
Фредгольма (5) с простейшим ядром K(x,)
= x.
Для данного ядра существует одно-единственное
собственное значение
и собственная функция u(x)
= Cx,
где C
— произвольная константа. Выбирая
формулу трапеции при аппроксимации
интеграла, перепишем уравнение (11) для
данного конкретного случая в следующем
виде:
, (12)
где xn = a + h(n 1), m = a + h(m 1), n, m = 1,…,N, h = (b a)/(N 1). Задачу (12) на поиск собственных значений 1 будем решать численно, используя встроенную в MATLAB функцию eig. На листинге_№2 приведен код соответствующей программы.