Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
83
Добавлен:
17.04.2013
Размер:
300.03 Кб
Скачать

Московский институт электронной техники

(технический университет)

Кафедра Высшей математики - I.

Курсовая работа

по курсу "Методы прикладной

математики".

Вариант 22.

Выполнил: Качоровский Д.А.

Группа: МП-35.

Руководитель: Лесин В. Н.

Москва, 2000 г.

Постановка задачи и е¸ физическая интерпретация.

Найти с помощью разностных методов решение дифференциального уравнения в частных производных:

ᄉ ᄃ

Данное уравнение относится к уравнениям эллиптического типа.

Исследование стационарных процессов различной физической природы часто приводит к необходимости решать уравнения эллиптического типа. Простейшим и наиболее распространенным уравнением эллиптического типа является уравнение Пуассона:

Однородное уравнение Пуассона (при f(x,y)=0) называется уравнением Лапласа. Таким уравнением описываются явления электростатики и агнитостатики. В частности, подобным уравнением описывается потенциал U(x,y) электрического поля, образованного объемным зарядом частиц плотностью f(x,y).

Подобной же установке удовлетворяет задача стационарного двумерного распределения температуры в пластине конечной толщины, если внутри пластины распределены по заданному закону источники (стоки) тепла, описываемые функцией f(x,y) , a на границах поддерживается заданная температура.

Данное уравнение можно интерпретировать как описание распределения температуры в пластине конечной толщины, на всех краях которой поддерживается постоянная во времени температура.

Для удобства при решении надо преобразовать данную систему следующим образом: x=sqrt(2)*x', тогда в система запишется так:

Применение метода сеток при решении уравнения Пуассона.

Метод сеток состоит в сведении решения краевой задачи к решению системы алгебраических уравнений для так называемой сеточной функции. Для этого область непрерывного изменения аргумента заменяется областью дискретного его изменения. Дифференциальный оператор заменяется некоторым разностным оператором. Краевые и начальные условия заменяются на соответствующие разностные аналоги. Выберем в области, где ищется решение дифференциального уравнения, некоторое конечное множество точек, в которых мы будем искать решение уравнения. Ясно, что чем больше мы возьмем таких точек, тем точнее решим уравнение. Множество таких точек называется сеткой, отдельные точки - узлами сетки. Функция, определенная в узлах сетки, называется сеточной функцией.

Пусть дан линейный дифференциальный оператор L, действующий на функцию u=u(x,y). Заменяя входящими в L u производные разностными отношениями, получим вместо L u разностное выражение Lh uh, являющееся линейной комбинацией значений сеточной функции uh на некотором множестве узлов сетки, называемом сеточным шаблоном. Такая приближенная замена L u на Lh uh называется аппроксимацией дифференциального оператора разностным оператором.

Говорят, что Lh аппроксимирует дифференциальный оператор L с порядком аппроксимации m>0 в точке x, если

(x)=Lhu(x)-Lu(x)=o(hm).

Аппроксимируем данное уравнение, используя пятиточечный шаблон "крест".Аппроксимация дифференциального оператора на этом шаблоне имеет вид:

где h1 - шаг сетки по i и h2 - шаг сетки по j. Погрешность аппроксимации .

Если известна искомая функция U(x,y) в точках :

(i-1,j) ; (i+1,j) ; (i,j+1) ; (i,j-1),

то значение U(x,y) в точке (i,j) может быть приближенно найдено следующим образом:

ãäå

Это уравнение должно выполняться для всех внутренних узлов сетки. Для того, чтобы система стала полностью определенной надо дополнить ее уравнениями, полученными при аппроксимации начальных и граничных условий.

Реализация метода сеток на ЭВМ в среде Matlab.

Будем решать данную систему методом верхней релаксации, который является обобщением метода Зайделя. (Метод верхней релаксации вырождается в метод Зайделя при параметре сходимости .)

Применительно к нашей конечно-разностной схеме, метод верхней релаксации записывается в виде:

Данный метод реализован в программе solve.m (см. Приложение 1). Для проверки метода и его реализаций я попробовал найти решение следующего дифференциального уравнения:

Аналитическим решением которого является функция:

Максимум модуля разности U(xi,yj)-F(xi,yj) при разбиении 20х20 без нахождения оптимального значения коэффициента и при окончательной погрешности итераций A=9.4954e-5 составил 9.8431е-4, что укладывается в условие его ограниченности о(h1 +h2 ).

Итерационный процесс сходится для всех , удовлетворяющих неравенству . Вопрос о выборе оптимального значения из данного промежутка, которое обеспечивало бы максимальную скорость сходимости метода верхней релаксации очень сложен в теоретическом отношении. Но применительно к конкретной задаче оптимальное значение параметра сходимости можно определить из машинного эксперимента. Автором была написана программа optimize.m (см. Приложние 2) в среде Matlab для изучения скорости сходимости в зависимости от параметра сходимости. За основу алгоритма было взято решение данного уравнения на сетке фиксированного размера за фиксированное число шагов. Результатом выполнения данной программы было оптимальное значение коэффициента . Соответствующие графики зависимости погрешности от коэффициента при фиксированном количестве итераций представлены на рисунке.

Таким образом было получено оптимальное значение параметра сходимости . Это значение и использовалось автором при конечных вычислениях в программе solve.m. График найденой функции и е¸ лини уровня представлены на рисунках.

Матрица решения заданного уравнения для M=N=10, приведена в Приложении 4.

Для доказательства сходимости полученной конечно-разностной схемы я проверил условия теоремы, приведенной в использованной мною литературе, для матрицы А данной задачи. Теорема утверждает, что если А - самосопряженный и положительно определ¸нный оператор в пространстве сеточных функций и оператор (т.е. положительно определен в ), тогда стационарный двухслойный итерационный процесс сходится в норме к точному решению u системы . Где B=D+L, D - диагональ матрицы А, L - элементы матрицы А, расположенные ниже главной диагонали. Для метода Зайделя . Текст программы shod.m, реализующей эту проверку можно найти в Приложении 4. В случае невыполнении одного из условий теоремы, программа выда¸т соответствующее сообщение об ошибке, иначе сообщение о положительном результате проверки. В данном случае проверка матрицы А дала положительный результат.

Приложение 1. Текст основной программы solve.m.

function solve(M,N,a,b,Mu,EPS,MAX)

h1=a/M;

h2=b/N;

q=h2/h1;

U=ones(M+1,N+1);

x=zeros(M+1,1);

y=zeros(N+1,1);

for i=1:(M+1)

U(i,1)=0;

U(i,N+1)=2*((i-1)*h1)^2+2*sqrt(2)*(i-1)*h1+2;

x(i)=(i-1)*h1;

end

for j=1:(N+1)

U(1,j)=2*((j-1)*h2)^2;

U(N+1,j)=((j-1)*h2)^2+4*(j-1)*h2;

y(j)=(j-1)*h2;

end

k=1;

A=EPS+1;

a1=1/(2*(1+q^2));

a2=q*q;

a3=h2^2*a1;

s=0;

t=0;

while(A>EPS)

k=k+1;

A=0;

for i=2:M

for j=2:N

s=(i-1)*h1;

t=(j-1)*h2;

X=a1*(U(i,j-1)+U(i,j+1)+a2*U(i-1,j)+a2*U(i+1,j))

+a3*(-2*s^2-t^2);

X=Mu*X+(1-Mu)*U(i,j);

R=abs(X-U(i,j));

if(R>A)

A=R;

end

U(i,j)=X;

end

end

A

if(k>=MAX)

disp('Steps limit reached')

break;

end

end

sprintf('%d steps passed',k);

sprintf('%f sharpness reached',A);

pause;

N=N+1;

plot(x,U(:,1),x,U(:,floor(N/5)),x,U(:,floor(2*N/5)),

x,U(:,floor(3*N/5)),x,U(:,floor(4*N/5)),x,U(:,N))

pause;

M=M+1;

plot(y,U(1,:),y,U(floor(M/5),:),y,U(floor(2*M/5),:),

y,U(floor(3*M/5),:),y,U(floor(4*M/5),:),y,U(M,:))

pause;

N=N-1;

M=M-1;

F=zeros(11,11);

for j=1:11

for i=1:11

F(i,j)=U((i-1)*M/10+1,(j-1)*N/10+1);

end

sprintf('F(x,%d)',j)

F(:,j)

pause;

end

Приложение 2. Подпрограмма optimize.m определения оптимального значения параметра .

function [Muopt]=optimize(M,N,a,b,MAX,DEPTH)

eps=ones(10,1);

eps=eps.*MAX;

epsmin=MAX;

n=1;

m=10;

Mu=ones(10,1);

Mu(10)=2;

Muopt=1;

for j=1:DEPTH

Mu(1)=Mu(n);

Mu(10)=Mu(m);

for i=2:9 Mu(i)=Mu(1)+i*(Mu(10)-Mu(1))/10; end

for i=1:10

eps(i)=findeps(M,N,a,b,Mu(i),MAX);

if(eps(i)<epsmin)

epsmin=eps(i);

n=i;

end

end

Muopt=Mu(n)

m=n;

if(eps(n-1)<eps(n+1))

n=n-1;

else

m=m+1;

end

while(eps(n-1)==eps(n))

n=n-1;

if(n<2) break; end

end

while(eps(m)==eps(m+1))

m=m+1;

if(m>9) break; end

end

end

plot(Mu,eps)

pause

sprintf('Optimum Mu = %f',Muopt);

Приложение 3. Программа findeps.m нахождения погрешности аппроксимирования, при заданном количестве итераций и параметре .

function [A]=findeps(M,N,a,b,Mu,MAX)

h1=a/M;

h2=b/N;

q=h2/h1;

U=ones(M+1,N+1);

x=zeros(M+1,1);

y=zeros(N+1,1);

for i=1:(M+1)

U(i,1)=0;

U(i,N+1)=2*((i-1)*h1)^2+2*sqrt(2)*(i-1)*h1+2;

x(i)=(i-1)*h1;

end

for j=1:(N+1)

U(1,j)=2*((j-1)*h2)^2;

U(N+1,j)=((j-1)*h2)^2+4*(j-1)*h2;

y(j)=(j-1)*h2;

end

a1=1/(2*(1+q^2));

a2=q*q;

a3=h2^2*a1;

s=0;

t=0;

for k=1:MAX

A=0;

for i=2:M

for j=2:N

s=(i-1)*h1;

t=(j-1)*h2;

X=a1*(U(i,j-1)+U(i,j+1)+a2*U(i-1,j)+

a2*U(i+1,j))+a3*(-2*s^2-t^2);

X=Mu*X+(1-Mu)*U(i,j);

R=abs(X-U(i,j));

if(R>A)

A=R;

end

U(i,j)=X;

end

end

end

Приложение 4. Результат вычислений программы solve.m при значениях N=M=20, окончательная погрешность итераций А=8.2506е-06, =1.7322 :

y\x 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

0 0 0 0 0 0 0 0 0 0 0 0

0.1 0.0200 0.0868 0.1414 0.1882 0.2296 0.2670 0.3011 0.3324 0.3612 0.3873 0.4100

0.2 0.0800 0.1967 0.2981 0.3879 0.4689 0.5429 0.6113 0.6748 0.7341 0.7893 0.8400

0.3 0.1800 0.3373 0.4783 0.6063 0.7238 0.8328 0.9348 1.0310 1.1221 1.2083 1.2900

0.4 0.3200 0.5110 0.6859 0.8474 0.9980 1.1398 1.2745 1.4032 1.5267 1.6455 1.7600

0.5 0.5000 0.7188 0.9220 1.1124 1.2928 1.4651 1.6311 1.7920 1.9486 2.1012 2.2500

0.6 0.7200 0.9605 1.1863 1.4010 1.6074 1.8078 2.0039 2.1968 2.3871 2.5750 2.7600

0.7 0.9800 1.2348 1.4769 1.7105 1.9389 2.1649 2.3900 2.6152 2.8406 3.0659 3.2900

0.8 1.2800 1.5395 1.7894 2.0355 2.2818 2.5308 2.7841 3.0424 3.0355 3.5721 3.8400

0.9 1.6200 1.8692 2.1158 2.3670 2.6266 2.8966 3.1781 3.4712 3.7756 4.0898 4.4100

1.0 2.0000 2.2100 2.4400 2.6900 2.9600 3.2500 3.5600 3.8900 4.2400 4.6100 5.0000

Литература.

В. Г. Долголаптев, В. Н. Земсков. Численные методы решения разностных уравнений математической физики. Москва, МИЭТ, 1987г.

Соседние файлы в папке mpm_22a