Министерство образования и науки Российской Федерации
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
Якутский государственный университет имени М.К. Аммосова
Институт математики и информатики
Кафедра прикладной математики
Дипломная работа
“Разностные схемы для уравнения переноса на неравномерных сетках”
“Специальность 010501.65-
Прикладная математика и информатика”
Специализация “Математическое моделирование”
Едисеева Зоя Никитична
Научный руководитель: Охлопков Н.М
к.ф-м.н. профессор
Рецензент: Николаев Владимир Егорович
к.ф.-м.н., доцент
Якутск 2009
Содержание
Введение
Глава I. Основные понятия разностных схем
1.1 Сеточная область
1.2 Сеточная функция. Пространство сеточных функций. Нормы сеточных функций
1.3 Аппроксимация дифференциальных операторов
1.4 Разностная схема
1.5 Корректность разностной схемы
1.6 Аппроксимация и сходимость
1.7 Неравномерная сетка
1.7.1 Построение сеточной области
1.7.2 Формирование сетки
Глава II. Одномерное уравнение переноса с переменными коэффициентами
2.1 Постановка задачи
2.2 ”Явные” схемы
2.3 Неявные схемы
2.3.1 Центрально-разностная схема
2.3.2 Трехточечная схема с весом
Глава III. Одномерное уравнение переноса с постоянными коэффициентами
3.1 Постановка задачи
3.2 Схема бегущего счета
3.3 Неявные схемы
3.3.1 Центрально-разностная схема
3.3.2 Трехточечная схема весом
3.3.3 Схема “прямоугольник”
3.3.4 Схема со сглаживанием
3.3.5 Схема прямоугольник со сглаживанием
3.3.6 “Шахматная ” схема
Заключение
Использованная литература
Приложение 1
Приложение 2
Приложение 3
Приложение 4
Приложение 5
Приложение 6
Введение
Вычислительную математику в узком смысле понимают как теорию численных методов и алгоритмов решения широкого круга математических задач.
В этом смысле теория разностных схем – это раздел вычислительной математики, изучающий методы приближенного решения дифференциальных уравнений путем их замены конечно-разностными уравнениями (разностными схемами).
Разностная схема должна удовлетворять следующим основным требованиям:
1.Определенный порядок аппроксимации, устойчивость экономичность, консервативность, однородность.
2.Важной характеристикой разностной схемы, устанавливающей ее связь с исходным дифференциальным уравнением, является погрешность аппроксимации, определенная как величина невязки, возникающей при подстановке в разностную схему решение исходной задачи.
От того, в каком смысле данная схема аппроксимирует задачу, зависит выбор метода исследования точности схем и тип априорных оценок, выражающих устойчивость по правой части.
Устойчивость является внутренним свойством разностной схемы, которая изучается независимо от аппроксимации и сходимости.
Объектом исследования выбраны разностные схемы, аппроксимирующие исходную задачу.
Цель дипломной работы – выбор наиболее устойчивой разностной схемы.
Для достижения цели поставлены следующие задачи:
— рассмотреть разностные методы решения для уравнений переноса с переменными и постоянными коэффициентами на неравномерных сетках;
— выполнить численный эксперимент рассматриваемых схем.
Глава I. Основные понятия теории разностных схем
Для численного решения задач по дифференциальным уравнениям методом сеток (конечных разностей) необходимо проделать следующее. Область непрерывного изменения аргумента (аргументов) искомой функции заменяется конечным дискретным множеством точек, называемых узлами сетки. Все производные, входящие в дифференциальную задачу, заменяются разностными производными. Это осуществляется тем или иным методом конструирования разностных схем. В конечном итоге получаем систему алгебраических уравнений. Таким образом, сущность метода сеток, в настоящее время самого универсального решателя дифференциальных уравнений, состоит в замене исходных дифференциальных задач системами алгебраических уравнений, их приближенно заменяющими.
Если при измельчении шагов сетки решение разностной схемы сходится к решению исходной дифференциальной задачи, то за решение исходной задачи принимается решение разностной схемы. После конструирования разностной схемы необходимо провести теоретические исследования разрешимости задач. Внутренними свойствами разностной схемы являются аппроксимация и устойчивость. Эти свойства разностной схемы должны исследоваться для каждой схемы.
Получающиеся разностные схемы решаются теми или иными методами решения систем алгебраических уравнений. Разрешающий алгоритм должен быть экономичным и этим же требованиям должна обладать и разностная схема.
1.1 Сеточная область
Для построения разностной схемы необходимо построить сетку Gh-конечное множество точек, принадлежащих G, плотность распределения которых характеризуется параметрами h-шагом сетки. Пусть область изменения аргумента x есть отрезок G={0≤x≤1}. Разобьем этот отрезок точками xi=i∙h, i=0,n на n равных частей длины h=1/n каждая. Множество точек xi=i∙h, называется равномерной сеткой на отрезке 0≤x≤1 и обозначим />={xi=i∙h, i=0,n}, а число h-расстояние между точками (узлами) сетки называется шагом сетки. Разбиение отрезка 0≤x≤1 точками xi, i=0,n можно производить произвольным образом — 0={xi, i=0,n, x0=0, xn=1} c шагами hi=xi-xi-1, которое зависит от номера узла сетки. Если hi≠hi+1 хотя бы в одной точке, то сетка называется неравномерной и такую сетку обозначают ŵ/>. Точки x0и xn назовем граничными узлами и обозначим их гh. Остальные узлы назовем внутренними и обозначим их wh. Узлы соседние с граничащими назовем приграничными. Тогда имеем
/>=wh/>гh.--PAGE_BREAK--
1.2 Сеточная функция. Пространство сеточных функций. Нормы сеточных функций
Функция y=y(xi) дискретного аргумента xiназывается сеточной функцией, определенной на сетке />. Сеточные функции можно рассматривать как функции целочисленного аргумента, являющегося номером узла сетки, т. е. y=y(xi)=y(i). Далее мы будем писать y(xi)=yi.
Сеточная область wh зависит от параметра h. При различных значениях параметра h имеем различные сеточные области. Поэтому и сеточные функции yh(x) зависят от параметра h.
Функции u(x) непрерывного аргумента являются элементами функционального пространства H. Множество сеточных функций yh(x) образует пространство Hh. Таким образом, в методе сеток пространство H, заменяется пространством Hh сеточных функций yh(x).
Так как рассматривается множество сеток {wh}, то мы получаем множество {Hh} пространств сеточных функций, определенных на {wh}.
Пусть u(x) — решение исходной непрерывной задачи
Lu(x)=f(x), (1)
/>; yh — решение разностной задачи, />. Для теории приближенных вычислений представляет большой интерес оценка близости u(x) и yh(x), но u(x) и yh(x) являются элементами из различных пространств. Пространство H отображается на пространство Hh. Каждой функции />ставится в соответствие сеточная функция yh(x), x />wh, так что yh=Phu />Hh, где Ph — линейный оператор из H в Hh. Это соответствие можно осуществить различными способами, т. е. зависит от выбора оператора Ph. Теперь, имея сеточную функцию uh, образуем разность yh-uh, которая является вектором пространства Hh. Близость yh и uh характеризуется числом />yh-uh/>Hh, где />Hh – норма на Hh.
Соответствие функций u(x) и uh можно установить различными способами, например,
uh=u(x), x />wh.
В дальнейшем мы будем пользоваться этим способом соответствия.
В линейном пространстве Hh введем норму />Hh, которая является аналогом нормы />Н в исходном пространстве Н. Обычно принято выбирать норму в пространстве Hh так, чтобы при стремлении к нулю h она переходила в ту или иную норму функций, заданных на всем отрезке, т.е. чтобы выполнялось условие
/>/>Hh=/>H, (2)
где />Н — норма в пространстве функций, определенных на отрезке, которому принадлежит решение.
Условие (2) называют условием согласования в пространствах Hh и Н.
Рассмотрим простейшие типы норм в Hh для случая сеток
wh={xi=i∙h} на отрезке 0≤x≤1.
1. Норма />Hh=/>/>
удовлетворяет условию (2), если в качестве Н рассматривать пространство непрерывных функций с нормой
/>H=/>/>, H=[a,b],
а сеточную функцию определять в виде (2), т.е.
yh(x)=uh(x), x /> wh
2. Норма />Hh=/>
удовлетворяют условию (2), если за Н принять пространство непрерывных функций с нормой
/>H=/>u2(x)dx, H=C[a,b] ,
а сеточную функцию определять в виде
yh=uh(x), x />wh.
1.3 Аппроксимация дифференциальных операторов
Пусть имеем дифференциальный оператор />
Этот оператор можно аппроксимировать несколькими способами. Например,
/>— правая разностная производная; (3)
/>— левая разностная производная; (4)
/>— центральная разностная производная; (5)
Можно взять их линейную комбинацию
/>, (6) где у- вещественный параметр.
При у=1 из (6) получаем аппроксимацию (3); при у=0 – аппроксимацию (4), а при у=0.5- аппроксимацию (7).
Чтобы показать погрешность аппроксимации, разложим по формуле Тейлора
/>
предполагая, что функция v(x) достаточно гладкая в некоторой окрестности (x-h0,x+h0) точки х, h продолжение
--PAGE_BREAK--
Подставляя это разложение в (3),(4),(5), получим:
/>
/>
/>
Отсюда видно, что
/>
/>
/>
Пусть L — дифференциальный оператор, Lh — разностный оператор, заданный на сетке wh. Говорят, что разностный оператор Lh:
аппроксимируем дифференциальный оператор L в узле xi/>wh, если
/>, где v(x)- достаточно гладкая функция, стремится к нулю при h→0;
аппроксимируем L с порядком n >0 в узле xi/>wh если />, т.е.
/>, M=const>0.
В качестве следующего примера рассмотрим оператор />.
Для аппроксимации этого оператора используем трехточечный шаблон (x-h, x, x+h).
Замечая />, имеем
/>
Отсюда
/>
Пользуясь разложением (7), покажем, что порядок аппроксимации равен двум, т.е.
/>
так как />
1.4 Разностная схема
Как правило, дифференциальное уравнение решается с некоторыми дополнительными условиями — начальными (задача Коши), краевыми (краевая задача) либо и с начальными, и с краевыми условиями (смешанные задачи). Эти дополнительные условия при переходе к разностным уравнениям надо так же аппроксимировать.
Пусть имеем некоторую дифференциальную задачу, записанную в виде
Lu=f(x), x/>G (8)
с дополнительным условием
lu=ц(x), x/>Г. (9)
Введем в области />Г сетку />/>
и поставим в соответствие задаче (8), (9) разностную задачу
Lhyh=fh, x/>wh, (10)
Lhyh=цh, x/>гh. (11)
Функция yh(x), fh(x), цh(x) зависят от шага сетки. Меняя h, получаем множества функций {yh}, {fh}, {цh}, зависящих от параметра h. Таким образом, мы рассматриваем не одну разностную задачу, а семейство задач, зависящее от параметра h. Это семейство задач называется разностной схемой.
Рассмотрим примеры разностных схем, аппроксимирующих дифференциальные задачи.
Пример 1. Имеем задачу Коши
/>, 0
/>.
Используем аппроксимации:
/>;
/>.
После этого имеем разностную схему:
/>
/>
Расчетный алгоритм имеем вид
/>
/>
Пример 2. Рассмотрим задачу Коши.
/>
/>/>/>
Воспользуемся следующими аппроксимациями:
/>
/>
После этого имеем разностную схему
/>
/>/>/>
1.5 Корректность разностной схемы
Пусть имеем дифференциальную задачу
/>, (12)
/>(13) и на сетке />аппроксимируем ее разностной схемой
/>(14)
/>(15)
Задача (12), (13) поставлена корректно, если выполнены условия:
задача однозначно разрешима при любых правых частях />
решение задачи непрерывно зависит от правых частей />т.е.
/>H≤ M1∙/>H +M2∙/>H. продолжение
--PAGE_BREAK--
Аналогично определяется понятие корректности разностной схемы (14), (15). Говорят, что разностная схема (14), (15) корректна, если при всех достаточно малых │h│
1) решение yh разностной схемы существует и единственно для всех входных данных f h/>Hh, цh/>Hh;
2) существуют постоянные M1>0, M2>0 не зависящие от h и такие, что при любых f h/>Hh, цh/>Hh справедлива оценка
/>Hh≤ M1∙/>Hh +M2∙/>Hh. (16)
Свойство 2), означающее непрерывную зависимость, равномерную относительно h, решения разностной схемы от правых частей, называется устойчивостью разностной схемы. Рассмотрим примеры.
Пример 1. Пусть имеем задачу:
/>(17)
Точным решением задачи (17) является функция
/>
Если ввести новую функцию />то получим задачу
/>(18)
Решением задачи (18) является функция
/>
Задачу (18) аппроксимируем на равномерной сетке />= {xi=ih, i=0,n} схемой:
/>(19)
Перепишем схему (19) в виде
/>
Отсюда имеем
/>
Рассмотрим фиксированную точку />и выберем последовательность сеток />таких, чтобы />= i0 ∙ h, т.е. />является узлом сетки />при h→0.
Вычислим значение у в этой точке y(/>) = yi0=si0y0. Так как │s│0
и любых h, то│ y(/>)│≤│si0│∙│y0│
неравенства видно, что решение разностной схемы (19) непрерывно зависит от вход€ных данных. В таких случаях говорят, что разностная схема устойчива по входным данным (по начальным условиям и по правой части).
Пример 2. Имеем уравнение
/>, />/>(20)
Точным решением задачи (20) является функция
/>
Отсюда следует неравенство
/>, (21)
при л>0.
Для устойчивости вычислительных алгоритмов решения задачи (20) должно быть выполнено условие вида (21) т.е.
/>(22)
Задачу (20) аппроксимируем явной схемой Эйлера
/>/>(23)
/>.
Выражая решение схемы (23) через начальное условие, имеем
/>/>
Неравенство (22) будет выполнено, если
/>
т.е. />/>.
Таким образом, явная схема Эйлера условно устойчива.
Пример 3. Для численного решения задачи (20) используем неявную схему Эйлера
/>/>(24)
Отсюда
/>т.е.
/>при />
Схема (24) абсолютно устойчива, ибо выполнено условие (22) при любом h.
Пример 4. Задачу (20) аппроксимируем схемой с весом
/>/>(25)
Отсюда имеем
/>
Условие (22) будет выполнено, если
/>т.е />
Отсюда получаем
/>
Схема абсолютно устойчива при
/>и />
/>
т.е. схема (25) условно устойчива при />
1.6 Аппроксимация и сходимость
Для того, чтобы выяснить, с какой точностью приблизили функцию u=u(x) с помощью функции y(x), мы должны их сравнить. Пусть uh значение функции u(x) на сеточной области />, т.е. uh/>Hh. продолжение
--PAGE_BREAK--
Рассмотрим погрешность решения разностной схемы (14), (15), которая аппроксимирует на сетке/>дифференциальную задачу (12), (13).
Введем функцию погрешности решения
zh= yh –uh,
где yh– решение схемы (14), (15), uh — решение задачи (12), (13) на сетке ͞wh. Подставив yh= zh +uh в линейную задачу (14), (15), получим для zh задачу того же вида, что и (14), (15):
/>(26)
/>(27)
/>(28)
Функции (28) называются погрешностью аппроксимации задачи (12), (13), схемой (14), (15) на решение задачи (12), (13).
Будем говорить, что решение разностной схемы (14), (15) сходится к решению задачи (12), (13), если
/>Hh = />Hh → 0 при h→0.
Разностная схема сходится со скоростью О(hn) или имеет n-ый порядок точности, если при достаточно малом h ≤ h0выполняется неравенство
/>Hh =/>Hh≤ M ∙ hn,
где M > 0, не зависит от h, n > 0.
Говорят, что разностная схема имеет n-ый порядок аппроксимации, если
шh = O(hn),
т.е/>≤ M∙hn.
Теорема. Пусть дифференциальная задача (12), (13) поставлена корректно, разностная схема (14), (15) является корректной и аппроксимирует исходную задачу (12), (13). Тогда решение разностной схемы (14), (15) сходится к решению исходной задачи (12), (13), причем порядок точности совпадает с порядком аппроксимации.
Доказательство.Если схема (14), (15) корректна, то не трудно получить оценку погрешности решения через погрешность аппроксимации (28).
Задача (26), (27) аналогична задаче (14), (15), поэтому для нее пользуясь априорной оценкой вида (16), получим оценку
/>Hh = />Hh≤ M1/>Hh+ M2/>Hh. (29)
Таким образом, если схема (14), (15) корректна и аппроксимирует задачу (12), (13), то она сходится при h→0. Норма погрешности ‖zh‖Hh→0 при h→0, если />Hh→0 и />Hh→0 при h→0.
Из оценки (28) видно, что порядок точности схемы (14), (15) определяется порядком аппроксимации, и чтобы схема сходилась со скоростью O(hn), n>0 достаточно, чтобы она имела аппроксимацию того же порядка, т.е.
/>Hh = О(hn), />Hh= O(hn).
Рассмотрим примеры.
Пример 1. Рассмотрим явную схему Эйлера
/>/>/>
которая аппроксимирует дифференциальную задачу (20). Покажем порядок погрешности аппроксимации и сходимость.
Рассмотрим функцию погрешности решения />
Для zi получаем схему:
/>/>(30)
Разложим ui+1 по формуле Тейлора в точке xi, имеем
/>(31)
Подставляя (31) в шi, получим
/>
т.е. имеем порядок аппроксимации. Из (30) имеем
/>
При />/>имеем />Выражая ziчерез z0, получим:
/>
Отсюда видно, что при h→0, │zi│→0. Для точности схемы имеем
│zi+1│≤ />h∙│шs│≤ h ∙ i ∙ O(h) = xi∙O(h) ≤ M ∙ h,
т.е. схема имеет первый порядок точности.
Пример 2. Рассмотрим неявную схему Эйлера
/>,
которая аппроксимирует дифференциальную задачу (20). Для погрешности решения zi= yi –uiполучаем разностную схему:
/>/>
Подставляя разложение (31) в шi, получим
/>
Отсюда имеем
/>
т.е. первый порядок аппроксимации. Для сходимости рассмотрим решение задачи для zi:
/>
Множитель />при л > 0. Выражая zi через z0, имеем
/>/> продолжение
--PAGE_BREAK--
Отсюда │zi│≤ M∙h, т.е. схема имеет первый порядок точности. Таким же образом можно показать, что схема с весом
/>/>
имеет первый порядок аппроксимации и при выполнении условий устойчивости имеет место сходимость и притом порядок точности совпадает с порядком погрешности аппроксимации.
1.7 Неравномерная сетка
1.7.1 Построение сеточной области
Пусть исходная область />={/>}. Ее аппроксимируем сеточной областью:
/>/>, />/>/> — средний шаг}- сетка по х;
/>/>, />/>/> — средний шаг}- сетка по t;
Тогда искомая сетка есть /> — неравномерная сетка.
На этой сетке аппроксимируем дифференциальные операторы:
/>— правая разностная производная по х; (1)
/>-сеточная функция;
/>— левая разностная производная по х; (2)
/>— центральная разностная производная по х; (3)
/>/>— аппроксимация с весом />; (4)
/>Аппроксимация первой производной по t имеет вид:
/>— правая разностная производная по t; (5)
/>— левая разностная производная по t; (6)
/>— центральная разностная производная по t; (7)
Аппроксимация второй производной по х и по t имеет вид:
/>; (8)
/>; (9)
Покажем погрешность аппроксимации первой производной по х.
Для этого введем функцию погрешности решения />Найдем />и подставим в (1).
Имеем />=/>, />
Функцию />разложим по формуле Тейлора
/>,
и подставим в />Имеем
/>/>,
отсюда получаем аппроксимацию первого порядка />.
1.7.2 Формирование сетки
I вариант
/>,/>(1)
/>, q>1-возраст.геометр.прогрессия
/>, q
1) />, (2)
/>, q>1. (3)
2) />, (4)
/>, q
/>и /> — задаем сами.
Пример Пусть />/>
/>
q>1 и по формуле (3) n/> />
Пример Пусть />
вычисляем по формуле (5)
/>
Действительно
/>
II вариант
Можно использовать другой подход:
/>, />, />,
/>,
/>, />.
a) />, q
в) />, q>1 – возрастающая геом. прогрессия.
Таким образом, можно рассматривать следующие модули сеток:
Равномерная сетка />.
Квазиравномерная сетка (/>…).
Неравномерная по возрастающей геометрической прогрессии />.
Неравномерная по убывающей геометрической прогрессии />.
Среднеарифметический метод 3) и 4) />. продолжение
--PAGE_BREAK--
Глава II. Одномерное уравнение переноса с переменными коэффициентами
2.1 Постановка задачи
Рассмотрим уравнение вида:
/>/>/>(1)
удовлетворяющий начальным условиям
/>(2)
и граничным условиям:
/>
/>(3)
Входные данные:
1) />
/>l=1, T=1
точное решение: />
2) />
/>
точное решение: />
3) />
/>
точное решение: />
4) />
/>
точное решение: />
Для решения задачи (1) – (3) используем различные разностные схемы, вернее, явную и неявную.
2.2 “Явные ” схемы
Явные схемы для нашей задачи используются тогда, когда p(x,t) > 0, (p0>0, pN>0) или p(x,t)
Итак, рассмотрим схему бегущего счета в обоих случаях.
1) p(x,t)>0, (p0>0, pN>0)
Разностная схема (правая) имеет вид
/>; (1′)
/>; (2′)
/>; (3′)
из (1′) />,
где /> />/>.
2) p(x,t)
В этом случае используется левая разностная схема
/>; (1″)
/>; (2″)
/>; (3″)
из (1′) />,
где /> />/>.
Таблица 1 Численное решение уравнения переноса с переменными коэффициентами схема бегущего счета “явная ” схема (правая разностная схема)
-------------kogda p0>0, pN>0-------------50sloy
N priblijennoe tochnoe pogreshnosti
0.10039200
0.10004559
0.00034641
1
0.10731313
0.10694264
0.00037049
2
0.11471141
0.11431517
0.00039623
3
0.12261970
0.12219596
0.00042375
4
0.13107319
0.13062004
0.00045315
5
0.14010945
0.13962487
0.00048458
6
0.14976865
0.14925048
0.00051817
7
0.16009374
0.15953968
0.00055407
8
0.17113063
0.17053820
0.00059243
9
0.18292837
0.18229495
0.00063342
10
0.19553941
0.19486220
0.00067721
11
0.20901984
0.20829583
0.00072401
12
0.22342957
0.22265555
0.00077402
13
0.23883258
0.23800523
0.00082736
14
0.25528740 продолжение
--PAGE_BREAK--
0.25441310
0.00087431
15
0.27195211
0.27195211
0.00000000
Таблица 2. Численное решение уравнения переноса с переменными коэффициентами схема бегущего счета “явная ” схема (левая разностная схема)
-------------kogda p0
N priblijennoe tochnoe pogreshnosti
0.14715178
0.14715178
0.00000000
1
0.14242453
0.14232757
0.00009697
2
0.13785337
0.13766151
0.00019185
3
0.13343317
0.13314843
0.00028474
4
0.12915902
0.12878331
0.00037571
5
0.12502613
0.12456129
0.00046484
6
0.12102988
0.12047768
0.00055219
7
0.11716580
0.11652796
0.00063785
8
0.11342959
0.11270772
0.00072187
9
0.10981705
0.10901272
0.00080434
10
0.10632415
0.10543886
0.00088530
11
0.10294698
0.10198216
0.00096483
12
0.09968176
0.09863879
0.00104298
13
0.09652483
0.09540502
0.00111981
14
0.09347266
0.09227727
0.00119539
15
0.09052183
0.08925206
0.00126976
Текст программы смотри в приложении 1
2.3 Неявные схемы
В отличие от явной схемы неявные схемы используются для задачи (1) – (3) во всех случаях 1) p0>0, pN>0; 2) p00, pN0.
Рассмотрим 2 различные разностные схемы:
Центрально- разностная схема.
Трехточечная схема с весом.
Все эти схемы решаются методом прогонки и все эти разностные уравнения, т.е. полученные при аппроксимации схемы, вернее, уравнения сводятся к виду:
/>/>(4)
Коэффициенты Ai, Bi, Ciдолжны удовлетворять условиям:
/>(5)
Коэффициенты B0, C0, F0, AN ,CN ,FN находятся из граничных условий. В данной задаче в зависимости от знака функции p(x,t) ставятся граничные условия и тем самым находятся наши коэффициенты. Рассмотрим все 4 случая:
1) p>0, pN>0, u(l,t)=м2(t), (3′)
из уравнения (3′) />AN ,CN ,FN .
B0, C0, F0 находятся из дополнительного условия, которая ставится на левом конце.
2) ppNu(0,t)=м1(t), (3″)из уравнения (3″) />B0, C0, F0.
AN ,CN ,FN находятся из дополнительного условия, которая ставится на правом конце.
3) ppN>0, u(0,t)=м1(t), u(l,t)=м2(t), (3″′)
из уравненя (3″′) />B0, C0, F0
/>AN ,CN ,FN
4) p>0, pN
Дополнительное условие ставится на левом и на правом концах. Находим B0, C0, F0, AN ,CN ,FN .
Алгоритм правой прогонки
/>/>, />.
/>, />
/>.
При выполнении условий />алгоритм правой прогонки устойчив.
2.3.1 Центрально разностная схема
Разностная схема имеет вид (задачи (1)-(3)): продолжение
--PAGE_BREAK--
/>, />.
/>/>
1) P>0, PN>0
/>/>, />, />.
/>
2) PN
/>/>/>/>.
/>
3) PN>0
/>B=0, C=1, F=/>,
/>→ AN=0, CN=1, />.
4) P>0, PN
/>
/>
/>/>/>, />
/>/>/>
Таблица 3. Численное решение уравнения переноса с переменными коэффициентами центральная разностная схема метод прогонки
-------------kogda p0>0, pN>0------------ 50sloy
N priblijennoe tochnoe pogreshnosti
0.18772094
0.18765555
0.00006539
1
0.18147920
0.18150347
0.00002427
2
0.17566576
0.17555308
0.00011268
3
0.16982701
0.16979776
0.00002924
4
0.16440069
0.16423113
0.00016956
5
0.15890974
0.15884699
0.00006275
6
0.15384782
0.15363937
0.00020845
7
0.14868453
0.14860247
0.00008206
8
0.14391438
0.14373070
0.00018368
9
0.13904086
0.13901865
0.00002221
10
0.13462315
0.13446108
0.00016208
11
0.13004378
0.13005292
0.00000914
12
0.12593278
0.12578928
0.00014351
13
0.12169429
0.12166541
0.00002888
14
0.11786577
0.11767675
0.00018903
15
0.11381884
0.11381884
0.00000000
Таблица 4. Численное решение уравнения переноса с переменными коэффициентами центральная разностная схема метод прогонки
-------------kogda p0
N priblijennoe tochnoe pogreshnosti
0.14715178
0.14715178
0.00000000
1
0.14240331
0.14232757
0.00007574
2
0.13769681
0.13766151
0.00003530
3
0.13325746
0.13314843
0.00010903
4
0.12885248
0.12878331
0.00006918
5
0.12470227
0.12456129
0.00014098
6
0.12057943
0.12047768
0.00010174
7
0.11669966
0.11652796
0.00017170
8
0.11284082
0.11270772
0.00013310 продолжение
--PAGE_BREAK--
9
0.10921401
0.10901272
0.00020130
10
0.10560221
0.10543886
0.00016335
11
0.10221201
0.10198216
0.00022985
12
0.09883137
0.09863879
0.00019259
13
0.09566248
0.09540502
0.00025746
14
0.09249816
0.09227727
0.00022089
15
0.08953626
0.08925206
0.00028420
Таблица 5. Численное решение уравнения переноса с переменными коэффициентами центральная разностная схема метод прогонки
-------------kogda p00--------------50sloy
N priblijennoe tochnoe pogreshnosti
0.03678794
0.03678794
0.00000000
1
0.03565917
0.03558189
0.00007728
2
0.03439784
0.03441538
0.00001754
3
0.03335557
0.03328711
0.00006846
4
0.03216179
0.03219583
0.00003404
5
0.03119895
0.03114032
0.00005863
6
0.03007027
0.03011942
0.00004915
7
0.02917987
0.02913199
0.00004788
8
0.02811435
0.02817693
0.00006258
9
0.02728957
0.02725318
0.00003639
10
0.02628567
0.02635971
0.00007405
11
0.02551993
0.02549554
0.00002439
12
0.02457633
0.02465970
0.00008337
13
0.02386341
0.02385126
0.00001215
14
0.02297890
0.02306932
0.00009042
15
0.02231302
0.02231302
0.00000000
Таблица 6. Численное решение уравнения переноса с переменными коэффициентами центральная разностная схема метод прогонки
-------------kogda p0>0, pN
N priblijennoe tochnoe pogreshnosti
0.00379722
0.00375311
0.00004410
1
0.00328998
0.00328462
0.00000536
2
0.00291427
0.00287461
0.00003966
3
0.00250378
0.00251579
0.00001200
4
0.00225176
0.00220175
0.00005001
5
0.00190450
0.00192691
0.00002241
6
0.00172045
0.00168638
0.00003407
7
0.00145947
0.00147588
0.00001640
8
0.00129005
0.00129165
0.00000159
9
0.00109247
0.00113042
0.00003795
10
0.00092289
0.00098931
0.00006642
11
0.00074314
0.00086582
0.00012268
12
0.00056520
0.00075774
0.00019254
13
0.00038370
0.00066315
0.00027946
14
0.00020306
0.00058037
0.00037731
15
0.00002275
0.00050793
0.00048518
Текст программы смотри в приложении 2
2.3.2 Трехточечная схема с весом
Разностная схема для нашей задачи ((1)-(3)) имеет вид:
/>(0)
Уравнение (0) приведем к виду
/>(1)
Из уравнения (1) находим коэффициенты />/>/>/> продолжение
--PAGE_BREAK--
/>, />, />,
/>.
1) P>0, PN>0 yNj+1= м2j+1 → AN =0, CN=1, FN =м2j+1
/>(1.0)
Уравнение (1.0) приводим к виду
/>(1.1)
Из уравнения (1.1) находим />/>/>
/>, />,
/>.
2) PPNy0j+1 = м1j+1 → B0 =0, C=1, F0 = м1j+1
/>. (2.0)
Уравнение (2.0) приводим к виду
/>(2.1)
Из уравнения (2.1) находим />, />,
/>.
3)PPN>0
y0j+1 = м1j+1 → B=0,C=1, F= м1j+1,
yNj+1 = м2j+1 → AN=0,CN=1, FN=м2j+1.
4) P>0, PN
/>
B0 =0,C=1, F= м1j+1
/>
AN=0,CN=1, FN=м2j+1
Таблица 7. Численное решение уравнения переноса с переменными коэффициентами Трехточечная схема с весом Метод прогонки
-------------------kogda p0>0, pN>0---------------kogda G=1
50sloy N priblijennoe tochnoe pogreshnosti
0.36842774
0.36787944
0.00054830
1
0.35627966
0.35581892
0.00046075
2
0.34461653
0.34415379
0.00046275
3
0.33324870
0.33287108
0.00037762
4
0.32234219
0.32195827
0.00038392
5
0.31170418
0.31140322
0.00030095
6
0.30150555
0.30119421
0.00031134
7
0.29155019
0.29131989
0.00023030
8
0.28201389
0.28176929
0.00024460
9
0.27269705
0.27253179
0.00016526
10
0.26378042
0.26359714
0.00018329
11
0.25506082
0.25495540
0.00010543
12
0.24672399
0.24659696
0.00012703
13
0.23856301
0.23851255
0.00005045
14
0.23076867
0.23069318
0.00007549
15
0.22313016
0.22313016
0.00000000
Таблица 8. Численное решение уравнения переноса на с переменнми коэффициентами Трехточечная схема с весом Метод прогонки
-------------------kogda p0>0, pN>0---------------kogda G=0.5
50sloy N priblijennoe tochnoe pogreshnosti
0.22317966
0.36787944
0.14469979
1
0.32550240
0.35581892
0.03031652
2 продолжение
--PAGE_BREAK----PAGE_BREAK----PAGE_BREAK----PAGE_BREAK----PAGE_BREAK----PAGE_BREAK--
0.03681277
0.03464558
0.00216719
10
0.03684883
0.03441538
0.00243345
11
0.03683543
0.03418671
0.00264872
12
0.03687339
0.03395955
0.00291384
13
0.03686210
0.03373391
0.00312820
14
0.03690193
0.03350976
0.00339217
15
0.03689273
0.03328711
0.00360562
Таблица 18. Численное решение уравнения переноса с постоянными коэффициентами Трехточечная схема с весом Метод прогонки
-------------------kogda p
50sloy N priblijennoe tochnoe pogreshnosti
0.03678794
0.03678794
0.00000000
1
0.03697886
0.03654351
0.00043535
2
0.03685351
0.03630069
0.00055282
3
0.03694215
0.03605949
0.00088265
4
0.03678490
0.03581990
0.00096500
5
0.03709634
0.03558189
0.00151445
6
0.03702149
0.03534547
0.00167603
7
0.03710468
0.03511062
0.00199406
8
0.03712939
0.03487732
0.00225206
9
0.03693008
0.03464558
0.00228450
10
0.03706115
0.03441538
0.00264577
11
0.03679396
0.03418671
0.00260725
12
0.03713746
0.03395955
0.00317791
13
0.03669566
0.03373391
0.00296175
14
0.03706614
0.03350976
0.00355638
15
0.03675340
0.03328711
0.00346629
Текст программы смотри в приложении 6
3.3.3 Схема “прямоугольник”
1. p>0 разностная схема правая имеет вид
/>
/>
/>
2. p
/>
/>
/>
3.3.4 Схема со сглаживанием
Разностная схема имеет вид
/>
/>
1. p>0 />
/>
2. p
/>
/>
Схема сводится к стандартному виду и решается методом прогонки.
3.3.5 Схема прямоугольник со сглаживанием
1.p>0
/>/>
/>
/>
/>/>
/>
2.p
/>/> продолжение
--PAGE_BREAK--
/>
/>
/>/>
/>
3.3.6 “Шахматная” схема
Имеем схему с весом />
/>
/>
1.p>0 />
/>
2. p
/>
Параметр />управляет реализацией схемы. При />=0 и
(i+j)- четном решаем по явной схеме, при />=1 и
(i+j)- нечетном решаем по неявной схеме явно. В целом схема реализуется явно.
Заключение
Теория разностных схем является самостоятельным разделом вычислительной математики, где изучаются методы приближенного решения дифференциальных уравнений путем замены их конечно –разностными уравнениями (разностными схемами).
Конечно –разностный метод (метод сеток) –один из мощных достаточно универсальных методов современной вычислительной математики. Этот метод относится к классу машинных методов решения широкого круга задач для дифференциальных уравнений.
В дипломной работе рассмотрены “явные” и неявные разностные методы решения для одномерного уравнения переноса с переменными коэффициентами и для одномерного уравнения переноса с постоянными коэффициентами на неравномерных сетках. Использованы такие разностные схемы, как схема бегущего счета, трехточечная схема с весом, центрально –разностная схема, схема “прямоугольник”, схема со сглаживанием, схема прямоугольник со сглаживанием, “шахматная ” схема.
Произведены некоторые расчеты для одномерного уравнения переноса с переменными и постоянными коэффициентами на неравномерных сетках, с целью определения наиболее устойчивой разностной схемы.
Исследование показало, что наиболее устойчивым методом для одномерного уравнения переноса с переменными коэффициентами является:
При p0>0, pN>0 трехточечная схема с весом при G=1, абсолютная погрешность аппроксимации на 50-м слое составляет 0,00007549.
При p0
При p00 так же схема с центральной разностью, абсолютная погрешность составляет 0,00009042.
Так же произведены расчеты некоторых методов одномерного уравнения переноса с постоянными коэффициентами.
Исследование показало, что наиболее устойчивым методом для одномерного уравнения переноса с постоянными коэффициентами является:
При p>0 трехточечная схема с весом при G=1, абсолютная погрешность аппроксимации на 50-м слое составляет 0,00000755.
2) При p
Список использованной литературы
Самарский А.А. Теория разностных схем. М.:Наука, 1977, с. 616.
Самарский А.А., Гулин А.В.Численные методы. М.Наука, 1989, с. 315.
Охлопков Н.М. Численные методы решения обыкновенных дифференциальных уравнений. Якутск: Изд-во Ягу, 1993, с. 38.
Охлопков Н.М., Охлопков Г.Н. Введение в специальность “Прикладная математика” часть 1,2 Якутск: Изд-во Ягу, 1997, с. 93, с. 85.
Охлопков Н.М., Иванов Ф.В. Вычислительные алгоритмы решения задач для дифференциальных уравнений Якутск: Изд-воЯгу, 1992, с.65.
Охлопков Н.М., Иванов Ф.В. Пакет программ численного решения задач математической физики ч.2, Якутск: Изд-во Ягу, 1989, с 15.
Охлопков Н.М. Об экономичных методах решения задач математической физики. Якутск: Изд-во Ягу, 1982, с. 39.
Приложение 1
Уравнение с переменными коэффициентами
“Явная” схема.
Левая разностная схема
p0
uses crt;
const n=15;j0=20;tt=1;l=1;A=0.01;a1=1;q=2;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j:integer;
x,h,t,tau,d:hi;
u,u1,g,u2,u11,u12:m;
function ut(p,r:real):real;
begin ut:= A*exp(p+r);end;
function fi(p,r:real):real;
begin fi:=A*exp(p+r)*(p*(p+1)+r*(r+1)+7); end;
function ro(p,r:real):real;
begin ro:=sqr(p)+sqr(r)+5;end;
function p1(p,r:real):real;
begin p1:=-(p+r+2);end;
begin
clrscr;
writeln ( 'sxema begushego scheta');
writeln(' kogda p0
writeln(' levaya raznostnaya sxema');
readln;
h[0]:=0;
h[1]:=a1;
for i:=2 to n do
h[i]:=l/n;
tau[j]:=tt/j0;
t[j]:=0;j:=1;
for i:=0 to n do
begin
x[i]:=i*h[i];t[j]:=j*tau[j];
u[i]:= A*(exp(x[i]));
end;
while t[j] продолжение
--PAGE_BREAK--
t[j]:=t[j]+tau[j];
u1[0]:=A*exp((t[j]));
for i:=n-1 downto 0 do
begin
g[i]:=tau[j+1]*p1(x[i],t[j+1])/h[i+1];
u11[i]:=(-g[i]*u1[i+1])+(ro(x[i],t[j+1])*u[i]);
u12[i]:=tau[j+1]*fi(x[i],t[j]);
u1[i]:=(u11[i]+u12[i])/(ro(x[i],t[j+1])+g[i]);
end;
for i:=n-1 downto 0 do
u[i]:=u1[i];
writeln('----------------------------------------------------------');
write(' ',j,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do
begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[i]:6:8,' '); end;
j:=j+1;
writeln('--------------------------------------------------------------');
readln;
end;
end.
Уравнение с переменными коэффициентами
“Явная” схема.
Схема бегущего счета.
Правая разностная схема
p0>0, pN>0
uses crt;
const n=15;j0=50;tt=1;l=0.5;A=0.5;a1=2;q=2;
type w=array[0..n] of real;
hi=array[0..n] of real;
var i,j:integer;
x,h,t,tau,d:hi;
u,u1,g,u2,u11,u12:w;
function ut(p,r:real):real;
begin ut:= A*exp(p+r);end; {to4noe reshenie}
function fi(p,r:real):real;
begin fi:=A*exp(p+r)*(p*(p-1)+r*(r-1)+3);end;
function ro(p,r:real):real;
begin ro:=sqr(p)+sqr(r)+5;end;
function p1(p,r:real):real;
begin p1:=p+r+2;end;
begin clrscr;
writeln ( 'sxema begushego scheta');
writeln(' kogda p0>0,pN>0');
writeln(' pravaya raznostnaya sxema');
readln;
h[0] := 0;
h[1] := a1;
for i:=2 to n do
h[i] := h[i-1]*q;
for i:=0 to n do
h[i]:=x[i]-x[i-1];
tau[j]:=t[j]-t[j-1];
t[j]:=0;j:=1;
for i:=0 to n do
begin
x[i]:=i*h[i];t[j]:=j*tau[j];
u[i]:= A*exp(x[i]); {u0(x)}
end;
begin
while t[j]
t[j]:=t[j]+tau[j];
u1[i]:=A*exp(l+t[j]); {mu2(t)}
for i:=n-1 downto 0 do
begin
g[i]:=(tau[j+1]*p1(x[i],t[j+1])/h[i+1]); {R[i,j+1]}
u11[i]:=(g[i]*u1[i+1])+ro(x[i],t[j+1])*u[i];
u12[i]:=tau[j+1]*fi(x[i],t[j+1]);
u1[i]:=(u11[i]+u12[i])/(ro(x[i],t[j+1])+g[i]); {y
end;
for i:=n-1 downto 0 do begin
u[i]:=u1[i]; end;
writeln('----------------------------------------------------------');
write(' ',j,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i :=0 to n do продолжение
--PAGE_BREAK--
begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[i]:6:8,' '); end;
j:=j+1;
writeln('--------------------------------------------------------------'
readln;
end;
end;
end.
Приложение 2
Уравнение с переменными коэффициентами
Схема с центральной разностью
p0>0, pN>
uses crt;
const n=15;j0=50;tt=1;l=1;A1=1;q=3;g1=1;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j,k:integer;
h,d,tau,t:hi;
u,u1,r,x,z,a,b,c,f,alfa,betta:m;
function ut(p,r:real):real;
begin ut:= A1*exp(p+r);end;
function fi(p,r:real):real;
begin fi:= begin fi:=A*exp(p+r)*(p*(p-1)+r*(r-1)+3);end;
function ro(p,r:real):real;
begin ro:=sqr(p)+sqr(r)+5;end;
p1(p,r:real):real;
begin p1:=p+r+2;end;
begin
clrscr;
writeln (' chislennoe reshenie uravneniya perenosa');
writeln ( 'sxema s sentralnoy raznostju');
writeln(' kogda p0>0,pn>0');
readln;
h[0]:=0;
h[1]:=a1;
for i:=2 to n do
h[i]:=h[i-1]*q;
for i:=0 to n do
h[i]:=x[i]-x[i-1];;
tau[j]:=t[j]-t[j-1];
t[j]:=0;k:=0;
clrscr;
writeln('------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('-------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnost ');
writeln('--------------------------------------------------------');
for i:=0 to n do
begin
x[i]:=i*h[i]; t[j]:=j*tau[j];
u[i]:= A1*exp(x[i]);
d[i]:=abs(ut(x[i],t[j])-u[i]);
write('',i,'',u[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,'',d[i]:6:8,'');
end;
writeln('-------------------------------------------------------');
readln;
k:=1;
while t[j]
clrscr;
t[j]:=t[j]+tau[j];
c[0]:=1+(p1(x[i],t[j])*tau[j])/h[i]+tau[j]*q;
b[0]:=(tau[j]*p1)/h[i];
a[n]:=0;
c[n]:=1;
for i:=1 to n-1 do begin
r[i]:=tau[j]*p1/(2*h[i]);
a[i]:=-r[i];
c[i]:=ro;
b[i]:=-a[i];
f[i]:=ro*u[i]+tau[j]*fi(x[i],t[j]);end;
f[0]:=tau[j]*fi(x[0],t[j])+u[0];
f[n]:= A1*exp(l+t[j]);
alfa[0]:=b[0]/c[0];
betta[0]:=f[0]/c[0];
for i:=1 to n-1 do begin
z[i]:=c[i]-alfa[i-1]*a[i];
alfa[i]:=b[i]/z[i];
betta[i]:=(f[i]+a[i]*betta[i-1])/z[i]; end;
u1[n]:=(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]);
for i:=n-1 downto 0 do
u1[i]:=alfa[i]*u1[i+1]+betta[i];
writeln('----------------------------------------------------------'); продолжение
--PAGE_BREAK--
write(' ',k,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[i]:6:8,' '); end;
k:=k+1;
writeln('--------------------------------------------------------------');
readln;
for i:=0 to n do
u[i]:=u1[i];
end;
end.
Уравнение с переменными коэффициентами
Схема с центральной разностью
p0
uses crt;
const n=15;j0=50;tt=1;l=1;A1=1; q=3;g1=1;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j,k:integer;
h,d,tau,t:hi;
u,u1,r,x,z,a,b,c,f,alfa,betta:m;
function ut(p,r:real):real;
begin ut:= A1*exp(p+r);end;
function fi(p,r:real):real;
begin fi:=A1*exp(p+r)*(p*(p+1)+r*(r+1)+7);end;
function ro(p,r:real):real;
begin ro:=sqr(p)+sqr(r)+5;end;
function p1(p,r:real):real;
begin p1:=-(p+r+2);end;
begin
clrscr;
writeln (' chislennoe reshenie uravneniya perenosa');
writeln ( 'sxema s sentralnoy raznostju');
writeln(' kogda p0
readln;
h[0]:=0;
h[1]:=g1;
for i:=2 to n do
h[i]:=h[i-1]*q;
for i:=0 to n do
h[i]:=x[i]-x[i-1];
tau[j]:=t[j]-t[j-1];
t[j]:=0;k:=0;
clrscr;
writeln('------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('-------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnost ');
writeln('--------------------------------------------------------');
for i:=0 to n do
begin
x[i]:=i*h[i]; t[j]:=j*tau[j];
u[i]:= A1*exp(x[i]);
d[i]:=abs(ut(x[i],t[j])-u[i]);
write('',i,'',u[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,'',d[i]:6:8,'');
end;
writeln('-------------------------------------------------------');
readln;
k:=1;
while t[j]
clrscr;
t[j]:=t[j]+tau[j];
c[0]:=1;
b[0]:=0;
a[n]:=-(tau[j]*p1[x)/h[i];
c[n]:=1-(p1*tau[j])/h[i]+tau[j]*q;
for i:=1 to n-1 do begin
r[i]:=tau[j]*p1/(2*h[i]);
a[i]:=-r[i];
c[i]:=ro;
b[i]:=-a[i];
f[i]:=ro*u[i]+tau[j]*fi(x[i],t[j]);end;
f[0]:=A1*exp(t[j]);
f[n]:= (tau[j]*fi(x[n],t[j])+u[n]);
alfa[0]:=b[0]/c[0];
betta[0]:=f[0]/c[0];
for i:=1 to n-1 do begin
z[i]:=c[i]-alfa[i-1]*a[i];
alfa[i]:=b[i]/z[i]; продолжение
--PAGE_BREAK--
betta[i]:=(f[i]+a[i]*betta[i-1])/z[i]; end;
u1[n]:=(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]);
for i:=n-1 downto 0 do
u1[i]:=alfa[i]*u1[i+1]+betta[i];
writeln('----------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[i]:6:8,' '); end;
k:=k+1;
writeln('--------------------------------------------------------------');
readln;
for i:=0 to n do
u[i]:=u1[i];
end;
end.
Уравнение с переменными коэффициентами
Схема с центральной разностью.
p00
uses crt;
const n=15;j0=50;tt=1;l=1;A1=1;q=3;a2=1;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j,k:integer;
h,d,tau,t:hi;
u,u1,r,x,z,a,b,c,f,alfa,betta:m;
function ut(p,r:real):real;
begin ut:= v*exp(p+r);end;
function fi(p,r:real):real;
begin fi:=A1*exp(p+r)*((p+r+10)-(2*p-1)*exp(2*r);end;
function ro(p,r:real):real;
begin ro:=p+r+10;end;
function p1(p,r:real):real;
begin p1:=(2*p-1)*exp(2*r);end;
begin
clrscr;
writeln (' chislennoe reshenie uravneniya perenosa');
writeln ( 'sxema s sentralnoy raznostju');
writeln(' kogda p00');
readln;
h[0]:=0;
h[1]:=a2;
for i:=2 to n do
h[i]:=h[i-1]*q1;
h[i]:=x[i]-x[i-1];;
tau[j]:=t[j]-t[j-1];
t[j]:=0;k:=0;
clrscr;
writeln('------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('-------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnost ');
writeln('--------------------------------------------------------');
for i:=0 to n do
begin
x[i]:=i*h[i];
u[i]:= A1*exp(x[i]);
d[i]:=abs(ut(x[i],t[j])-u[i]);
write('',i,'',u[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,'',d[i]:6:8,'');
end;
writeln('-------------------------------------------------------');
readln;
k:=1;
while t[j]
clrscr;
t[j]:=t[j]+tau[j];
c[0]:=1;
b[0]:=0;
a[n]:=0;
c[n]:=1;
for i:=1 to n-1 do begin
r[i]:=tau[j+1]*p1/(2*h[i]);
a[i]:=-r[i];
c[i]:=ro;
b[i]:=-a[i];
f[i]:=ro*u[i]+tau[j+1]*fi(x[i],t[j]);end;
f[0]:=A1*exp(t[j]);
f[n]:=A1*exp(l+t[j]);
alfa[0]:=b[0]/c[0]; продолжение
--PAGE_BREAK--
betta[0]:=f[0]/c[0];
for i:=1 to n-1 do begin
z[i]:=c[i]-alfa[i-1]*a[i];
alfa[i]:=b[i]/z[i];
betta[i]:=(f[i]+a[i]*betta[i-1])/z[i]; end;
u1[n]:=(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]);
for i:=n-1 downto 0 do
u1[i]:=alfa[i]*u1[i+1]+betta[i];
writeln('----------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[i]:6:8,' '); end;
k:=k+1;
writeln('--------------------------------------------------------------');
readln;
for i:=0 to n do
u[i]:=u1[i];
end;
end.
Уравнение с переменными коэффициентами
Схема с центральной разностью.
p0>0, p
uses crt;
const n=15;j0=50;tt=1;l=1;A1=1; a2=1;q=3;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j,k:integer;
h,d,tau,t:hi;
u,u1,r,x,z,a,b,c,f,alfa,betta:m;
function ut(p,r:real):real;
begin ut:= A1*exp(p+r);end;
function fi(p,r:real):real;
begin fi:=A1*exp(p+r)*((p+r+10)-(2*p-1)*exp(2*r);end;
function ro(p,r:real):real;
begin ro:=p+r+10;end;
function p1(p,r:real):real;
begin p1:=(2*p-1)*exp(2*r);end;
begin
clrscr;
writeln (' chislennoe reshenie uravneniya perenosa');
writeln ( 'sxema s sentralnoy raznostju');
writeln(' kogda p0>0,pn
readln;
h[0]:=0;
h[1]:=a2;
for i:=2 to n do
h[i]:=h[i-1]*q;
h[i]:=x[i]-x[i-1];
tau[j]:=t[j]-tau[j-1];
t[j]:=0;k:=0;
clrscr;
writeln('------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('-------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnost ');
writeln('--------------------------------------------------------');
for i:=0 to n do
begin
x[i]:=i*h[i]; t[j]:=j*tau[j];
u[i]:= A1*exp(x[i]);
d[i]:=abs(ut(x[i],t[j])-u[i]);
write('',i,'',u[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,'',d[i]:6:8,'');
end;
writeln('-------------------------------------------------------');
readln;
k:=1;
while t[j]
clrscr;
t[j]:=t[j]+tau[j];
c[0]:=p1+ro*tau[j]/h[i];
b[0]:=tau[j]*p1/h[i];
a[n]:=tau[j]*p1/h[i];
c[n]:=-ro+p1*tau[j]/h[i];
for i:=1 to n-1 do begin
r[i]:=tau[j]*p1/(2*h[i]);
a[i]:=-r[i];
c[i]:=ro;
b[i]:=-a[i]; продолжение
--PAGE_BREAK--
f[i]:=ro*u[i]+tau[j]*fi(x[i],t[j]);end;
f[0]:=tau[j+1]*fi(x[0],t[j])+ro*u[0];
f[n]:=-(tau[j+1]*fi(x[n],t[j])+ro*u[n]);
alfa[0]:=b[0]/c[0];
betta[0]:=f[0]/c[0];
for i:=1 to n-1 do begin
z[i]:=c[i]-alfa[i-1]*a[i];
alfa[i]:=b[i]/z[i];
betta[i]:=(f[i]+a[i]*betta[i-1])/z[i]; end;
u1[n]:=(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]);
for i:=n-1 downto 0 do
u1[i]:=alfa[i]*u1[i+1]+betta[i];
writeln('----------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[i]:6:8,' '); end;
k:=k+1;
writeln('--------------------------------------------------------------');
readln;
for i:=0 to n do
u[i]:=u1[i];
end;
end.
Приложение 3
Уравнение с переменными коэффициентами
Трехточечная схема с весом
Метод прогонки
p0>0, pN>0
uses crt;
const n=15;j0=50;tt=1;l=1;A1=1;q=3;a2=1;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j,k,G:integer;
h,d,tau,t,f1,f2,f3,f4,f5,f6:hi;
u,u1,r,x,z,a,b,c,f,alfa,betta:m;
function ut(p,r:real):real;
begin ut:= A1*exp(p+r);end;
function fi(p,r:real):real;
begin fi:=A*exp(p+r)*(p*(p-1)+r*(r-1)+3);end;
function ro(p,r:real):real;
begin ro:=sqr(p)+sqr(r)+5;end;
function p1(p,r:real):real;
begin p1:=p+r+2;end;
begin
clrscr;
writeln (' chislennoe reshenie uravneniya perenosa');
writeln ( 'sxema begushego scheta');
writeln(' metod progonki');
writeln(' ------------------------------' );
writeln('-------------kogda p0>0,pN>0------------');
writeln(' vvedite G=' );
read(G);
writeln('----------------------------------------');
readln;
readln;
h[0]:=0;
h[1]:=a2;
for i:=2 to n do
h[i]:=h[i-1]*q;
for i:=0 to n do
h[i]:=x[i]-x[i-1];;
tau[j]:=t[j]-t[j-1];
t[j]:=0;k:=0;
clrscr;
writeln('------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('-------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnost ');
writeln('--------------------------------------------------------');
for i:=0 to n do
begin
x[i]:=i*h[i]; t[j]:=j*tau[j];
u[i]:= A1*exp(x[i]);
d[i]:=abs(ut(x[i],t[j])-u[i]);
write('',i,'',u[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,'',d[i]:6:8,'');
end; продолжение
--PAGE_BREAK--
writeln('-------------------------------------------------------');
readln;
k:=1;
while t[j]
clrscr;
t[j]:=t[j]+tau[j];
c[0]:=ro+(p1*tau[j])/h[i];
b[0]:=G*tau[j]*p1/h[i];
a[n]:=0;
c[n]:=1;
for i:=1 to n-1 do begin
a[i]:=-G*p1*tau[j]/(2*h[i]);
c[i]:=ro;
b[i]:=-a[i];
f1[i]:=(1-G)*p1*tau[j]/(2*h[i]);
f2[i]:=ro*u[i];
f3[i]:=G*tau[j]*fi(x[i],t[j]);
f4[i]:=(1-G)*tau[j]*fi(x[i],t[j]-tau[j]);
f[i]:=f1[i]*(u[i+1]-u[i-1])+f2[i]+f3[i]+f4[i];
end;
f5[i]:=(1-G)*p1*(u[1]-u[0])*tau[j]/h[i];
f6[i]:=ro*u[0]+f5[i]+G*tau[j]*fi(x[0],t[j]+tau[j]);
f[0]:=f6[j]+(1-G)*tau[j]*fi(x[0],t[j]);
f[n]:= A1*exp(l+t[j]);
alfa[0]:=b[0]/c[0];
betta[0]:=f[0]/c[0];
for i:=1 to n-1 do begin
z[i]:=c[i]-alfa[i-1]*a[i];
alfa[i]:=b[i]/z[i];
betta[i]:=(f[i]+a[i]*betta[i-1])/z[i]; end;
u1[n]:=(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]);
for i:=n-1 downto 0 do
u1[i]:=alfa[i]*u1[i+1]+betta[i];
writeln('----------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[i]:6:8,' '); end;
k:=k+1;
writeln('--------------------------------------------------------------');
readln;
for i:=0 to n do
u[i]:=u1[i];
end;
end.
Уравнение с переменными коэффициентами
Трехточечная схема с весом
Метод прогонки
p0
uses crt;
const n=15;j0=50;tt=1;l=1;A1=1;q=3;a2=1;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j,k,G:integer;
h,d,tau,t,f1,f2,f3,f4,f5,f6:hi;
u,u1,r,x,z,a,b,c,f,alfa,betta:m;
function ut(p,r:real):real;
begin ut:= A1*exp(p+r);end;
function fi(p,r:real):real;
begin fi:=A*exp(p+r)*(p*(p+1)+r*(r+1)+7); end;
function ro(p,r:real):real;
begin ro:=sqr(p)+sqr(r)+5;end;
function p1(p,r:real):real;
begin p1:=-(p+r+2);end;
begin
clrscr;
writeln (' chislennoe reshenie uravneniya perenosa');
writeln ( 'trextochechnaya sxema');
writeln(' kogda p
writeln(' vvedite G=' );
read(G);
writeln('----------------------------------------------------');
readln;
readln;
h[0]:=0;
h[1]:=a2;
for i:=2 to n do
h[i]:=h[i-1]*q;
for i:=0 to n do
h[i]:=x[i]-x[i-1];; продолжение
--PAGE_BREAK--
tau[j]:=t[j]-t[j-1];
t[j]:=0;k:=0;
clrscr;
writeln('------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('-------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnost ');
writeln('--------------------------------------------------------');
for i:=0 to n do
begin
x[i]:=i*h[i]; t[j]:=j*tau[j];
u[i]:= A1*exp(x[i]);
d[i]:=abs(ut(x[i],t[j])-u[i]);
write('',i,'',u[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,'',d[i]:6:8,'');
end;
writeln('-------------------------------------------------------');
readln;
k:=1;
while t[j]
clrscr;
t[j]:=t[j]+tau[j];
c[0]:=1;
b[0]:=0;
a[n]:=-g*(tau[j]*p1)/h[i];
c[n]:=ro-g*(p1*tau[j])/h[i];
for i:=1 to n-1 do begin
r[i]:=tau[j]*p1/(2*h[i]);
a[i]:=(-g*p1*tau[j])/(2*h[i]);
c[i]:=ro;
b[i]:=-a[i];
f1[i]:=(1-g)*(p1*tau[j])/(2*h[i]);
f2[i]:=ro*u[i];
f3[i]:=g*tau[j]*fi(x[i],t[j]);
f4[i]:=(1-g)*tau[j]*fi(x[i],t[j]-tau[j]);
f[i]:=f1[i]*(u[i+1]-u[i-1])+f2[i]+f3[i]+f4[i];end;
f[0]:=A1*exp(t[j]);
f5[i]:=(1-g)*p1*(u[1]-u[0])*tau[j]/h[i];
f6[i]:=ro*u[0]+f5[i]+g*tau[j]*fi(x[0],t[j]+tau[j]);
f[n]:=f6[j]+(1-g)*tau[j]*fi(x[0],t[j]);
alfa[0]:=b[0]/c[0];
betta[0]:=f[0]/c[0];
for i:=1 to n-1 do begin
z[i]:=c[i]-alfa[i-1]*a[i];
alfa[i]:=b[i]/z[i];
betta[i]:=(f[i]+a[i]*betta[i-1])/z[i]; end;
u1[n]:=(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]);
for i:=n-1 downto 0 do
u1[i]:=alfa[i]*u1[i+1]+betta[i];
writeln('----------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[i]:6:8,' '); end;
k:=k+1;
writeln('--------------------------------------------------------------');
readln;
for i:=0 to n do
u[i]:=u1[i];
end;
end.
Приложение 4
Уравнение с постоянными коэффициентами
“Явная” схема.
Левая разностная схема
p
uses crt;
const n=15;j0=50;tt=1;l=1;A=1;B=1;p1=1;q=3;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j:integer;
h,d,tau,t:hi;
u11,u12:real;
u,u1,x,g,u2:m;
function ut(p,r:real):real;
begin ut:= A*exp(B*(p+r));end;
function fi(p,r:real):real;
begin fi:=A*B*exp(B*(p+r))*(1-p1+q/B); end;
begin продолжение
--PAGE_BREAK--
clrscr;
writeln ( 'sxema begushego scheta');
writeln(' kogda p0>0,pN>0');
writeln(' pravaya raznostnaya sxema');
readln;
h[0]:=0;
h[1]:=a1;
for i:=2 to n do
h[i]:=h[i-1]*q;
for i:=0 to n do
h[i]:=x[i]-x[i-1];;
tau[j]:=t[j]-t[j-1];
t[j]:=0;j:=1;
for i:=0 to n do
begin
x[i]:=i*h;t[j]:=j*tau[j];
u[i]:= A*(exp(B*(x[i])));
end;
while t[j]
t[j]:=t[j]+tau[j];
u1[n]:=A*exp(B*(l+t[j]));
for i:=n-1 downto 0 do begin
g[i]:=(tau[j+1]*p1)/h[i];
u11:=(g[i]*u1[i+1])+u[i];
u12:=tau*fi(x[i],t[j]);
u1[i]:=(u11+u12)/(1+g[i]+tau[j+1]*q);
end;
for i:=0 to n do u[i]:=u1[i];
writeln('----------------------------------------------------------');
write(' ',j,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t):6:8,' ',d[i]:6:8,' '); end;
j:=j+1;
writeln('--------------------------------------------------------------');
readln;
end;
end.
Уравнение с постоянными коэффициентами
“Явная” схема.
Схема бегущего счета.
Правая разностная схема
p>0
uses crt;
const n=15;j0=50;tt=1;l=1;A=1;B=-1;p1=-3;q=3;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j:integer;
x,h,d,tau,t:hi;
u11,u12:real;
u,u1,g:m;
function ut(p,r:real):real;
begin ut:= A*exp(B*(p+r));end;
function fi(p,r:real):real;
begin fi:=A*B*exp(B*(p+r))*(1-p1+q/B); end;
begin
clrscr;
writeln ( 'sxema begushego scheta');
writeln(' kogda p0
writeln(' levaya raznostnaya sxema');
readln;
h[0]:=0;
h[1]:=a1;
for i:=2 to n do
h[i]:=h[i-1]*q;
for i:=0 to n do
h[i]:=x[i]-x[i-1];;
tau[j]:=t[j]-t[j-1];
t[j]:=0;j:=1;
for i:=0 to n do
begin
x[i]:=i*h[i]; t[j]:=j*tau[j];
u[i]:= A*(exp(B*(x[i])));
end;
while t[j]
t[j]:=t[j]+tau[j];
u1[0]:=A*exp(B*(t[j]));
for i:=1 to n do begin
g[i]:=(tau[j]*p1)/h[i];
u11:=(-g[i]*u1[i-1])+u[i];
u12:=tau[j]*fi(x[i],t[j]);
u1[i]:=(u11+u12)/(1-g[i]+tau[j]*q); продолжение
--PAGE_BREAK--
end;
for i:=0 to n do u[i]:=u1[i];
writeln('----------------------------------------------------------');
write(' ',j,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do begin
d[j]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[j]:6:8,' '); end;
j:=j+1;
writeln('--------------------------------------------------------------');
readln;
end;
end.
Приложение 5.
Уравнение с постоянными коэффициентами
Схема с центральной разностью
p>0
uses crt;
const n=15;j0=50;tt=1;l=1;A1=1;B1=1;p1=1;q=3;g1=1;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j,k:integer;
h,d,tau,t:hi;
u,u1,r,x,z,a,b,c,f,alfa,betta:m;
function ut(p,r:real):real;
begin ut:= A1*exp(B1*(p+r));end;
function fi(p,r:real):real;
begin fi:=A1*B1*exp(B1*(p+r))*(1-p+q/B);end;
begin
clrscr;
writeln (' chislennoe reshenie uravneniya perenosa');
writeln ( 'sxema s sentralnoy raznostju');
writeln(' kogda p0>0,pn>0');
readln;
h[0]:=0;
h[1]:=a1;
for i:=2 to n do
h[i]:=h[i-1]*q;
for i:=0 to n do
h[i]:=x[i]-x[i-1];;
tau[j]:=t[j]-t[j-1];
t[j]:=0;k:=0;
clrscr;
writeln('------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('-------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnost ');
writeln('--------------------------------------------------------');
for i:=0 to n do
begin
x[i]:=i*h[i]; t[j]:=j*tau[j];
u[i]:= A1*exp(B1*(x[i]));
d[i]:=abs(ut(x[i],t[j])-u[i]);
write('',i,'',u[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,'',d[i]:6:8,'');
end;
writeln('-------------------------------------------------------');
readln;
k:=1;
while t[j]
clrscr;
t[j]:=t[j]+tau[j];
c[0]:=1+(p1*tau[j+1])/h[1]+tau[j+1]*q;
b[0]:=(tau[j+1]*p1)/h[1];
a[n]:=0;
c[n]:=1;
for i:=1 to n-1 do begin
r[i]:=tau[j]*p1/(2*h[i]);
a[i]:=-r[i];
c[i]:=ro;
b[i]:=-a[i];
f[i]:=ro*u[i]+tau[j]*fi(x[i],t[j]);end;
f[0]:=tau[j]*fi(x[0],t[j])+u[0];
f[n]:= A1*exp(B1*(l+t[j]));
alfa[0]:=b[0]/c[0];
betta[0]:=f[0]/c[0];
for i:=1 to n-1 do begin
z[i]:=c[i]-alfa[i-1]*a[i];
alfa[i]:=b[i]/z[i];
betta[i]:=(f[i]+a[i]*betta[i-1])/z[i]; end; продолжение
--PAGE_BREAK--
u1[n]:=(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]);
for i:=n-1 downto 0 do
u1[i]:=alfa[i]*u1[i+1]+betta[i];
writeln('----------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[i]:6:8,' '); end;
k:=k+1;
writeln('--------------------------------------------------------------');
readln;
for i:=0 to n do
u[i]:=u1[i];
end;
end.
Уравнение с постоянными коэффициентами
Схема с центральной разностью
P
uses crt;
const n=15;j0=50;tt=1;l=1;A1=1;B1=-1;p1=-1; q=3;g1=1;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j,k:integer;
h,d,tau,t:hi;
u,u1,r,x,z,a,b,c,f,alfa,betta:m;
function ut(p,r:real):real;
begin ut:= A1*exp(B1*(p+r));end;
function fi(p,r:real):real;
begin fi:=A1*B1*exp(B1*(p+r))*(1-p1+q/B);end;
begin
clrscr;
writeln (' chislennoe reshenie uravneniya perenosa');
writeln ( 'sxema s sentralnoy raznostju');
writeln(' kogda p0
readln;
h[0]:=0;
h[1]:=g1;
for i:=2 to n do
h[i]:=h[i-1]*q;
for i:=0 to n do
h[i]:=x[i]-x[i-1];
tau[j]:=t[j]-t[j-1];
t[j]:=0;k:=0;
clrscr;
writeln('------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('-------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnost ');
writeln('--------------------------------------------------------');
for i:=0 to n do
begin
x[i]:=i*h[i]; t[j]:=j*tau[j];
u[i]:= A1*exp(B1*(x[i]));
d[i]:=abs(ut(x[i],t[j])-u[i]);
write('',i,'',u[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,'',d[i]:6:8,'');
end;
writeln('-------------------------------------------------------');
readln;
k:=1;
while t[j]
clrscr;
t[j]:=t[j]+tau[j];
c[0]:=1;
b[0]:=0;
a[n]:=-(tau[j]*p1)/h[i];
c[n]:=1-(p1*tau[j])/h[i]+tau[j]*q;
for i:=1 to n-1 do begin
r[i]:=tau[j]*p1/(2*h[i]);
a[i]:=-r[i];
c[i]:=ro;
b[i]:=-a[i];
f[i]:=ro*u[i]+tau[j]*fi(x[i],t[j]);end;
f[0]:=A1*exp(t[j]);
f[n]:= (tau[j]*fi(x[n],t[j])+u[n]);
alfa[0]:=b[0]/c[0];
betta[0]:=f[0]/c[0];
for i:=1 to n-1 do begin
z[i]:=c[i]-alfa[i-1]*a[i]; продолжение
--PAGE_BREAK--
alfa[i]:=b[i]/z[i];
betta[i]:=(f[i]+a[i]*betta[i-1])/z[i]; end;
u1[n]:=(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]);
for i:=n-1 downto 0 do
u1[i]:=alfa[i]*u1[i+1]+betta[i];
writeln('----------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[i]:6:8,' '); end;
k:=k+1;
writeln('--------------------------------------------------------------');
readln;
for i:=0 to n do
u[i]:=u1[i];
end;
end.
Приложение 6
Уравнение с постоянными коэффициентами
Трехточечная схема с весом
Метод прогонки
p>0
uses crt;
const n=15;j0=50;tt=1;l=1;A1=1;B1=1;p1=1;q=3;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j,k,G:integer;
h,d,tau,t,f1,f2,f3,f4,f5,f6:hi;
u,u1,r,x,z,a,b,c,f,alfa,betta:m;
function ut(p,r:real):real;
begin ut:= A1*exp(B1*(p+r));end;
function fi(p,r:real):real;
begin fi:=A1*B1*exp(B1*(p+r))*(1-p1+q/B1);end;
begin
clrscr;
writeln (' chislennoe reshenie uravneniya perenosa');
writeln ( 'sxema begushego scheta');
writeln(' metod progonki');
writeln(' ------------------------------' );
writeln('-------------kogda p0>0,pN>0------------');
writeln(' vvedite G=' );
read(G);
writeln('----------------------------------------');
readln;
readln;
h[0]:=0;
h[1]:=a1;
for i:=2 to n do
h[i]:=h[i-1]*q;
for i:=0 to n do
h[i]:=x[i]-x[i-1];;
tau[j]:=t[j]-t[j-1];
t[j]:=0;k:=0;
clrscr;
writeln('------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('-------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnost ');
writeln('--------------------------------------------------------');
for i:=0 to n do
begin
x[i]:=i*h[i]; t[j]:=j*tau[j];
u[i]:= A1*exp(B1*(x[i]));
d[i]:=abs(ut(x[i],t[j])-u[i]);
write('',i,'',u[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,'',d[i]:6:8,'');
end;
writeln('-------------------------------------------------------');
readln;
k:=1;
while t[j]
clrscr;
t[j]:=t[j]+tau[j];
c[0]:=ro+(p1*tau[j])/h[i];
b[0]:=G*tau[j]*p1/h[i];
a[n]:=0;
c[n]:=1;
for i:=1 to n-1 do begin
a[i]:=-G*p1*tau[j]/(2*h[i]); продолжение
--PAGE_BREAK--
c[i]:=ro;
b[i]:=-a[i];
f1[i]:=(1-G)*p1*tau[j]/(2*h[i]);
f2[i]:=ro*u[i];
f3[i]:=G*tau[j]*fi(x[i],t[j]);
f4[i]:=(1-G)*tau[j]*fi(x[i],t[j]-tau[j]);
f[i]:=f1[i]*(u[i+1]-u[i-1])+f2[i]+f3[i]+f4[i];
end;
f5[i]:=(1-G)*p1*(u[1]-u[0])*tau[j]/h[i];
f6[i]:=ro*u[0]+f5[i]+G*tau[j]*fi(x[0],t[j]+tau[j]);
f[0]:=f6[j]+(1-G)*tau[j]*fi(x[0],t[j]);
f[n]:= A1*exp(B1*(l+t[j]));
alfa[0]:=b[0]/c[0];
betta[0]:=f[0]/c[0];
for i:=1 to n-1 do begin
z[i]:=c[i]-alfa[i-1]*a[i];
alfa[i]:=b[i]/z[i];
betta[i]:=(f[i]+a[i]*betta[i-1])/z[i]; end;
u1[n]:=(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]);
for i:=n-1 downto 0 do
u1[i]:=alfa[i]*u1[i+1]+betta[i];
writeln('----------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[i]:6:8,' '); end;
k:=k+1;
writeln('--------------------------------------------------------------');
readln;
for i:=0 to n do
u[i]:=u1[i];
end;
end.
Уравнение с постоянными коэффициентами
Трехточечная схема с весом
Метод прогонки
P
uses crt;
const n=15;j0=50;tt=1;l=1;A1=1;B1=-1;p1=-1;q=3;
type m=array[0..n] of real;
hi=array[0..n] of real;
var i,j,k,G:integer;
h,d,tau,t,f1,f2,f3,f4,f5,f6:hi;
u,u1,r,x,z,a,b,c,f,alfa,betta:m;
function ut(p,r:real):real;
begin ut:= A1*exp(B1*(p+r));end;
function fi(p,r:real):real;
begin fi:=A1*B1*exp(B1*(p+r))*(1-p1+q/B1);end;
begin
clrscr;
writeln (' chislennoe reshenie uravneniya perenosa');
writeln ( 'trextochechnaya sxema');
writeln(' kogda p
writeln(' vvedite G=' );
read(G);
writeln('----------------------------------------------------');
readln;
readln;
h[0]:=0;
h[1]:=a1;
for i:=2 to n do
h[i]:=h[i-1]*q;
for i:=0 to n do
h[i]:=x[i]-x[i-1];;
tau[j]:=t[j]-t[j-1];
t[j]:=0;k:=0;
clrscr;
writeln('------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('-------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnost ');
writeln('--------------------------------------------------------');
for i:=0 to n do
begin
x[i]:=i*h[i]; t[j]:=j*tau[j];
u[i]:= A1*exp(B1*(x[i]));
d[i]:=abs(ut(x[i],t[j])-u[i]);
write('',i,'',u[i]:6:8,' '); продолжение
--PAGE_BREAK--
writeln(ut(x[i],t[j]):6:8,'',d[i]:6:8,'');
end;
writeln('-------------------------------------------------------');
readln;
k:=1;
while t[j]
clrscr;
t[j]:=t[j]+tau[j];
c[0]:=1;
b[0]:=0;
a[n]:=-g*(tau[j]*p1)/h[i];
c[n]:=ro-g*(p1*tau[j])/h[i];
for i:=1 to n-1 do begin
r[i]:=tau[j]*p1/(2*h[i]);
a[i]:=(-g*p1*tau[j])/(2*h[i]);
c[i]:=ro;
b[i]:=-a[i];
f1[i]:=(1-g)*(p1*tau[j])/(2*h[i]);
f2[i]:=ro*u[i];
f3[i]:=g*tau[j]*fi(x[i],t[j]);
f4[i]:=(1-g)*tau[j]*fi(x[i],t[j]-tau[j]);
f[i]:=f1[i]*(u[i+1]-u[i-1])+f2[i]+f3[i]+f4[i];end;
f[0]:=A1*exp(B1*(t[j]));
f5[i]:=(1-g)*p1*(u[1]-u[0])*tau[j]/h[i];
f6[i]:=ro*u[0]+f5[i]+g*tau[j]*fi(x[0],t[j]+tau[j]);
f[n]:=f6[j]+(1-g)*tau[j]*fi(x[0],t[j]);
alfa[0]:=b[0]/c[0];
betta[0]:=f[0]/c[0];
for i:=1 to n-1 do begin
z[i]:=c[i]-alfa[i-1]*a[i];
alfa[i]:=b[i]/z[i];
betta[i]:=(f[i]+a[i]*betta[i-1])/z[i]; end;
u1[n]:=(f[n]+a[n]*betta[n-1])/(c[n]-alfa[n-1]*a[n]);
for i:=n-1 downto 0 do
u1[i]:=alfa[i]*u1[i+1]+betta[i];
writeln('----------------------------------------------------------');
write(' ',k,'sloy');
writeln(' ');
writeln('--------------------------------------------------------');
writeln('N priblijennoe tochnoe pogreshnosti ');
writeln('--------------------------------------------------------');
for i:=0 to n do begin
d[i]:=abs(ut(x[i],t[j])-u1[i]);
write('',I,' ',u1[i]:6:8,' ');
writeln(ut(x[i],t[j]):6:8,' ',d[i]:6:8,' '); end;
k:=k+1;
writeln('--------------------------------------------------------------');
readln;
for i:=0 to n do
u[i]:=u1[i];
end;
end.