Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция№14.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
764.42 Кб
Скачать

Листинг_№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 = (ba)/(N  1). Задачу (12) на поиск собственных значений 1 будем решать численно, используя встроенную в MATLAB функцию eig. На листинге_№2 приведен код соответствующей программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]