Помощь в написании студенческих работ
Антистрессовый сервис

Метод сеток

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Var i, j, k: integer; u: array 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… Читать ещё >

Метод сеток (реферат, курсовая, диплом, контрольная)

Сибирская государственная автомобильно-дорожная академия (СибАДИ) Факультет Информационных систем в управлении Кафедра Информационной безопасности Специальность «Комплексное обеспечение ИБ АС»

Пояснительная записка к курсовой работе по дисциплине: Вычислительная математика и программирование тема: Метод сеток Омск — 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; { TODOoUsercConsole Main: Insert code here }

end.

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

Литература

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

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

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

Показать весь текст
Заполнить форму текущей работой