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

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

ределение порядка аппроксимации разностных схем особого труда не составляет. Более того, обычно решается более сложная задача - это задача построения разностной схемы с заданным порядком аппроксимации. Один из методов её решения мы и рассмотрим в следующем параграфе.

Глава 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 на языке программирования С++, листинг которой приведен в приложении.

Описание программы:

Исходные данные:M которые задают количество узлов по оси OX alfa, betta, Y задают прямоугольную область (

Вся программа состоит из функций. Опишем для чего предназначена каждая из них.f(double x,double y)-задает функцию f(x,y).fi(double x), double psi(double x)- задаются функции fi(x)и psi(x) из начальных условий.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) из граничных условий.zapis_sloya(int nomer)- функция,записывающая номер слоя.zapis_v_file(float x)- функция, записывающая значение приближенной функции u(x,y) в узлах на слое.()- основное тело программы, в которой реализовывается разностная схема. Изначально вычисляется значение на нулевом слое, затем на первом, далее на всех остальных. Для вычисления например 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,3046157360000001,2694823934596800,035133342540324Сгущаем сетку в 2 раза M=20, N=40,,, получаем

 

Приближенное решение Точное решениеПогрешность 1,2875040770000001,2694823934596800,018021683540324

Сгущаем сетку в 4 раза M=40, N=80, ,, получаем

 

Приближенное решение Точное решениеПогрешность 1,2783859970000001,2694823934596800,008903603540324

Сгущаем сетку в 8 раза M=80, N=160,, , получаем

 

Приближенное решение Точное решениеПогрешность 1,2739458080000001,2694823934596800,004463414540