Решение эллиптических уравнений разностными методами

Автор работы: Пользователь скрыл имя, 21 Июня 2012 в 20:40, курсовая работа

Краткое описание

Численное решение прикладных задач всегда интересовало математиков. Крупнейшие представители прошлого сочетали в своих исследованиях изучение явлений природы, получение их математического описания, как иногда говорят, математической модели явления, и его исследование. Анализ усложненных моделей потребовал создание специальных, как правило, численных или асимптотических методов решения задач. Названия некоторых из таких методов – методы Ньютона, Эйлера, Лобачевского, Гаусса, Чебышева, Эрмита, Крылова – свидетельствуют о том, что их разработкой занимались крупнейшие ученые своего времени.
Настоящее время характерно резким расширением приложений математики, во многим связанным с созданием и развитием средств вычислительной техники. В результате появления ЭВМ (электронно-вычислительных машин, или как часто говорят, компьютеров) с программным управлением менее чем за 50 лет скорость выполнения арифметических операций возросла от 0.1 операции в секунду при ручном расчете до 1012 операций на современных серийных ЭВМ, т.е. примерно в 1013 раз.
В настоящее время разработка методов и алгоритмов решения задачи Коши для обыкновенных дифференциальных уравнений продвинута настолько, что зачастую исследователь, имеющий дело с этой задачей, не занимается выбором метода ее решении, а просто обращается к стандартной программе.
В случае с уравнений с частными производными число принципиально различных постановок задач существенно больше. В курсе уравнений с частными производными обычно рассматривается незначительная часть таких постановок, главным образом связанных с постоянными коэффициентами. При этом существует очень малое количество задач, решаемых в явном виде. Многообразие постановок в теории уравнений с частными производными связано с многообразием окружающего нас мира.
Среди всех типов уравнений математической физики эллиптические уравнения с точки зрения вычислителей стоят особняком. С одной стороны, имеется хорошо развитая теория решения эллиптических уравнений и систем. Достаточно легко доказываются теоремы об устойчивости разностных схем для эллиптических уравнений. Цель работы: разработать сеточный метод, позволяющих решать задачу Дирихле методом разностных схем на примере уравнения Лапласа. В качестве среды разработки был выбран пакет matlab 6.5.

Содержание

Аннотация 3
Введение 4
Раздел 1. Математическое описание алгоритмов и операций 6
Раздел 2. Библиотека функций 11
Раздел 3. Тестирование 12
Вывод 16
Заключение 17
Список использованной литературы 18
Приложения 19

Вложенные файлы: 1 файл

Полный отчет по курсовой работе.doc

— 459.50 Кб (Скачать файл)

 

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

1.                  Установлено что явная схема имеет существенный недостаток: накладываются ограничения на шаги и по сетке. Чего лишены неявные схемы.

2.                  Итерационные методы идеально подходят для сеточной схемы «крест», метод верхней релаксации оказался самым быстросходящимся.

3.                  Для метода Гаусса приходится хранить огромную матрицы в памяти ЭВМ, что при достаточно больших N будет накладно.


Заключение

В ходе работы была изучена разностная схема «крест» для нахождения численного решения уравнения Лапласа (эллиптическое уравнение), задача Дирихле.

Также были усвоены и закреплены навыки:

1.      Использования указателей в среде matlab.                           

2.      Программирования в среде matlab.

3.      Разработки численных методов для уравнений эллиптического типа.

 

Были созданы четыре метода реализующих разностную схему «крест» и один метод для «метода установления».


Список использованной литературы

1.      Самарский А.А. Введение в численные методы. Учебное пособие для вузов. 3-е изд., стер. –СПб.: Издательство «Лань», 2005. – 288 с.: ил. – (Учебники для вузов. Специальная литература).

2.      Бахвалов Н.С., Жидков Н. П., Кобельков Г. М. Численные методы – 3-е изд, доп., и перераб. – М.: БИНОМ. Лаборатория знаний, 2004. – 636 с., илл.

3.      Агошков В.И., Дубровский П.Б., Шутяев В.П. Методы решения задач математической физики / Под ред. Г. И. Марчука: Учеб. пособие. – М: ФИЗМАТЛИТ, 2002.-320с.

4.      Мэтьюз Джон Г., Финкс Куртис Д Численные методы использования MATLAB,3-е издание. /Пер с англ. – М. Издательский до «Вильямс», 2001 – 720с.

5.      Турчак Л. И., Плотников П. В. Основы численных методов: Учеб. пособие. – 2-е изд., перераб. И доп. – М.: ФИЗМАТЛИТ, 2005. -304 с.

6.      http://www.intuit.ru/department/calculate/nmdiffeq/6/ - электронная книга

7.      http://www.intuit.ru/department/calculate/vnmdiffeq/12 -  видеолекция

 


Приложения

 

ElipYa.m

function ElipYa(X,N,fi,E) %сеточный метод итерационный, процесс Якоби

% X - Сторона прямоугольника

% Y - Сторона прямоугольника

% N - Количество узлов по х

% K - Количество узлов по y

% fi - функция граничного условия

% E - точность

h=X/N;

%Равномерная сетка по пространственным переменным

x=[0:h:h*N]; % Разбиваем сетку по переменной х

y=[0:h:h*N]; % Разбиваем сетку по переменной у

U=zeros(N+1,N+1); % матрица значений сеточной функции

F=zeros(N+1,N+1); % матрица значений сеточной функции f(x,y)

% "дискретизация начальных условий" и начальное заполнение матрицы значений сеточной функции

U(1,:)=feval(fi,x(1),y); % Первая строка матрицы

U(N+1,:)=feval(fi,x(N+1),y); % Последняя строка матрицы

U(:,1)=feval(fi,y(1),x'); % Первый столбец матрицы

U(:,N+1)=feval(fi,y(N+1),x'); % Последний столбец матрицы

U(2:N,2:N)=rand(N-1,N-1); % Для решения нам необходимо начальное приближение. Осуществляем случайное начальное приближение!

%Собственно вычисление... Применяется метод Якоби

M=E+0.01;

d=0;

iter=0;

while (M>E) % Пока не достигнем требуемой точности

    U0=U;

    for i=2:N % произведем расчеты

        Xb=U(i,:);

        for j=2:N

            v=0.25*(U0(i+1,j)+U0(i-1,j)+U0(i,j+1)+U0(i,j-1));

            U(i,j)=v;

        end;

        d=norm(U(i,:)-Xb);

        if(M>d) % Если условия выполняется, то найдено новое значение остигнутой точности!

            M=d;

        end;

    end;

    iter=iter+1;

end;

figure;

display('Всего потребовалось итераций: ');

display(iter);

surf(x,y,U); % Вывод поверхности!

 

Elip1.m

function [x,y,U]=Elip1(X,N,fi,E) %сеточный метод, итерационный процесс Гаусса-Зейделя

% X - Сторона прямоугольника

% Y - Сторона прямоугольника

% N - Количество узлов по х

% K - Количество узлов по y

% fxy - функция правой части

% fi - функция граничного условия

% E - точность

h=X/N;

%Равномерная сетка по пространственным переменным

x=[0:h:h*N]; % Разбиваем сетку по переменной х

y=[0:h:h*N]; % Разбиваем сетку по переменной у

U=zeros(N+1,N+1); % матрица значений сеточной функции

F=zeros(N+1,N+1); % матрица значений сеточной функции f(x,y)

% "дискретизация начальных условий" и начальное заполнение матрицы значений сеточной функции

U(1,:)=feval(fi,x(1),y); % Первая строка матрицы

U(N+1,:)=feval(fi,x(N+1),y); % Последняя строка матрицы

U(:,1)=feval(fi,y(1),x'); % Первый столбец матрицы

U(:,N+1)=feval(fi,y(N+1),x'); % Последний столбец матрицы

U(2:N,2:N)=rand(N-1,N-1); % Для решения нам необходимо начальное приближение. Осуществляем случайное начальное приближение!

%Собственно вычисление... Применяется метод Гаусса-Зейделя

M=E+0.01;

d=0;

iter=0;

while (M>E) % Пока не достигнем требуемой точности

    for i=2:N % произведем расчеты

        Xb=U(i,:);

        for j=2:N

            v=0.25*(U(i+1,j)+U(i-1,j)+U(i,j+1)+U(i,j-1));

            U(i,j)=v;

        end;

        d=norm(U(i,:)-Xb);

        if(M>d) % Если условия выполняется, то найдено новое значение остигнутой точности!

            M=d;

        end;

    end;

    iter=iter+1;

end;

%После завершения расчетов построим поверхность и вернем значения сетки и сеточной функции, опредеоенной на ней!.

figure;

display('Всего потребовалось итераций: ');

display(iter);

surf(x,y,U); % Вывод поверхности!

 

ElipR.m

function [x,y,U]=ElipR(X,N,fi,t,E) %сеточный метод, итерационный процесс верхней релаксации

% X - Сторона прямоугольника

% Y - Сторона прямоугольника

% N - Количество узлов по х

% K - Количество узлов по y

% fi - функция граничного условия

% E - точность

h=X/N;

%Равномерная сетка по пространственным переменным

x=[0:h:h*N]; % Разбиваем сетку по переменной х

y=[0:h:h*N]; % Разбиваем сетку по переменной у

U=zeros(N+1,N+1); % матрица значений сеточной функции

F=zeros(N+1,N+1); % матрица значений сеточной функции f(x,y)

% "дискретизация начальных условий" и начальное заполнение матрицы значений сеточной функции

U(1,:)=feval(fi,x(1),y); % Первая строка матрицы

U(N+1,:)=feval(fi,x(N+1),y); % Последняя строка матрицы

U(:,1)=feval(fi,y(1),x'); % Первый столбец матрицы

U(:,N+1)=feval(fi,y(N+1),x'); % Последний столбец матрицы

U(2:N,2:N)=rand(N-1,N-1); % Для решения нам необходимо начальное приближение. Осуществляем случайное начальное приближение!

%Собственно вычисление... Применяется метод верхней релаксации

M=E+0.01;

d=0;

iter=0;

while (M>E) % Пока не достигнем требуемой точности

    for i=2:N % произведем расчеты

        Xb=U(i,:);

        for j=2:N

            v=(t/4)*(U(i+1,j)+U(i,j+1))-t*(1-1/t)*U(i,j)+(t/4)*(U(i-1,j)+U(i,j-1));

            U(i,j)=v;

        end;

        d=norm(U(i,:)-Xb);

        if(M>d) % Если условия выполняется, то найдено новое значение остигнутой точности!

            M=d;

        end;

    end;

    iter=iter+1;

end;

figure;

display('Всего потребовалось итераций: ');

display(iter);

surf(x,y,U); % Вывод поверхности!

 

ElipGauss.m

function [x,y,U]=ElipGauss(X,N,fi)

% X - Сторона прямоугольника

% N - Количество узлов по х

% K - Количество узлов по y

% fi - функция граничного условия

% E - точность

h=X/N;

%Равномерная сетка по пространственным переменным

x=[0:h:h*N]; % Разбиваем сетку по переменной х

y=[0:h:h*N]; % Разбиваем сетку по переменной у

U=zeros(N+1,N+1); % матрица значений сеточной функции

F=zeros(N+1,N+1); % матрица значений сеточной функции f(x,y)

Aii=-4*eye(N-1)+diag(ones(1,N-2),1)+diag(ones(1,N-2),-1); %главная блочная диагональ

Aij=eye(N-1,N-1); % нижняя и верхняя диагонали

A=zeros((N-1)*(N-1),(N-1)*(N-1));

B=zeros((N-1)*(N-1),1); % правые части

pos11=0;

pos12=0;

pos21=0;

pos22=0;

% "дискретизация начальных условий" и начальное заполнение матрицы значений сеточной функции

U(1,:)=feval(fi,x(1),y); % Первая строка матрицы

U(N+1,:)=feval(fi,x(N+1),y); % Последняя строка матрицы

U(:,1)=feval(fi,y(1),x'); % Первый столбец матрицы

U(:,N+1)=feval(fi,y(N+1),x'); % Последний столбец матрицы

%U(2:N,2:N)=rand(N-1,N-1); % Для решения нам необходимо начальное приближение. Осуществляем случайное начальное приближение!

for i=1:N-1 % Заполнение блочной матрицы - основной матрицы системы

    if(i==1)

        pos11=1;

        pos12=N-1;

    else

        pos11=pos12+1;

        pos12=pos12+N-1;

    end;

    for j=1:N-1

        if(j==1)

           pos21=1;

           pos22=N-1;

        else

           pos21=pos22+1;

           pos22=pos22+N-1;

        end;

        if(i==j)

            A(pos11:pos12,pos21:pos22)=Aii;

        else

            if(i==j-1 | i==j+1)

                A(pos11:pos12,pos21:pos22)=Aij;

            end;

        end;

    end;

    %Произвести заполнение B

    if(pos11==1 & pos12==N-1)

        B(pos11:pos12,1)=-U(1,2:N)';

        B(pos11,1)=B(pos11,1)-U(2,1);

        B(pos12,1)=B(pos12,1)-U(2,N+1);

    else

        if (pos11==(N-1)*(N-1)-(N-2) & pos12==(N-1)*(N-1))

            B(pos11:pos12,1)=-U(N+1,2:N)';

            B(pos11,1)=B(pos11,1)-U(N,1);

            B(pos12,1)=B(pos12,1)-U(N,N+1);

        else

            B(pos11,1)=B(pos11,1)-U(i+1,1);

            B(pos12,1)=B(pos12,1)-U(i+1,N+1);

        end;

    end;

end;

 

%Собственно вычисление... Применяется метод Гаусса с исключением нулевых

%элементов

d=0;

iter=0;

X=A\B;

for i=2:N

    if(i==2)

        pos11=1;

        pos12=N-1;

    else

        pos11=pos12+1;

        pos12=pos12+N-1;

    end;

    U(i,2:N)=X(pos11:pos12,1)'

end;

figure;

surf(x,y,U);

 

 

ElipT1.m

function [x,y,U]=ElipT1(X,N,tau,fi,E)

% X - Сторона квадрата

% N - Количество узлов

% tau - шаг по времени

% fi - функция граничного условия

% E - точность

%Равномерная сетка по пространственным переменным

h=X/N;

x=[0:h:h*N]; % Разбиваем сетку по переменной х

y=[0:h:h*N]; % Разбиваем сетку по переменной у

U=zeros(N+1,N+1); % матрица значений сеточной функции

U0=zeros(N+1, N+1); % матрица, содержащая предыдущий слой решения по времени

F=zeros(N+1,N+1); % матрица значений сеточной функции f(x,y)

% "дискретизация начальных условий" и начальное заполнение матрицы значений сеточной функции

U(1,:)=feval(fi,x(1),y); % Первая строка матрицы

U(N+1,:)=feval(fi,x(N+1),y); % Последняя строка матрицы

U(:,1)=feval(fi,y(1),x'); % Первый столбец матрицы

U(:,N+1)=feval(fi,y(N+1),x'); % Последний столбец матрицы

% Заполнение матрицы U начальными значениями функции psi(x,y) -

% произвольная функция для начального слоя

for i=2:N

    for j=2:N

        U(i,j)=rand(1,1);% задаем некое случайное начальное приближение

    end;

end;

M=E+0.1;

sigma=tau/h^2;

iter=0;

while(M>E & iter<=500) % процесс стремится к заданной точности

    U0=U; % запоминаем предыдущее приближение

    for i=2:N

        for j=2:N

            U(i,j)=sigma*(U0(i+1,j)+U0(i-1,j)+U0(i,j+1)+U0(i,j-1))+(1-4*sigma)*U0(i,j);%-tau*Fi(i,j);

        end;

        d=norm(U(i,:)-U0(i,:));

        if(M>d)

            M=d;

        end;

    end;

    iter=iter+1;

end;

figure;

display('Всего потребовалось итераций: ');

display(iter);

surf(x,y,U); % Вывод поверхности!

 

 

22

 



[1] Агошков В.И., Дубровский П.Б., Шутяев В.П. Методы решения задач математической физики

[2] Турчак Л. И., Плотников П. В. Основы численных методов

[3] Бахвалов Н.С., Жидков Н. П., Кобельков Г. М. Численные методы

[4] Бахвалов Н.С., Жидков Н. П., Кобельков Г. М. Численные методы

[5] Самарский А.А. Введение в численные методы


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