Решение смешанной краевой задачи для гиперболического уравнения разностным методом
Сетка, аппроксимация частных производных разностными отношениями. Операторная форма записи дифференциальных краевых задач. Нормы, погрешность приближённого решения. Сходимость и её порядок. Cмешанная краевая задача с граничными условиями третьего рода.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 08.10.2011 |
Размер файла | 501,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
Дифференциальные уравнения в частных производных имеют широкое приложение в математической физике, гидродинамике, акустике и других областях знаний. Большинство таких уравнений в явном виде не решаются. Поэтому широкое распространение получили методы приближенного их решения, например метод сеток, частным случаем которого является разностный метод [2]. Это универсальный и эффективный метод. Он позволяет сводить приближенное решение уравнений в частных производных к решению систем алгебраических уравнений [3].
Цели курсовой работы:
1). Обзор литературы по теме «Решение смешанной краевой задачи для гиперболического уравнения разностным методом».
2). Реализация разностного метода применительно к смешанной краевой задачи для гиперболического уравнения в системе программирования Borland C++ Version 3.1.
Курсовая работа состоит из введения, двух глав, заключения, списка литературы и приложения. Первая глава посвящена обзору основных понятия, касающихся разностных схем. Во второй главе рассматривается смешанная краевая задача, для которой приведен алгоритм построения разностной схемы, а также описание программы «smesh_giperb» и её тест на конкретном примере. В приложении представлен код программы, позволяющий получить приближенное решение смешанной краевой задачи с граничными условиями третьего рода.
Глава 1. Разностные методы решения дифференциальных уравнений
Характерной особенностью различных разностных методов является то, что в качестве приближенного решения выбирается сеточная функция. Выделим основные пункты построения и исследования разностных схем.
1. Заменить область непрерывного изменения аргумента на дискретную область изменения. Это дискретное множество точек называется сеткой или решеткой, а отдельные точки этого множества - узлами сетки. Чаще всего сетка выбирается прямоугольной и равномерной.
2. Заменить в узлах этой сетки производные искомой функции разностными отношениями, использовав формулы численного дифференцирования.
3. Проверить условие аппроксимации разностной схемы.
4. Доказать устойчивость построенной разностной схемы. Это один из наиболее важных и сложных вопросов. Если схема обладает аппроксимацией и устойчивостью, то о сходимости разностной схемы судят о теореме доказанной ниже.
В результате получилась система алгебраических уравнений для определения приближённого решения. Такая система часто называется разностной схемой. Точно так же можно заменить и частные производные и свести краевую задачу для дифференциального уравнения в частных производных к алгебраической системе. Функция, определенная в узлах сетки называется сеточной функцией.
Сетка. Аппроксимация частных производных разностными отношениями.
Мы ввели уже понятие сетки, узлов сетки, разностной схемы и сеточной функции.
Обозначим
- искомая функция, ,
- открытая область с границей ,
- сетка на , где h - вещественный положительный параметр, характеризующий густоту точек на сетке.
- сеточная функция, совпадающая с точным решением дифференциальной краевой задачи во всех узлах сетки , называемая точным решением на сетке или точным сеточным решением.
Теперь рассмотрим примеры сеток.
Пример 1.
Равномерная сетка на отрезке. Разобьем единичный отрезок [0, 1] на N равных частей. Расстояние между соседними узлами назовем шагом сетки. Точки деления - узлы сетки. Множество всех узлов
и составляет сетку (рис. 1), в данном случае введенную на отрезке.
В это множество можно включить граничные точки . Обозначим
На отрезке [0, 1] вместо функции непрерывного аргумента y будем рассматривать функцию дискретного аргумента . Значения этой функции вычисляются в узлах сетки ,а сама функция зависит от шага сетки h как от параметра.
Пример 2.
Неравномерная сетка на отрезке. Рассмотрим отрезок . Вводя произвольные точки , разобьем его на N частей. Множество узлов образует неравномерную сетку . Расстояние между соседними узлами шаг сетки, равно и зависит уже от номера узла, т. е. является сеточной функцией. Шаги сетки удовлетворяют условию нормировки
Затем рассмотрим пример замены в узлах сетки производные искомой функции разностными отношениями.
Для начала определим разностные отношения, которые будут использоваться в дальнейших примерах.
, (1.1.1)
, (1.1.2)
(1.1.3)
Аналогично получаются приближённые разностные аналоги для частной производной по переменной t:
, (1.1.4)
, (1.1.5)
(1.1.6)
Для приближенного вычисления частных производных второго порядка также можно использовать формулы численного дифференцирования, например,
(1.1.7)
Пример 3
Рассмотрим задачу Коши для дифференциального уравнения первого порядка. Требуется найти функцию , определённую, непрерывную и имеющую частные производные первого порядка в области удовлетворяющую дифференциальному уравнению
(1.1.8)
и начальному условию
, . (1.1.9)
Здесь Т - заданная постоянная, а и - заданные функции. Если эти функции являются непрерывными, то задача будет иметь единственное решение - функцию . Это решение задачи Коши мы будем называть точным.
Введём в области D сетку:
Рис. 1
Здесь h и - заданные шаги сетки, а квадратными скобками обозначена операция вычисления целой части вещественного числа.
Будем искать приближённое решение этой задачи на сетке D. Поскольку является точным решением нашей дифференциальной краевой задачи, в каждом узле сетки будет выполняться дифференциальное уравнение
и в каждом узле, лежащем на нижней границе области D (), будут выполняться начальные условия
.
Заменим частные производные, входящие в дифференциальное уравнение, разностными отношениям (1.1.4) и (1.1.1) и получим в результате систему приближённых равенств, связывающих значения функции в узлах сетки:
(1.1.10)
, (1.1.11)
Для вычисления приближённого решения мы получили следующую систему линейных алгебраических уравнений:
(1.1.12)
,
, (1.1.13)
Для решения системы (10.1.12) - (10.1.13) выразим из (1.1.12) и получим рекуррентную формулу:
, (1.1.14)
.
Зная , по этой рекуррентной формуле при последовательно находим , , …, . Таким образом, система (1.1.12) - (1.1.13), действительно, имеет единственное решение. Но получить его практически невозможно, поскольку сетка содержит бесчисленное множество узлов.
Операторная форма записи дифференциальных краевых задач
Введём общее обозначение для любой дифференциальной краевой задачи. Запишем её в виде операторного уравнения:
(1.2.1)
где - искомая функция, , - открытая область с границей , f - заданная функция, L - заданный дифференциальный оператор, действующий на функцию . Будем считать, что задача (1.2.1) имеет единственное решение , которое мы в дальнейшем будем называть точным решением.
Пусть для решения дифференциальной краевой задачи составлена разностная краевая задача (разностная схема). Запишем её в виде операторного уравнения:
. (1.2.2)
Здесь - сеточное решение разностной краевой задачи, которое называется также приближённым сеточным решением дифференциальной краевой задачи .
Пример 4
Построение разностной схемы для смешанной краевой задачи для уравнения параболического типа.
Требуется найти функцию , определённую, непрерывную и имеющую частные производные второго порядка в области , удовлетворяющую дифференциальному уравнению
, (1.2.3)
начальному условию
, (1.2.4)
и граничным условиям
, , (1.2.5)
, , (1.2.6)
.
Здесь Т - заданная постоянная, а , , , , - заданные функции. Дифференциальное уравнение (1.2.3) описывает процесс распространения тепла в прямолинейном стержне. Поэтому его называют уравнением теплопроводности. Будем считать, что выполнены все условия, при которых сформулированная краевая задача имеет единственное решение - функцию .
Введём в области D сетку (рис. 3):
Рис. 2
Значения целой постоянной М и шага считаются заданными. Будем искать приближённое решение этой задачи на сетке. Поскольку является точным решением нашей дифференциальной краевой задачи, в каждом узле сетки будет выполняться дифференциальное уравнение
,
в каждом узле, лежащем на нижней границе области D (), будет выполняться начальное условие
,
в каждом узле, лежащем на левой границе области D (), будет выполняться граничное условие
,
в каждом узле, лежащем на правой границе области D (), будет выполняться начальное условие
.
Заменим частные производные, входящие в дифференциальное уравнение, разностными отношениями (1.1.4) и (1.1.7) и получим в результате систему приближённых равенств, связывающих значения функции в узлах сетки:
(1.2.7)
, (1.2.8)
, , (1.2.9)
, . (1.2.10)
Поскольку равенства (1.2.7) являются приближёнными, решив систему (1.2.7) - (1.2.10), мы получим, не точные значения , а приближённые. Обозначим их через (). В результате для определения получим разностную схему:
(1.2.11)
, (1.2.12)
, , (1.2.13)
, . (1.2.14)
Выразим из (1.2.11). В результате получается рекуррентная формула
(1.2.15)
применяя которую последовательно при , можно, зная , и , в явном виде определить , , …, . По этой причине построенная разностная схема получила название явной разностной схемы для уравнения теплопроводности. И другие разностные схемы, обладающие этим свойством, получили название явных схем.
Если вместо формулы (1.1.4) для аппроксимации частной производной использовать аналогичную формулу (1.1.5),то в результате вместо системы уравнений (10.1.23) получится система:
(1.2.16)
Разностная схема (1.2.16), (1.2.12)-(1.2.14) получила название неявной разностной схемы для уравнения теплопроводности, так как для её решения не удалось получить явной рекуррентной формулы, типа (1.2.15).
Погрешность замены частных производных разностными отношениями стремится к нулю при h и . Поэтому можно ожидать, что и погрешность приближённого решения также будет стремиться к нулю при h и , и за счёт уменьшения шагов сетки h и можно получать приближённые решения с любой заданной точностью.
Требуется записать её в виде операторного уравнения (1.2.2) и выяснить, что представляют собой основные объекты (, , и ) операторной записи. Сетка
Густоту сетки регулируют два параметра: М (или hрh) и . Один из них можно сделать основным, например, h, а второй параметр сделать зависимым от него, введя функцию , такую, что при . Тогда густота сетки будет определяться только параметром h.
Приближённое решение удобно представить в виде вектора с компонентами: . Точное сеточное решение представляется аналогичным вектором:
и также представим в виде векторов:
Количество компонент этих векторов равно .
Введём целую постоянную и заметим, что величины , , и принадлежат векторному пространству . Рассмотренный пример показал, что практически любую дифференциальную краевую задачу можно представить в виде (1.2.1). При этом Lu и f будут представлять собой вектор-функции.
Нормы. Погрешность приближённого решения. Сходимость. Порядок сходимости
Обозначим через нормированное векторное пространство, которому принадлежат точное и приближённое сеточные решения, а через - нормированное векторное пространство, которому принадлежат величины и . Нормы элементов v, введенные в этих пространствах, будем обозначать и соответственно. Нормы в векторном пространстве можно вводить разные, и от их выбора будут зависеть свойства разностной схемы, описываемые ниже. Везде далее норма в пространстве будет выбираться по формулам или .Норму в пространстве мы будем указывать особо для каждой рассматриваемой задачи.
Погрешностью приближённого сеточного решения называется величина .
Для того чтобы можно было получить приближённое решение с заданной точностью, необходимо, чтобы погрешность приближённого решения стремилась к нулю при . Это свойство получило название сходимости. Дадим его развёрнутое определение.
Пусть существует положительное вещественное число H, такое, что существует единственное решение разностной краевой задачи . Если
, (1.3.1)
то говорят, что решение разностной краевой задачи сходится к решению дифференциальной краевой задачи при .
Если существуют положительные постоянные C и p, такие, что выполняется неравенство
, (1.3.2)
то говорят, что приближённое решение сходится к точному при с p-м порядком относительно h. Из условия (1.3.1), очевидно, следует равенство (1.3.2).
Разность
(1.3.3)
называется невязкой разностной схемы на точном решении дифференциальной краевой задачи. Напомним, что и принадлежат к нормированному векторному пространству . Величины и , очевидно, также будут принадлежать .
Величиной невязки называется её норма в этом пространстве:
. (1.3.4)
Пусть существует положительное вещественное число H, такое, что существует единственное решение разностной краевой задачи . Если
, (1.3.5)
то говорят, что разностная схема аппроксимирует задачу на её точном сеточном решении . Если, сверх того, найдутся вещественное положительное число и положительное число p, такие, что будет выполнено неравенство
, (1.3.6)
то говорят, что разностная схема аппроксимирует задачу на её точном сеточном решении с порядком p относительно h (или с порядком ).
Устойчивость
Пусть существует положительное вещественное число H, такое, что существует единственное решение разностной краевой задачи . Эта разностная схема называется устойчивой на паре пространств , если существуют положительные постоянные и , такие, что и , удовлетворяющего условию , разностная краевая задача
(1.4.1)
имеет единственное решение , причём
(1.4.2)
Устойчивость разностной схемы означает, что малому возмущению правой части разностной схемы отвечает малое возмущение решения разностной краевой задачи. Это внутреннее свойство разностных схем, не имеющее никакого отношения к исходной дифференциальной краевой задаче. Поэтому исследовать устойчивость несколько легче, чем исследовать сходимость. Если оператор является линейным (), то определение устойчивости можно переформулировать.
Дадим определение устойчивости для линейных разностных схем.
Разностная схема с линейным оператором называется устойчивой на паре пространств , если существует положительная постоянная , такая, что и разностная краевая задача
(1.4.3)
имеет единственное решение , причём
. (1.4.4)
Понятия аппроксимации и устойчивости связаны с понятием сходимости и позволяют облегчить её исследование. Эта связь устанавливается следующей теоремой.
Теорема 1
Если разностная краевая задача аппроксимирует дифференциальную краевую задачу с порядком и является устойчивой на паре пространств , то приближённое решение сходится к точному сеточному решению с порядком p относительно h.
Доказательство:
Из того, что разностная краевая задача аппроксимирует дифференциальную краевую задачу, следует, что .По определению этого предела для положительного числа (из определения устойчивости) найдётся положительное число H, такое, что будет выполнено неравенство . Здесь учтено, что h положительно, а норма неотрицательна. Зададим любое h из и положим . Тогда и, согласно(1.4.2), разностная краевая задача
будет иметь единственное решение . Заметим, что правая часть этого уравнения и, следовательно, выполняется равенство . Это означает, что является решением этой же разностной краевой задачи, а поскольку решение этой задачи единственно, . Тогда из(1.4.18) получим:
.
производная аппроксимация краевой задача
Из того, что разностная краевая задача аппроксимирует дифференциальную краевую задачу с порядком , следует, что . Отсюда . Что и требовалось доказать.
Доказанная теорема позволяет проводить исследование сходимости приближённого решения к точному в 2 этапа. Вначале находится порядок аппроксимации разностной схемы, а затем доказывается её устойчивость. Как показывает пример 4, определение порядка аппроксимации разностных схем особого труда не составляет. Более того, обычно решается более сложная задача - это задача построения разностной схемы с заданным порядком аппроксимации. Один из методов её решения мы и рассмотрим в следующем параграфе.
Глава 2. Решение смешанной краевой задачи для гиперболического уравнения разностным методом
2.1 Общая постановка задачи
Рассмотрим общую постановку смешанной краевой задачи для гиперболического уравнения.
В области D={0<y<Y, б<x<в} найти дважды непрерывно дифференцируемую функцию , которая в этой области удовлетворяла бы уравнению:
( 2.1.1)
-точное решение уравнения.
А на границе Г области D при y=0 - начальным условиям:
(2.1.2)
И при - одному из трех граничных условий:
а) условия первого рода
; (2.1.3)
б) условия второго рода
(2.1.4)
в) условия третьего рода (2.1.5)
Где - известные функции.
Коэффициенты подчинены естественным условиям
Условия (2.1.3) и (2.1.4) являются частным случаем условий (2.1.5)
2.2 Смешанная краевая задача с граничными условиями третьего рода
Уравнение
(2.2.1)
задано в области D={0<y?Y<+?, б<x<в}
Начальные условия:
(2.2.2)
Граничные условия третьего рода:
(2.2.3)
Предположим смешанная краевая задача (2.2.1)- (2.2.3) имеет единственное решение в области , где Г-контур области D, и это решение вместе с производными до 4- го порядка включительно непрерывно в области
Выберем прямоугольную равномерную сетку, положив
Получаемую при этом сеточную область разобьем на два множества: множество внутренних узлов,
и множество граничных узлов,
Граничные условия на прямых заменим по формулам полиномиального численного дифференцирования:
(2.4)
Разностные граничные условия аппроксимируют граничные условия с погрешностью порядка
На основании формул численного дифференцирования получаем схему, аппроксимирующую граничную задачу с погрешностью
(2.5)
Где
Замечание. Если то разностная схема аппроксимирует граничную задачу с погрешностью
Алгоритм:
Найти приближенное решение на нулевом слое:
Найти приближенное решение на первом слое:
Найти приближенное решение на втором слое для узлов с номерами
Найти приближенное решение на втором слое при
Найти приближенное решение на остальных слоях
Достаточным условием для устойчивости по начальным данным разностной схемы является ограничение, налагающее на шаги h и l:
Данный алгоритм реализован в программе smesh_giperb на языке программирования С++, листинг которой приведен в приложении.
Описание программы:
Исходные данные:
int M которые задают количество узлов по оси OX
float alfa, betta, Y задают прямоугольную область (
Вся программа состоит из функций. Опишем для чего предназначена каждая из них.
double f(double x,double y)-задает функцию f(x,y).
double fi(double x), double psi(double x)- задаются функции fi(x)и psi(x) из начальных условий.
double tau1(double y), double tau2(double y), double w1(double y), double w2(double y), double sigma1(double y), double sigma2(double y)- задаются функции tau1(y), tau2(y),sigma1(y),sigma2(y),w1(y),w2(y) из граничных условий.
void zapis_sloya(int nomer)- функция,записывающая номер слоя.
void zapis_v_file(float x)- функция, записывающая значение приближенной функции u(x,y) в узлах на слое.
main()- основное тело программы, в которой реализовывается разностная схема. Изначально вычисляется значение на нулевом слое, затем на первом, далее на всех остальных. Для вычисления например 2го слоя используются значения на нулевом и первом, которые хранятся в массивах u0 и u1 соответственно. Значения же третьего слоя записываются в массив u2. Для вычисления на третьем слое используются значения на первом и втором, которые хранятся в массивах u1 и u2 соответственно. Значения же третьего слоя записываются в массив u0. Для вычисления на четвертом слое используются значения на втором и третьем слоях, которые хранятся в массивах u2 и u0 соответственно. Значения же третьего слоя записываются в массив u1. И так далее до последнего слоя. Выбор буферного массива реализуется оператором switch (octatok), где аргумент octatok- остаток от деления номера слоя на 3.
Проверим правильность работы программы на конкретном примере.
Рассмотрим cмешанную краевую задачу (2.2.1)- (2.2.3).
Она имеет точное решение при указанных ниже начальных, граничных условиях и функции f(x,y) в области D={0<y?Y=1<+?, 0=б<x<в=1}.
Начальные условия:
Граничные условия:
Данное уравнение имеет точное решение , поэтому мы можем найти погрешность приближенных значений искомой функции в узлах разбиения. Возьмем определенный узел (0.6,0.8)
Выберем M=10, N=20, следовательно , h=0.1, l=h/2=0.05 получаем
Приближенное решение |
Точное решение |
Погрешность |
|
1,304615736000000 |
1,269482393459680 |
0,035133342540324 |
Сгущаем сетку в 2 раза M=20, N=40,,, получаем
Приближенное решение |
Точное решение |
Погрешность |
|
1,287504077000000 |
1,269482393459680 |
0,018021683540324 |
Сгущаем сетку в 4 раза M=40, N=80, ,, получаем
Приближенное решение |
Точное решение |
Погрешность |
|
1,278385997000000 |
1,269482393459680 |
0,008903603540324 |
Сгущаем сетку в 8 раза M=80, N=160,, , получаем
Приближенное решение |
Точное решение |
Погрешность |
|
1,273945808000000 |
1,269482393459680 |
0,004463414540324 |
Сгущаем сетку в 16 раза M=160, N=320, , , получаем
Приближенное решение |
Точное решение |
Погрешность |
|
1,271712422000000 |
1,269482393459680 |
0,002230028540324 |
Из 1-5 видно, что заданная точность достигается и погрешность уменьшается с ростом M.
Заключение
К основным результатам курсовой работы можно отнести:
Обзор литературы по теме «Решение смешанной краевой задачи для гиперболического уравнения разностным методом».
Программа «smesh_giperb», разработанная в Borland C++ Version 3.1, код которой приведен в приложении.
Список используемой литературы
1. Трубников С.В. Численные методы. Часть 3: Решение дифференциальных уравнений. Учебное пособие для студентов вузов. - Брянск: БГУ, 2005.
2. Крылов В.И. и др. Вычислительные методы, т.II. М.: Наука, 1977.
3. Самарский А.А. Теория разностных схем. М.: Наука, 1983.
4. Крылов В.И, Бобков В.В, Монастырный П.И. Численные методы, т II. M.: Наука, 1977.
5. Стефан Р.Д. C++ для "чайников", 4-е издание: Пер. с англ.: - М.: Издательский дом '"Вильяме", 2003.
6. Трубников С.В. Задачник - практикум по численным методам. Часть 4. Описание библиотеки программ. Учебное пособие для студентов вузов. - Брянск: БГУ, 2005.
7. Подбельский В.В. Язык Си++: Учебное пособие.-5-е издание - М.: Финансы и статистика, 2003.
Приложение
/* {Программа smesh_giperb предназначена для решения смешанной краевой задачи для уравнения гиперболического типа разностным методом.
Рассматривается смешанная краевая задача для дифференциального уравнения гиперболического типа:
u_xx (x,y)-u_yy (x,y)=f(x,y),0<y<Y<,alfa<x<betta
u(x,0) = fi(x), alfa<x<betta,
u_y (x,0)=psi(x)
tau1(y) u_x (alfa,y)+tau2(y)u(alfa,y)=w1(y)
sigma1(y) u_x (betta,y)+sigma2(y)u(betta,y)=w2(y)
Ищется функция u(x,y)
В прямоугольной области (alfa<=x<=betta,0<=y<=Y), вводится сетка с шагами h и l по оси x и y соответственно.
Число отрезков разбиения по оси x - M, а по оси y - N. h=(alfa-betta)/MM, l= sqrt(h*h/2) - шаги сетки.
Приближённые значения решения u(x,y) в узлеах сетки с координатами x_j=h*j и y_i=i*l (j=0,1,...,M, i=0,1,...,N) ищутся разностным методом методом и записываются в файл rezultat.txt послойно. То есть значения ?u(x?_m,y_n) вычисляются последовательно:
На временном слое 0. При n=0 и для всех m от 0 до M,
На временном слое 1. При n=1 и для всех m от 0 до M,
................................
На временном слое N. При n=N и для всех m от 0 до M.
Записываются приближенные значения решения u(x_m,y_n) в файл rezultat.txt в следующем порядке:
0 sloi
u(x_0,y_0) u(x_1,y_0) … u(x_M,y_0)
1 sloi
u(x_0,y_1) u(x_1,y_1) … u(x_M,y_1)
N sloi
u(x_0,y_N) u(x_1,y_N) … u(x_M,y_N)
Для временного хранения приближенного решения при вычислениях по рекуррентным формулам используются также три массива u0[m],u1[m]и u2[m].
В начале вычисляется приближенное решение на нулевом временном слое. При вычислении оно помещается в массив u0 записывается в файл rezultat.txt.
Затем, зная решение на нулевом слое, по рекуррентной формуле находится решение на следующем, первом слое. При вычислении оно помещается в массив u1 и записывается в файл rezultat.txt.
Затем, зная решение на первом слое по рекуррентной формуле находится решение на следующем, втором слое. При вычислении это решение помещается в массив u2 и записывается в файл rezultat.txt
................................................................
Этот процесс продолжается до тех пор, пока не будет вычислено и записано в файл приближенное решение на последнем слое.
Массивы u0,u1 и u2 используются в качестве буферов, в которые временно помещается приближенное решение на очередном временном слое до записи его в файл. */
#include <iostream.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream.h>
#include <string.h>
#include <conio.h>
char buffer[128], buffer_nomer[4];
char *copy;//указатель на переменную в которой хранится строка
FILE * fp;
char * st;
int M,N,i,j,octatok;
float alfa, betta, l,Y,NN;
double h;
# define NDEC 10
//задается функция f(x,y)
double f(double x,double y)
{
return (2*exp(x)*cos(y));
}
// задаются функции fi(x)и psi(x) из начальных условий
double fi(double x)
{
return (exp(x));
}
double psi(double x)
{x=0;
return x;
}
// задаются функции tau1(y), tau2(y),sigma1(y),sigma2(y),w1(y),w2(y) из граничных условий
double tau1(double y)
{y=1;
return y;
}
double tau2(double y)
{y=0;
return y;
}
double w1(double y)
{
return (exp(alfa)*cos(y));
}
double w2(double y)
{
return (exp(betta)*cos(y));
}
double sigma1(double y)
{y=0;
return y;
}
double sigma2(double y)
{ y=1;
return y;
}
//функция для записи в файл номера слоя
void zapis_sloya(int nomer)
{fp=fopen("d:\\rezultat.txt","a");
itoa(nomer,buffer_nomer,10);
st=new char[strlen(buffer_nomer)+1];
strcpy(st,buffer_nomer);
strcat(st,"sloi ");
fprintf(fp, "\n\r" );
fprintf(fp, st );
fprintf(fp, "\n\r" );
fclose(fp);
delete st;
}
//функция для записи в файл значений на слое ?u(x?_m,y_n)
void zapis_v_file(float x)
{fp=fopen("d:\\rezultat.txt","a");
gcvt(x,NDEC,buffer);
copy=new char[strlen(buffer)+1];//строка длиной 'длина строковой переменной buffer+1',плюс 1 для нулевого символа
strcpy(copy,buffer);
strcat(copy," ");
fprintf(fp, copy );
fclose(fp);
delete copy;//освобождение памяти
}
main()
{
cout<<"введите число узлов на оси OX";cin>>M;
cout<<"vvedite alfa";cin>>alfa;cout<<endl;
cout<<"vvedite betta";cin>>betta;cout<<endl;
cout<<"vvedite Y";cin>>Y;
h=(betta-alfa)/M;cout<<h<<endl;//вычисление и вывод шага h
l=h/2;cout<<l<<endl;// вычисление и вывод шага l
octatok=fmod(Y,l);
if (octatok==0) NN=Y/l;
else NN=floor(Y/l); // вычисление N
N=NN;cout<<N;
float *u0;
float *u1;
float *u2;
u0=(float*) malloc(M*sizeof(float));
u1=(float*) malloc(M*sizeof(float));
u2=(float*) malloc(M*sizeof(float));
fp=fopen("d:\\rezultat.txt","w");
//вычисление и запись в файл нулевого слоя
zapis_sloya(0);
for (j=0;j<=M;j++)
{
u0[j]=fi(j*h);
zapis_v_file(u0[j]);
}
//вычисление и запись в файл первого слоя
zapis_sloya(1);
for (j=0;j<=M;j++)
{
u1[j]=psi(j*h)*l+u0[j];
zapis_v_file(u1[j]);
}
/*вычисление и запись в файл все с остальных слоев i=2,..N
Схема трехслойная, для вычисления одного слоя необходимы значения функции в узлах на предыдущих 2-х слоях.
Для вычисления, например 2го слоя используются значения на нулевом и первом, которые хранятся в массивах u0 и u1 соответственно. Значения же третьего слоя записываются в массив u2.
Для вычисления на третьем слое используются значения на первом и втором, которые хранятся в массивах u1 и u2 соответственно. Значения же третьего слоя записываются в массив u0.
Для вычисления на четвертом слое используются значения на втором и третьем слоях, которые хранятся в массивах u2 и u0 соответственно. Значения же третьего слоя записываются в массив u1.
И так далее до последнего слоя.*/
for (i=2;i<=N;i++)
{
octatok=fmod(i,3);
switch (octatok)
{//вычисляются значения на слоях с i=3,6,9,...
case 0:
zapis_sloya(i);
for (j=1;j<M;j++)
u0[j]=2*u2[j]+l*l*(u2[j+1]-2*u2[j]+u2[j-1])/(h*h)-u1[j]-l*l*f(j*h,i*l);
u0[0]=tau1(i*l)*u0[1]/(tau1(i*l)-h*tau2(i*l))-h*w1(i*l)/(tau1(i*l)-h*tau2(i*l));
u0[M]=sigma1(i*l)*u0[M-1]/(sigma1(i*l)+h*sigma2(i*l))+h*w2(i*l)/(sigma1(i*l)+h*sigma2(i*l));
for (j=0;j<=M;j++)
zapis_v_file(u0[j]);
break;
//вычисляются значения на слоях с i=4,7,11,...
case 1: zapis_sloya(i);
for (j=1;j<M;j++)
u1[j]=2*u0[j]+l*l*(u0[j+1]-2*u0[j]+u0[j-1])/(h*h)-u2[j]-l*l*f(j*h,i*l);
u1[0]=tau1(i*l)*u1[1]/(tau1(i*l)-h*tau2(i*l))-h*w1(i*l)/(tau1(i*l)-h*tau2(i*l));
u1[M]=sigma1(i*l)*u1[M-1]/(sigma1(i*l)+h*sigma2(i*l))+h*w2(i*l)/(sigma1(i*l)+h*sigma2(i*l));
for (j=0;j<=M;j++)
zapis_v_file(u1[j]);
break;
//вычисляются значения на слоях с i=2,5,8,...
case 2: zapis_sloya(i);
for (j=1;j<M;j++)
u2[j]=2*u1[j]+l*l*(u1[j+1]-2*u1[j]+u1[j-1])/(h*h) -u0[j]-l*l*f(j*h,i*l);
u2[0]=tau1(i*l)*u2[1]/(tau1(i*l)-h*tau2(i*l))-h*w1(i*l)/(tau1(i*l)-h*tau2(i*l));
u2[M]=sigma1(i*l)*u2[M-1]/(sigma1(i*l)+h*sigma2(i*l))+h*w2(i*l)/(sigma1(i*l)+h*sigma2(i*l));
for (j=0;j<=M;j++)
zapis_v_file(u2[j]);
break;
}
}
free(u0);
free(u1);
free (u2);
getch();
return 0;
}
Размещено на Allbest.ru
Подобные документы
Исследование конечно-разностных методов решения краевых задач путем моделирования в среде пакета Micro-Cap V. Оценка эффективности и сравнительной точности этапов получения решений методом математического, аналогового моделирования и численными расчетами.
курсовая работа [324,3 K], добавлен 23.06.2009Численный метод для решения однородного дифференциального уравнения первого порядка методом Эйлера. Решение систем дифференциальных уравнений методом Рунге–Кутта. Решение краевой задачи. Уравнения параболического типа, а также Лапласа и Пуассона.
курсовая работа [163,5 K], добавлен 27.05.2013Программа вычисления интеграла методом прямоугольников. Решение задачи Коши для дифференциальных уравнений. Модифицированный метод Эйлера. Методы решения краевой задачи для обыкновенного дифференциального уравнения. Задачи линейного программирования.
методичка [85,2 K], добавлен 18.12.2014Решение конечно-разностной задачи Дирихле для уравнения Лапласа в прямоугольной области. Погрешность замены дифференциального уравнения разностным. Использование схемы узлов при получении сеточных уравнений. Сущность метода Зайделя. Листинг программы.
курсовая работа [348,5 K], добавлен 26.04.2011Прикладной математический пакет Maple. Набор инструментов для работы с дифференциальными уравнениями в частных производных. Метод разделения переменных. Метод функций Грина. Построение формального решения на входном Maple-языке. Основные типы операций.
курсовая работа [193,2 K], добавлен 03.08.2012Графическое решение задач. Составление математической модели. Определение максимального значения целевой функции. Решение симплексным методом с искусственным базисом канонической задачи линейного программирования. Проверка оптимальности решения.
контрольная работа [191,1 K], добавлен 05.04.2016Понятие разностных схем, сеточная функция, пространство и нормы. Аппроксимация дифференциальных операторов. Корректность разностной схемы и сходимость. Одномерное уравнение переноса с переменными и постоянными коэффициентами. Схема бегущего счета.
дипломная работа [388,3 K], добавлен 11.11.2009Краткий обзор решения транспортных задач. Экономическая интерпретация поставленной задачи. Разработка и описание алгоритма решения задачи. Построение математической модели. Решение задачи вручную и с помощью ЭВМ. Анализ модели на чувствительность.
курсовая работа [844,3 K], добавлен 16.06.2011Постановка задачи линейного программирования и формы ее записи. Понятие и методика нахождения оптимального решения. Порядок приведения задач к каноническому виду. Механизмы решения задач линейного программирования аналитическим и графическим способами.
методичка [366,8 K], добавлен 16.01.2010Теоретические основы вариационного исчисления и область применения метода. Практическое решение задач оптимизации методом вариационного исчисления. Нахождение экстремума функционала и частных производных. Составление дифференциального уравнения Эйлера.
лабораторная работа [99,5 K], добавлен 16.12.2014