Метод сеток

Решение конечно-разностной задачи Дирихле для уравнения Лапласа в прямоугольной области. Погрешность замены дифференциального уравнения разностным. Использование схемы узлов при получении сеточных уравнений. Сущность метода Зайделя. Листинг программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 26.04.2011
Размер файла 348,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Сибирская государственная автомобильно-дорожная академия (СибАДИ)

Факультет Информационных систем в управлении

Кафедра Информационной безопасности

Специальность "Комплексное обеспечение ИБ АС"

Пояснительная записка к курсовой работе

по дисциплине: Вычислительная математика и программирование

тема: Метод сеток

Омск - 2009

  • Аннотация

Программа разработана для решения дифференциального уравнения Лапласа:

в прямоугольной области ABCD, с вершинами A(0;0), B(0:1), C(1;1), D(1,0), шагом h=l=0,2, принимающее на границе заданные значения: ; ; ; , методом сеток, c точностью е= 0,01.Программа разработана на языке Borland Pascal 7.0

  • 1. Численная постановка задачи

Уравнение Лапласа является модельным для эллиптических уравнений в частных производных. Некоторые важные задачи, часто встречающиеся в приложениях, сводятся к решению одного эллиптического уравнения. К ним относятся задачи расчета дозвукового безвихревого (потенциального) течения газа и определения стационарного поля температуры в твердом теле.

В данной работе требуется решить конечно - разностную задачу Дирихле для уравнения Лапласа в прямоугольной области т. е. найти непрерывную функцию и(х, у), удовлетворяющую внутри прямоугольной области уравнению Лапласа

(1)

и принимающую на границе области заданные значения, т. е.

, ,

, ,

где fl, f2, f3, f4 -- заданные функции.

Будем считать, что и (х, у) непрерывна на границе области , т. е.

,

,

,

.

Выбрав шаги h, l по x и y соответственно, строим сетку:

, , , ,

где , . [1]

Вводя обозначения , аппроксимируем частные производные и в каждом внутреннем узле сетки центральными разностными производными второго порядка

,

[2]

и заменим уравнение Лапласа конечно-разностным уравнением

, (2)

, .

Погрешность замены дифференциального уравнения разностным, составляет величину . [2]

Уравнения (2) вместе со значениями в граничных узлах образуют систему линейных алгебраических уравнений относительно приближенных значений функции и(х, у) в узлах сетки . Наиболее простой вид имеет эта система при :

(3) [1]

, , , ,

, .

При получении сеточных уравнений (3) была использована схема узлов. Набор узлов, используемых для аппроксимации уравнения в точке, называется шаблоном. В данной работе используется шаблон типа «крест».

Численное решение задачи Дирихле для уравнения Лапласа в прямоугольнике состоит в нахождении приближенных значений искомой функции и(х, у) во внутренних узлах сетки. Для определения величин требуется решить систему линейных алгебраических уравнений (3).

В данной работе она решается методом Зайделя, который состоит в построении последовательности итераций вида

(верхним индексом s обозначен номер итерации). При последовательность сходится к точному решению системы (3). В качестве условия окончания итерационного процесса можно принять

, , .

Таким образом, погрешность приближенного решения, полученного методом сеток, складывается из двух погрешностей: погрешности аппроксимации дифференциального уравнения разностными значениями; погрешности, возникающей в результате приближенного решения системы разностных уравнений (3).

Известно, что описанная здесь разностная схема обладает свойством устойчивости и сходимости. Устойчивость схемы означает, что малые изменения в начальных данных приводят к малым изменениям решения разностной задачи. Только такие схемы имеет смысл применять в реальных вычислениях. Сходимость схемы означает, что при стремлении шага сетки к нулю () решение разностной задачи стремится к решению исходной задачи. Таким образом, выбрав достаточно малый шаг h, можно как угодно точно решить исходную задачу. [3]

Пример решения такой задачи Дирихле, приведен в решении заданного примера.

2. Решение заданного примера

Используя метод сеток, составить приближенное решение задачи Дирихле для уравнения Лапласа (1).

Решение получить в квадрате ABCD, с вершинами A(0;0), B(0:1), C(1;1), D(1,0), шаг h=l=0,2 ;

;

;

;

Систему линейных алгебраических уравнений решить по методу Зайделя, при е=0,01.

Для решения этой задачи, необходимо найти значение функции в ее узлах.

U1,U2,…,U16.

1) Построим сетку с шагом h=l=0,2

2) Вычислим значение функции ,, , , построим сетку с граничными условиями.

на стороне АВ:

U(y=0)=0; U(y=0,2)=7,2; U(y=0,4)=10,8; U(y=0,6)=10,8; U(y=0,8)=7,2; U(y=1)=0

на стороне ВС:

U(x=0,2)=5; U(x=0,4)=10; U(x=0,6)=15; U(x=0,8)=20; U(x=1)=25

на стороне СD:

U(y=0,2)=25; U(y=0,4)=25; U(y=0,6)=25; U(y=0,8)=25;

на стороне АD:

U(x=0,2)=1,545; ; U(x=0,4)=5,878; U(x=0,6)=12,135; U(x=0,8)=19,021;

U(x=1)=25

3) Составим систему линейных алгебраических уравнений:

Зададим начальные условия, значения функции в узловых точках равны 0

,

Составленную систему будем решать итерационным методом Зайделя.

2) Проверим условия сходимости: Возьмем значение функции в точке

коэффициенты перед и равны по 0,25; проверяем условие сходимости +<1, следовательно функция сходится.

Значение функции в узлах, находим при помощи программы.

3. Листинг программы

program MetodSetok;

{$APPTYPE CONSOLE}

uses SysUtils, Math;

const a=5; //количество шагов по х b=5; //количество шагов по y h=0.2; //шаг функции e=0.01; //заданная точность

var i,j,k:integer; u:array [0..5,0..5] of real; x,y,s,f,f1,f2,f3,f4:real; begin s:=1; writeln('Legenky Ilya 21BI'); writeln('Kyrsova9 rabota: Metod Setok'); writeln('3adanna9 to4nost e=0.01'); writeln('shag h=0.2'); writeln('f1=45y(1-y), f2=25, f3=25x, f4=25x*sin((3.14*x)/2)'); //задаем функции и считаем их значения в каждой точке и записываем их в массив for i:=0 to a do begin x:=i*h; f3:=25*x; f4:=25*x*sin((3.14*x)/2); u[i][0]:=f3; u[i][b]:=f4; end; //задаем функции и считаем их значения в каждой точке и записываем их в массив for j:=0 to b do begin y:=j*h; f1:=45*y*(1-y); f2:=25; u[0][j]:=f1; u[a][j]:=f2; end; //вывод сетки с граничными условиями

writeln;

writeln('Setka s grani4nimi yslovi9mi:'); writeln;

writeln ('y=1.0',' ',u[0][0]:6:3,' ',u[1][0]:6:3,' ',u[2][0]:6:3,' ',u[3][0]:6:3,' ',u[4][0]:6:3,' ',u[5][0]:6:3);

writeln ('y=0.8',' ',u[0][1]:6:3,' u1=',u[1][1]:6:3,' u2=',u[2][1]:6:3,' u3=',u[3][1]:6:3,' u4=',u[4][1]:6:3,' ',u[5][1]:6:3);

writeln ('y=0.6',' ',u[0][2]:6:3,' u5=',u[1][2]:6:3,' u6=',u[2][2]:6:3,' u7=',u[3][2]:6:3,' u8=',u[4][2]:6:3,' ',u[5][2]:6:3);

writeln ('y=0.4',' ',u[0][3]:6:3,' u9=',u[1][3]:6:3,' u10=',u[2][3]:6:3,' u11=',u[3][3]:6:3,' u12=',u[4][3]:6:3,' ',u[5][3]:6:3);

writeln ('y=0.2',' ',u[0][4]:6:3,' u13=',u[1][4]:6:3,' u14=',u[2][4]:6:3,' u15=',u[3][4]:6:3,' u16=',u[4][4]:6:3,' ',u[5][4]:6:3);

writeln ('y=0.0',' ',u[0][5]:6:3,' ',u[1][5]:6:3,' ',u[2][5]:6:3,' ',u[3][5]:6:3,' ',u[4][5]:6:3,' ',u[5][5]:6:3);

writeln (' ',' x=0',' x=0.2',' x=0.4',' x=0.6',' x=0.8',' x=1'); //решение системы методом Зайделя k:=0; while s>e do begin k:=k+1; //подсчет итераций for i:=1 to a-1 do begin for j:=1 to b-1 do begin f:=u[i][j]; //запонимаем значения функции u[i][j]:=(u[i+1][j]+u[i-1][j]+u[i][j+1]+u[i][j-1])/4; //решение системы методом Зайделя s:=abs(f-u[i][j]); //проверяем разность end; end;

writeln;

writeln('iterazi9 nomer ',k);

writeln;

writeln ('y=1.0',' ',u[0][0]:6:3,' ',u[1][0]:6:3,' ',u[2][0]:6:3,' ',u[3][0]:6:3,' ',u[4][0]:6:3,' ',u[5][0]:6:3);

writeln ('y=0.8',' ',u[0][1]:6:3,' u1=',u[1][1]:6:3,' u2=',u[2][1]:6:3,' u3=',u[3][1]:6:3,' u4=',u[4][1]:6:3,' ',u[5][1]:6:3);

writeln ('y=0.6',' ',u[0][2]:6:3,' u5=',u[1][2]:6:3,' u6=',u[2][2]:6:3,' u7=',u[3][2]:6:3,' u8=',u[4][2]:6:3,' ',u[5][2]:6:3);

writeln ('y=0.4',' ',u[0][3]:6:3,' u9=',u[1][3]:6:3,' u10=',u[2][3]:6:3,' u11=',u[3][3]:6:3,' u12=',u[4][3]:6:3,' ',u[5][3]:6:3);

writeln ('y=0.2',' ',u[0][4]:6:3,' u13=',u[1][4]:6:3,' u14=',u[2][4]:6:3,' u15=',u[3][4]:6:3,' u16=',u[4][4]:6:3,' ',u[5][4]:6:3);

writeln ('y=0.0',' ',u[0][5]:6:3,' ',u[1][5]:6:3,' ',u[2][5]:6:3,' ',u[3][5]:6:3,' ',u[4][5]:6:3,' ',u[5][5]:6:3);

writeln (' ',' x=0',' x=0.2',' x=0.4',' x=0.6',' x=0.8',' x=1'); end; //вывод результата

writeln;

writeln('Rezultati vipolneni9 programmi:');

writeln('koli4estvo iterazii i=',k);

writeln;

writeln ('y=1.0',' ',u[0][0]:6:3,' ',u[1][0]:6:3,' ',u[2][0]:6:3,' ',u[3][0]:6:3,' ',u[4][0]:6:3,' ',u[5][0]:6:3);

writeln ('y=0.8',' ',u[0][1]:6:3,' u1=',u[1][1]:6:3,' u2=',u[2][1]:6:3,' u3=',u[3][1]:6:3,' u4=',u[4][1]:6:3,' ',u[5][1]:6:3);

writeln ('y=0.6',' ',u[0][2]:6:3,' u5=',u[1][2]:6:3,' u6=',u[2][2]:6:3,' u7=',u[3][2]:6:3,' u8=',u[4][2]:6:3,' ',u[5][2]:6:3);

writeln ('y=0.4',' ',u[0][3]:6:3,' u9=',u[1][3]:6:3,' u10=',u[2][3]:6:3,' u11=',u[3][3]:6:3,' u12=',u[4][3]:6:3,' ',u[5][3]:6:3);

writeln ('y=0.2',' ',u[0][4]:6:3,' u13=',u[1][4]:6:3,' u14=',u[2][4]:6:3,' u15=',u[3][4]:6:3,' u16=',u[4][4]:6:3,' ',u[5][4]:6:3);

writeln ('y=0.0',' ',u[0][5]:6:3,' ',u[1][5]:6:3,' ',u[2][5]:6:3,' ',u[3][5]:6:3,' ',u[4][5]:6:3,' ',u[5][5]:6:3);

writeln (' ',' x=0',' x=0.2',' x=0.4',' x=0.6',' x=0.8',' x=1'); readln; { TODO -oUser -cConsole Main : Insert code here }

end.

4. Результаты работы программы

Литература

1. Демидович Б.П., Марон И.А., Шувалова Э.З. “ Численные методы анализа. Приближение функций, дифференциальные и интегральные уравнения”, М.: Наука, 1967. - 368 с.

2. Вержбицкий В.М. “Численные методы. Математический анализ и обыкновенные дифференциальные уравнения” , М.: Высшая школа, 2001. - 384 с.

3. Бундаев В. В., Дамбаев Ж. Г. “Методические указания и контрольные задания по численным методам”, Улан-Удэ: РИО ВСГТУ, 2003. - 16 с.


Подобные документы

  • Разработка программы на языке С++ для решения дифференциального уравнения Лапласа в прямоугольной области методом сеток. Численное решение задачи Дирихле для уравнения Лапласа, построение сетки и итерационного процесса. Листинг и результат программы.

    курсовая работа [307,5 K], добавлен 30.04.2012

  • Математическое описание алгоритмов схемы и операций для уравнения Лапласа. Изучение разностной схемы "крест" для нахождения численного решения эллиптического уравнения, задача Дирихле. Использование указателей в среде Matlab для решений методом Гаусса.

    дипломная работа [859,3 K], добавлен 23.10.2014

  • Численный метод для решения однородного дифференциального уравнения первого порядка методом Эйлера. Решение систем дифференциальных уравнений методом Рунге–Кутта. Решение краевой задачи. Уравнения параболического типа, а также Лапласа и Пуассона.

    курсовая работа [163,5 K], добавлен 27.05.2013

  • Рассмотрение двух методов нахождения приближенного корня дифференциального уравнения, применение их на практике. Графическая интерпретация метода Эйлера. Решение задачи усовершенствованным методом Эйлера. Программная реализация, блок-схемы и алгоритм.

    курсовая работа [246,8 K], добавлен 17.06.2013

  • Анализ метода касательных (метода секущих Ньютона), аналитическое решение нелинейного уравнения. Описание алгоритма решения задачи, пользовательских идентификаторов, блок-схем, программного обеспечения. Тестирование программы на контрольном примере.

    курсовая работа [97,1 K], добавлен 10.01.2014

  • Решение дифференциального уравнения с помощью численных методов (Рунге-Кутта и Эйлера модифицированного). Особенности построения графиков в программе Microsoft Visual Basic 10 с использованием ответа задачи, который имеет незначительную погрешность.

    курсовая работа [1017,3 K], добавлен 27.05.2013

  • Программа вычисления интеграла методом прямоугольников. Решение задачи Коши для дифференциальных уравнений. Модифицированный метод Эйлера. Методы решения краевой задачи для обыкновенного дифференциального уравнения. Задачи линейного программирования.

    методичка [85,2 K], добавлен 18.12.2014

  • Математический алгоритм вычисления корней нелинейного уравнения и его решение методом касательных. Особенности программной реализации решения таких уравнений. Процедура подготовки и решения задачи на ЭВМ, характеристика алгоритма и структуры программы.

    курсовая работа [96,6 K], добавлен 02.06.2012

  • Описание алгоритма создания программы для решения алгебраических или трансцендентных уравнений с помощью численного метода Бернулли. Нахождение значений корней алгебраического уравнения с заданными параметрами точности. Листинг программы на языке java.

    контрольная работа [206,0 K], добавлен 19.06.2015

  • Решение дифференциального уравнения N-го порядка методом интегрирования при помощи характеристического уравнения, методом интегрирования и операторным методом для значений аргументов при заданных начальных условиях и нулевых уравнения 4–го порядка.

    практическая работа [806,9 K], добавлен 05.12.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.