Сохрани и опубликуйсвоё исследование
О проекте | Cоглашение | Партнёры
Выпускная квалификационная работа 01.03.02 Прикладная математика и информатика
Источник: Белгородский государственный университет - национальный исследовательский университет (НИУ «БелГУ»)
Комментировать 0
Рецензировать 0
Скачать - 753,5 КБ
Enter the password to open this PDF file:
-
могательные ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ» ( НИУ « Б е л Г У » ) ИНСТИТУТ ИНЖЕНЕРНЫХ ТЕХНОЛОГИЙ И ЕСТЕСТВЕННЫХ НАУК ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И ПРИКЛАДНОЙ МАТЕМАТИКИ Кафедра общей математики ИССЛЕДОВАНИЕ ОДНОЙ МОДЕЛИ ДВИЖЕНИЯ ВЯЗКОЙ ЖИДКОСТИ Выпускная квалификационная работа студента очной формы обучения направления подготовки 01.03.02 Прикладная математика и информатика 4 курса группы 07001206 Курганов Андрей Викторович Научный руководитель доцент кафедры Некрасова И.В. Рецензент к.ф-м.н., доц. БЕЛГОРОД 2016
СОДЕРЖАНИЕ ВВЕДЕНИЕ.............................................................................................................. 3 1 Вспомогательные предложения......................................................................... 7 2 Аналитический обзор........................................................................................... 7 2.1 История применения метода.......................................................................... 8 2.2 Описание метода............................................................................................. 14 2.3 Простые примеры применения метода Галеркина................................... 18 3 Корректность периодической начально-краевой задачи для уравнения Стокса....................................................................................................................... 22 3.1 Постановка задачи............................................................................................. 22 3.2 Основные результаты....................................................................................... 23 3.3 Доказательство теоремы 1..................................................................................25 3.4 Доказательство теоремы 2 ..................................................................................25 3.5 Доказательство теоремы 3 ..................................................................................25 4 Программная реализация...................................................................................... 29 4.1 Выбор среды разработки................................................................................ 29 4.1.1 Описание языка программирования........................................................... 30 4.2 Описание программной реализации................................................................32 4.3 Проверка работоспособности программного продукта.............................. 45 ЗАКЛЮЧЕНИЕ............................................................................................................ 54 СПИСОК ЛИТЕРАТУРЫ...........................................................................................59 ПРИЛОЖЕНИЕ 62
ВВЕДЕНИЕ Исследование краевых задач для параболических уравнений является од ним из важных разделов современной теории дифференциальных уравнений с частными производными. Интерес к этому типу уравнений объясняется как теоретической значимостью получаемых результатов, так и их важными прак тическими приложениями. Параболические уравнения и системы уравнений являются основой ма тематических моделей разнообразных процессов: конвекции и диффузии, в том числе уравнение диффузии и его частный случай - уравнение теплопро водности; движения жидкости и газов, описываемых системой уравнений Навье - Стокса; воздействия электромагнитного поля на заряженные частицы. Исследование методов решения краевых задач для параболических урав нений было рассмотрено в работах О.А. Олейник, О.А. Ладыженской, В.П. Ми хайлова, В.А. Солонникова, Н.Н. Уральцевой. Актуальность исследований таких краевых задач обоснована как внут ренней логикой развития соответствующих разделов теории дифференциаль ных уравнений в частных производных, так и ясными перспективами исполь зования этих задач при математическом моделировании различных процессов. В настоящей работе рассматривается периодическая начально - краевая задача для уравнений Стокса. Такого рода задачи возникают при усреднении дифференциальных уравнений, описывающих процессы фильтрации вязкой жидкости в упругом пористом теле, где пористый скелет представляет собой периодическое повторение ячейки малого размера . Решение периодической начально - краевой задачи на ячейке необходимо для построения коэффициентов усредненной системы уравнений. 3
Для поставленной задачи определяется понятие обобщенного решения, получены априорные оценки решения, доказывается корректность. Для обос нования существования обобщенного решения задачи используется метод Галёркина. Методы Г алёркина давно применяются для решения дифференциальных уравнений с частными производными. К настоящему времени они применены при решении многочисленных за дач механики конструкций, динамики сооружений, гидромеханики, теории гидродинамической устойчивости, акустики, магнитной гидродинамики, тео рии теплообмена, теории распространения микроволн, теории переноса ней тронов и т.д. Объектом исследования является нестационарная система Стокса, опи сывающая движение вязкой жидкости. Цель работы состоит в доказательстве корректности поставленной зада чи, и программной реализации с использованием такой среды программирова ния как Visual Studio Express и языка на котором будет реализованная програм ма С# . Для достижения поставленной цели необходимо решить ряд задач: - изучить литературу по проблеме исследования; - изучить аналитические и численные методы исследования уравнений параболического типа; - исследовать разрешимость поставленной задачи; - разработать программу в среде Visual Studio Express. 4
Выпускная квалификационная работа изложена на 69 страницах, состоит из введения, заключения, четырех разделов, списка использованных источни ков и приложения. Введение содержит общие сведения о работе, актуальность выбранной темы, объект, цель и задачи. Первый раздел имеет вспомогательный характер. В нем изложен ряд тео ретических понятий и предложений, используемых в основном тексте при ис следовании краевых задач для дифференциальных уравнений. Во втором разделе проводится краткий обзор исследований, связанных с темой работы дается краткое описание схемы метода Галеркина, приведен ряд примеров, иллюстрирующих применение метода. В третьем разделе рассматривается начально - краевая периодическая за дача, моделирующая движение вязкой жидкости. Приводится определение обобщенного решения задачи. Получены априорные оценки решения. Доказана однозначная разрешимость задачи. В четвертом разделе описывается среда разработки программного при ложения и язык программирования, программная реализация. Разработана программа для численного решения поставленной задачи. Здесь мы ограничимся рассмотрением дифференциального уравнения с част ными производными параболического типа, когда эти уравнения являются ли нейными, а искомая функция зависит от двух переменных. В качестве области моделирования рассмотрен канал с квадратным поперечным сечением. В заключении отражены общие выводы по работе, значимость разра ботки, достигнутые задачи. В приложении представлен текст программы и результаты выполнения тестовых расчетов. 5
1 Вспомогательные предложения Этот раздел имеет вспомогательный характер. В нем мы изложим ряд по нятий и предложений функционального анализа, которые используются в ос новном тексте при исследовании краевых задач для дифференциальных урав нений. Областью в пространстве Rn называется открытое множество Q (как правило связное), граница Г которой локально представима в виде (1.1) У п = / ('К)(Уъ-,Уп-\)- Напомним, что границей области называется множество Г = Q \ Q , где множе ство Q есть замыкание множества Q. Локальность означает, что границу Г можно погрузить в объединение областей Qk , к = 1,2, так что в каждой из областей Q.k найдется ортогональная система координат у = (уъ ..., у п), в кото рой граница представима в виде (1.1). Если функции f m - раз непрерывно дифференцируемы, то граница Г называется границей класса С т. Пусть граница Г области Q является границей класса С1. Тогда в каждой точке границы определен вектор внешней нормали v = (vb ..., v„) и для всякой непрерывно дифференцируемой в замыкании области Q функции и(х) спра ведлива формула Гаусса - Остроградского (1.2) см. Олейник [3, с. 14]. Пусть непрерывная в замыкании области Q функция и непрерывно диф ференцируемо зависит от параметра т:и = и(х,т). Тогда интеграл 6
I (т) = ju( x , т)dx есть непрерывно дифференцируемая функция параметра т и справедлива фор мула дифференцирования интеграла по параметру Для одной пространственной переменной справедлива формула дифферен цирования по верхнему и нижнему пределу: (1.4) Линейное пространство В называется линейным нормированным про странством, если для каждого элемента х< еВ определено неотрицательное чис ло ||х||, называемое нормой элемента x , такое что 1) |Ы| = 0=>л; = 0, 2) jXx\\ - |A||jc||, VA, е R, Последовательность элементов (1.5) называется сходящейся в В, если в В найдется элемент х такой, что \xm —jc|| —>0 при т мость последовательности элементов Последовательность элементов 4„ оо. Будем обозначать сходи к элементу х символом х т -> х . называется фундаментальной в В, ес ли для всякого положительного е найдется номер N , такой что при т,п> N бу дет выполнено неравенство \\хт - х п\ < г . Нормированное пространство называется полным (Банаховым), если всякая фундаментальная последовательность является сходящейся. 7
Множество M называется всюду плотным в пространстве B , если для вся кого элемента х< еВ найдется последовательность элементов из М , сходя щаяся к элементу x . Нормированное пространство B называется сепарабельным, если в нем существует счетное всюду плотное множество. Линейное пространство E называется Евклидовым, если в нем для каждой пары элементов х , у е Е определено число (х, у ) , называемое скалярным произ ведением , такое что 1) (х, х) > 0, (х, х) = О<^>х = О, 2) (х,у) = (у,х), (1.6) 3) (Хх,у) = Х(х,у) VA, е R. Всякое Евклидово пространство является нормированным, если положить 1 ||х|| = (х, х)2 . Таким образом, полное сепарабельное евклидово пространство называется Гильбертовым пространством. Два элемента х , у е Е называются ортогональными , если (х,у) = 0. Множество M называется ортонормированным, если оно ортогонально и все его элементы имеют норму равную единице. Счетное ортонормированное множество пространстве Е , если для всякого элемента ,е 2,... называется базисом в xgE т S m = Ъ ск Ч - > х п р и т - > со , к=1 где ск =(х,ек). 8
Теорема 1. В Гильбертовом пространстве существует хотя бы один б а зис. Последовательность элементов 4» . Евклидова пространства Е называется слабо сходящейся к элементу х е Л , если (хт - х,у) -» о , m -> «э для всех у е Е . Множество M Евклидова пространства E называется слабо компактным, если всякая последовательность элементов этого множества содержит слабо сходящуюся подпоследовательность. Теорема 2. В Гильбертовом пространстве всякое замкнутое ограниченное множество является слабо компактным. Совокупность всех измеримых функций и(х), з с е П с й " , с конечным инте гралом i (1.7) Vfi для р > 1 образует Банахово пространство Lp (Q), если норму в нем опреде лить равенством (1.7). Доказательство этого факта базируется на неравенстве Коши i i 2 Ju{x)v{x)dx (1.8) Q для p = 2, и его обобщении - неравенстве Гёльдера 1 Jw(x)v(x)<ix ^\u(x)\P dx Р 1 j]v(x)|?fi&C 9 1 Р Q для рФ 2 , см. Ладыженская [4, с. 35]. 9 1 , , — + —= 1 ч (1.9)
Как известно, если нормированное (Евклидово) пространство не полное, то существует полное нормированное (Евклидово) пространство, в котором дан ное пространство будет всюду плотным. Эта операция называется замыканием неполного пространства. Для определения пространства Соболева w l(Q ) рассмотрим множество всех непрерывно дифференцируемых функций и(х) в области Q с нормой 1 f х. \и\2 +|Vm| )dx J(|w| . (1.10) Замыкание этого пространства в норме (1.10) называется пространством Со болева см. Ладыженская [3, с. 54]. Функция и (х)т пространства 1Л(Q) обладает в области Q обобщенной производной уг е Lx(Q) по переменной хг, если dx = 0 ! для произвольной бесконечно дифференцируемой функции ф, равной нулю на границе области Q . Как обычно, функцию vi обозначим общепринятым симво лом частной производной: v, = du/dxi . Можно показать, что элементами пространства w\ с; являются все функ ции м ё ! 2 i). имеющие обобщенные производные ди/дх{ e L 2 0 ^ i = 1 , 2 , п. Теорема 3. Пространство w\ О является Гильбертовым пространст вом. Линейные дифференциальные уравнения второго порядка параболи ческого типа 10
Линейным параболическим уравнением второго порядка называется диф ференциальное уравнение СН . (3 U . СН . г. — = Z . aij(x t ) - - + L ai (x 0 ^ " + a(x t)u + f ( x t), dt i j =i J dxidxj i=i dxi в котором функции ciy(x,t), at (x,t), a(x,t), /1 1 1 \ (1.11) j = l, 2, ...,n и fix,I) считаются задан ными, матрица aL (x>0 симметрична и строго положительно определена: п 0 ~ >°, a o = c o n s t, Щ = £)1 ( 1-12) i,J=1 Условие (1.12) называют условием строгой параболичности для уравнения (1.11), см. Михайлов [5, с. 339]. Частным случаем уравнения (1.11) является уравнение теплопроводности ди = KZ к ПХд—^ |н- к А и . Т" = ^ (1.13) ^ id x ; Положительная постоянная к называется коэффициентом температуропро водности. Для нахождения решения уравнения (1.11) в пространстве Rn характерна задача Коши, когда дополнительно к уравнению (1.11) в пространстве Rn при t > о задается начальное условие при t = о : и(х,0) = и0(х) . (1.14) Задача (1.11), (114) называется задачей Коши. Если решение уравнения (1.11) ищется в некоторой ограниченной области Q с= Rn , то дополнительно к начальному условию и(х,0) = и0(х), i e Q , 11 (1-15)
нужно задать краевые условия на границе Г области Q . В частности, краевое условие u(x,t) = u°(x,t), х е Г , t > 0, (1-16) называется первым краевым условием, или условием Дирихле. Соответственно, задача (1.11), (115), (1.16) называется первой начально-краевой задачей. Если вместо условия Дирихле (1.16) рассмотреть на границе Г краевое ус ловие я Vu{x,t)-V{x) = — = vQ{x,t), х е Г , t > 0, где V = (vb (1-17) v п) - единичный вектор внешней нормали к границе Г, которое называется вторым краевым условием или условием Неймана, то соответст вующая задача (1.11), (115), (1.17) называется второй начально-краевой за дачей. Наконец, если на границе Г для определения решения уравнения (1.11) за дается третье краевое условие ^ - + b(x,t)u = vX(x,t), х е Г , t > 0, (1.18) то задача (1.11), (115), (1.19) называется третьей начально-краевой задачей. 12
2 АНАЛИТИЧЕСКИЙ ОБЗОР 2.1 История применения метода Целый ряд методов, предназначенных для решения самых разнообразных задач математической физики и техники, базируется на идеях советских ученых И.Г. Бубнова (1913) и Б.Г. Галеркина (1915). Они оказались чрезвычайно пло дотворными после перехода к массовому использованию ЭВМ в научно инженерной практике. Идеи Бубнова-Галеркина помогли развитию вариацион ных методов, методов взвешенных невязок, наконец, способствовали разработ ке метода конечных элементов и таких его многочисленных модификаций, как, например, спектральный метод или метод граничных элементов. Методы Галеркина к настоящему времени применены при решении мно гочисленных задач механики конструкций, динамики сооружений, гид ромеханики, теории гидродинамической устойчивости, акустики, магнитной гидродинамики, теории теплообмена, теории распространения микроволн, тео рии переноса нейтронов и т.д. Применение метода к исследованию задач устойчивости гидродинами ческих течений было реализовано Г. И. Петровым, который доказал сходимость метода Г алёркина для отыскания собственных значений широкого класса урав нений, включая уравнения для неконсервативных систем, такие, как например уравнения колебаний в вязкой жидкости [8]. В гидродинамике наиболее эффективно метод Галёркина работает в за дачах о конвекции, в силу их самосопряжённости. Задачи о течениях таковыми не являются, и сходимость метода при неудачном выборе базиса может быть сильно затруднена. На основе подходов Галеркина проводятся исследования обыкновенных дифференциальных уравнений, уравнений в частных производных и ин тегральных уравнений; стационарные и нестационарные задачи, а также задачи 13
на собственные значения. По существу, задача, для которой можно выписать определяющее уравнение, может быть решена с помощью одной из разновид ностей метода Галеркина. Метод Галеркина был хорошо известен в русской научной литературе по работам самого Галеркина и его коллег. Этот метод впервые привлек внимание западных ученых благодаря работам Дункана, посвященных динамике авиаци онных конструкций. Бикли [9] применил метод Г алеркина к решению задачи о нестационарной теплопередаче путем рассмотрения эквивалентного электриче ского контура, получив решения с помощью метода Галеркина. Бикли сравнил их с решениями, построенными методом коллокаций и методом наименьших квадратов. В результате сочетания метода Галеркина и представлений Фурье были развиты спектральные методы Галеркина, которые при специальном способе учета нелинейных членов позволили обратиться к прямому моделированию турбулентности [9] и к глобальным методам прогноза погоды (Бурке 10]). В этих задачах особенно то, что сложность физической формулировки сочетается с простотой формы границ. Существует тесная взаимосвязь между методом Галеркина и таким ва риационным методом, как метод Рэлея - Ритца. Эта взаимосвязь приобрела особое значение в связи с разработкой метода конечных элементов. Первоначально метод конечных элементов рассматривался как специ альная инженерная процедура для построения матричных решений задач о рас чете напряжений. Вскоре стало очевидно, что этой процедуре можно дать вари ационную интерпретацию, если ввести в рассмотрение потенциальную энергию системы. Установление связи с методом Галеркина позволило распространить процедуры с конечными элементами на те области, где ни один вариационный принцип не имеет очевидной силы; это касается многих проблем газодинамики и теории теплопередачи [11]. Можно утверждать, что метод Галеркина с конеч14
ными элементами является наиболее распространенным среди разнообразных методов конечных элементов. Метод Галёркина имеет несколько основных усовершенствованных ва риантов: Метод Галеркина - Петрова - разложение решения производится по од ному базису, а ортогональность невязки необходима по другому. Метод Г алёркина - Канторовича - позволяет свести уравнения в частных производных к обыкновенным дифференциальным уравнениям. Например, в двумерной задаче решение представляется в виде: V(X У) = H bnan(х)Фn(У) > n тогда процедура Галёркина проводится применительно лишь к одним функциям (а п(х) либо ф„(у)). В итоге получается система обыкновенных диф ференциальных уравнений, для решения которых существуют эффективные численные методы. Некоторые особенности метода Галеркина станут очевидными после рас смотрения простых примеров. 15
2.2 Описание метода 2.2.1 Основа метода Первым шагом в реализации метода Г алёркина является выбор набора ба зисных функций, которые удовлетворяют граничным условиям, а также обра зуют полную систему в пределе бесконечного количества элементов базиса. Конкретный вид функций определяется из специфики задачи и удобства работы. Часто в качестве базисных функций выступают тригонометрические функции, ортогональные полиномы (полиномы Лежандра, Чебышёва, Эрмита). Решение представляется в виде разложения по базису: n x) = X в д * (х ) • k=i Затем приближенное решение подставляется в исходное дифференци альное уравнение, и вычисляется его невязка. Для однородного уравнения: L Х а *Ф*(*) к=1 Для неоднородного уравнения :Щ Х ) L{u) = f(x ) . невязка будет иметь вид N(x) = L (u ) - f( x ) . Далее выдвигается требование ортогональности невязки к базисным функциям, то есть: b ^N(x)q>k(x)dx = 0. a Откуда получается однородная система уравнений для коэффициентов в разложении, и удается приближенно найти собственные значения задачи. 16
2.2.2 Решение первой начально-краевой задачи для уравнения тепло проводности с одной пространственной переменной На отрезке 0 < х < 1 при t > 0 рассмотрим следующую начально-краевую задачу ди dt д 2и = к — + /(* , 0 , Ф ,0) = и0(х), дх2 u(0,t) = u°(t), u(l,t) = ul (t). (2.1) Представляя решение u(x, t) этой задачи в виде и(х, I) = v(x, I) + и0(!) + x(ux(t) - и0(/)), Сведем задачу (2.1) к аналогичной задаче, но уже с однородными (нулевыми) условиями на границе области (в точках х = 0 и х = 1): dv d2v — = K— r + f ( x ,t ) , v(0,0 = 0, v(l,0 = 0, dt (2.2) dx2 (2.3) v(x,0) = U q ( x ) . Идея метода Галёркина заключается в преобразовании дифференциального уравнения (2.2) в интегральное тождество и в специальном выборе прибли женных решений. Вместо уравнения (2.2) мы рассмотрим интегральное тождество ( Дот + к dx dx) *\ f ( x ’t ) '9(x)dx > (2 4 ) которое получим после умножения уравнения теплопроводности на произ вольную функцию ф(х), равную нулю при х = 0 и х = 1, и интегрирования по ча стям в слагаемом, содержащем производные по пространственной переменной (перебросили дифференцирование с функции v(x,t) на пробную функцию ср(х)). 17
Для гладких функций v(x,t) тождество (2.4) эквивалентно уравнению (2.1). Чтобы показать это, достаточно провести в (2.4) обратную операцию интегри рования по частям (перебросить дифференцирование с пробной функции ф(л-) на функцию v(x, t )) и воспользоваться тем, что тождество 1 jF(x) •ф(x)dx = 0 \/ф о влечет F(x) = 0. О Далее рассмотрим подпространство Wl(0,1) пространства Wl(0,1) , состоя щее из всех функций, равных нулю при х = 0 и х = 1. В качестве базиса в этом пространстве выберем функции фа(х) = sinfea, к = 1,2,... О Выбор решения интегрального тождества (2.4) из пространства W(0,1) ав томатически удовлетворяет краевым условиям в (2.2). Далее ослабим тре бования на пробные функции - будем считать их элементами пространства О Wl(0,i) • Согласно методу Галёркина ищутся приближенные решения vN (x, t) инте грального тождества (2.4) в виде N vN (x t) = Ъ ск (t)«?k (x) > k=1 (2.5) удовлетворяющих интегральному тождеству (2.4) для первых N функций О феЖгЧоД) базиса 1f ~ N р. N а Л 1 f “ I—-ф*(*) + к -1----- ^ Л = \ f ( x ,t) - q k(x)dx, k = l,2 ,...,N ox ox 0J dt 0J 18 (2.4)
и начальным условиям (2.3) приближенно: N N v (-*,0) = ^ W k (x) k=1 (2.7) В (2.7) uo = | uo(x)9 k (x)dxo (2.8) Пользуясь ортогональностью базиса задачу (2.6) - (2.7) можно переписать в ви де N dCk Y dWk d9rn dx = I dt dx т=\0 dx (2.9) o ck (0) - uo ■ (2.10) В силу теоремы Коши, задача Коши (2.10) для линейной системы (2.9) имеет единственное решение при всех ^>0. Таким образом, определено приближен ное решение vN(x,t) задачи (2.3), (2.4). Наличие априорной оценки dv N max -(x t ) o<t<T, dt 1 2 T1 dv N (x, t ) dxdt< dx 00 2 1 T1 T e Jl^o (x)| dx + eT j j f 2 (x, t~)dxdt, o (2.11) oo которая следует из тождеств (2.6), если k-тое тождество умножить на dck /dt и все тождества сложить. Это позволит выделить подпоследовательность {vNk}, сходящуюся слабо в L2 (o,1) вместе со своими первыми производными при всех t , 0 < / < У к функции v(pc,t). Осуществляя слабый предельный переход в тожде стве (2.6) убеждаемся, что v( x, t ) является искомым решением. 19
2.3 Простейшие приемы применения метода Галеркина. Рассмотрим технику применения метода Галеркина к решению некото рых характерных задач. В первом примере метод Галеркина используется для того, чтобы привести обыкновенное дифференциальное уравнение к системе алгебраических уравнений. Во втором примере иллюстрируется применение метода Галеркина с целью приведения параболических дифференциальных уравнений в частных производных к системе обыкновенных дифференциаль ных уравнений, зависящих от времени. 1.2.1 Обыкновенное дифференциальное уравнение Рассмотрим обыкновенное дифференциальное уравнение (1.1) % -у =0 ах с граничным условием у = 1 при л- = 0. Приближенное решение ищется в об ласти о < х < 1. Точное решение имеет форму у = е*. Приближенное (пробное) решение представляется в виде N . y a = 1+Ё aj x J , j=1 (1.2) где главный член вводится для удовлетворения граничному условию. После этого пробные функции xj позволяют удовлетворить однородным граничным условиям. (Обычно практикуемым приемом при реализации традиционного ме тода Галеркина является представление пробного решения в форме, обеспечи вающей удовлетворение граничным условиям). Это позволяет получить макси мально точное решение при заданном числе неизвестных N. Формулу (1.2) можно также переписать в виде 20
N . y a = l l aj x J , j =0 (1 3 ) где коэффициент a0 выбран так, чтобы удовлетворить граничному условию, то есть а0 = 1. Подстановка формулы (1.2) в уравнение (1.1) дает выражение невяз ки N R = -1 + Х aj (jxJ-1- xJ ). j=1 (1.4) Составляя внутреннее произведение, определяемое согласно (0.5), получим (Т?,хА-1) = 0. Если записать это для каждого k = l (1.5) то получится система уравнений, за писываемая в виде MA = D , (1.6) где A - вектор, составленный из неизвестных коэффициентов a j . Элемент мат рицы D дается выражением d k = (1, хк~1) = . Элемент матрицы M соответствует формуле mh- = (jx J - x J, хх-к~1л ) =- — L * j+ k -l 3_ . j+ k Очевидно, точность решения быстро возрастает вместе с увеличением числа N . Здесь видна очень важная особенность традиционного метода Галеркина, со стоящая в том, что высокая степень точности может быть достигнута за счет алгебраических усилий. Числовая характеристика этой особенности может быть дана путем вычисления дискретной L - погрешности, соответствующей разности между приближенным и точным решениями: ||_у- у а ||2 d . Погрешность в норме L2 ( L2 - погрешность) определяется формулой 21
1/2 Jly-yaf dx (1.8) Дискретная L2 - погрешность определяется как y -y . °ll2,d L 'ЕЬ'-Уа)'} 1=1 1/2 (1.9) 1.2.2. Течение вязкой жидкости в канале w = 0 х=1 w=0 w=0 У к У=-1 У=1 ------ ► X w = 0 х=-1 Рис.1. Рассмотрим канал, имеющий квадратное поперечное сечение (рис.1). Для описания установившегося течения вязкой жидкости в таком канале служит проекция уравнения импульсов на ось z, то есть u dw dw dw 1 dp Гd2w ^ d2w + d2w^ 1-v hw 1---- —= V dx dy dz p dz dx2 + dy2 + dz2 22 (1.10)
Вдали от выходного или входного сечения течение остается неизменным в направлении оси z; тогда уравнение (1.10) принимает вид 1 dp Ц dz d2w d2w дх2 ду7 При течении такого рода величина dp/dz постоянна. Приведение к безразмер ной форме записи за счет надлежащего выбора масштабов преобразует (1.11) к виду d2w d2w дх2 ду2 (1.12) — ^ + — ;г + 1 = 0 . то есть к виду уравнения Пуассона для функции w . Граничные условия имеют вид (1.13) w = О при х = ±1 и у = ± 1 Если пробное решение основано на тригонометрических функциях, то воз можно для каждой пробной функции удовлетворение граничным условиям. Таким образом, положим N N V—' .71 . 71 п w = 2.1 2.1 aij COSi-xCOSJ —y 2 2' i=1,3,5j=1,3,5 V—' (1.14) Подставляя формулу (1.14) в уравнение (1.12), получим невязку R= f 71 \ 2 N .71 .71 Z Z aij cosi-xcos j —y x 2 i=1,3,5j=1,3,5 2 2 N f .71 <rr\ 2 2 1 (1.15) Метод Галеркина позволяет получить алгебраические уравнения для коэф фициентов aij путем составления внутренних произведений ^ 71 71 ^ 2 2 ) R, cosi — x c o s / —у v = 0 , / = 1 ,3 ,5 ,...; / = 1 ,3 ,5 ,.... ’ ’ ’ 23 (1.16)
Обращаясь к примеру, приведенному в 1.2.1, видим, что из уравнений типа (1.16) получается система уравнений, которую и следует разрешить от носительно неизвестных коэффициентов. Применительно к данному примеру специальный выбор пробных функций позволяет определить все aij непосред ственно. А именно аи = + VЛ 2 Vd2 + j 2) ) Избавление от необходимости решения системы уравнений стало результатом выбора таких пробных функций, которые являются ортогональными в рассмат риваемой области. Такой выбор дает важные преимущества. Применение мето да Галеркина с тригонометрическими пробными функциями приводит к таким же уравнениям и решениям, как и применение метода Фурье с конечным чис лом членов разложения ([5]). Подстановка выражений (1.17) в формулу (1.14) дает искомое решение w rya = 8 Z Z 2— ^ cosi^ xcosJ^ y . 2 2 \TZ 2 J i=1,3,5J=1,3,5 iJ(i + J ) (1.18) Точное решение для безразмерного расхода q было дано в книге [6]. Расход q связан со скоростью wa соотношением q = W wa (x, y )dxdy . (119) -и Вычисление правой части дает q= 1 ■гг2 \71 х z . i=1,3,5J=1,3,5 i J (i + J ) а » ) Решения могли бы быть получены также и с другими подходящими пробными функциями. Например, Финлейсон [7] использовал представление 24
N w ^ Y . ai (1 -x2) ' (1 -y2)J . J=1 (1.21) Использование пробного решения в таком виде, как (1.21) потребовало бы раз решения системы уравнений типа (1.6) относительно неизвестных коэф фициентов aJ . Увеличение числа N требует полного обновления набора неиз вестных коэффициентов aJ . В противоположность этому применение ортого нальных функций позволяет проводить расчет коэффициентов aiJ независимо от предшествующих коэффициентов. 25
3. КОРРЕКТНОСТЬ ПЕРИОДИЧЕСКОЙ НАЧАЛЬНО-КРАЕВОЙ ЗАДАЧИ ДЛЯ УРАВНЕНИЯ СТОКСА 3.1. Постановка задачи Рассмотрим единичный куб Y = (ОД) х (ОД) х (ОД) с= R3 , моделирующий твер дое тело. Пусть область Y f , заполненная вязкой жидкостью такова, что Граница у = SYf n Y есть липшицева поверхность (см. рис. 2). Рассмотрим следующую периодическую начально-краевую задачу для скорости жидкости d W ( y ,t) /d t в области Yf , состоящую из системы дифферен циальных уравнений Стокса: dW d 2W dt 2 = УУ V v dt W = 0, -Q I 26 y e Y f x(0,T) (3.1)
начально-краевых условий JV(y,0) = JV0(y), у eYf , (3.2) W (y ,t) = О, у еух(0,Г), (3.3) и условий 1-периодичности по пространственной переменной у на границе dYf П 5 7 ДЛЯ фуНКЦИИ Ж . Здесь!) *r d W dW У> dt 2V y \ dt / v dt j j - симметрическая часть градиента, I - единичная матрица. Обозначим через 1 L2((0,T); W2 ,п (Yf )) пространство функций i PCM) е L2 ((О, Т), W 2 (Yf У) , 1-периодичных по переменной у . Определение 1. Обобщенным решением задачи (1.3) - (3.3) называется i вектор-функция W (у, t) е I 1((О, Г); W 2 ,п (Гу)), удовлетворяющая интегральному тождеству '0 ПY ОТ ог dy dt + И 0J Y D \y ^W (л ) : D ^ п 1№ = 0 от (y )n (y ,0)dy (34) оУ для любой вектор-функции ij(y,t) е W 2,n(YT) > соленоидалъной ( divtj = 0) в об ласти Yf и равной нулю при t = Т. Здесь A :B = tr(ABT), /) и й - квадратные матрицы, YT =Yx(0,T) - цилиндр. Для доказательства существования обобщенного решения задачи (3.1) (3.3) находятся решения вспомогательных задач в более широкой области, сла бо сходящиеся к решению исходной задачи. 27
Для этого введем положительный параметр X. Задачу (3.1) - (3.3) будем рассматривать как предельную при X - » оо для следующей вспомогательной за дачи с параметром X , определенной в области 7 = (0,1) х (0,1) х (0,1) { 1\ dwx /лБ У Qi + dt j dt2 ~ у ' V V ) d2W x ^ ( -x (y ))D i,W X , Q + AVv ■W x =0, (3.5) W \ y , 0 ) = x W 0( y ) (3.6) с условиями 1-периодичности по переменной у на границе oYf глдУ для функ ции W х . Здесь хОО - характеристическая функция Yf в 7 , то есть Х(у) = [0, у ^ Ys, |1, y e Yf . Определение 2. Обобщенным решением задачи (3.5)- (3.6) называется вектор-функция W x(y,t)<El}((0,Ty,wln (Y)), удовлетворяющая интегральному тождеству f I \ dW х дц dydt + л JD dt dt y ,_ sT , 0WX : D 4y, ц 'dydt + X \div------ divndydt + ^ J T dt + X j (1 - X(y))WXndyd t = j x W0 (y )n(y,0)dy YT YT (3.7) 1,1 для любой вектор-функции ij(y,t) e W 2,п(Хт) u равной нулю при t = T . Теорема 1. Задача (3.5) - (3.6) мож ет иметь не более одного обобщенного решения из L2((0, T);W21n (Y)). 28
Теорема 2. Обобщенное решение задачи (3.5) - (3.6) существует, един ственно и для него справедлива оценка: 2 dW' шах О<t<TY dt 2 dwx dy + /и | D У: dt T V / i \2 j- d W dydt + X J div r V dt J dydt + (1.10) dydt < C i. YT где Cl - постоянная, не зависимая от параметра X. Теорема 3. При всех положительных значениях X существует единствен ное обобщенное решение задачи (3.1) - (3.3) и для него справедлива оценка: dW dW шах dy + /и { Ц у , о<t<T, dt dt YT 2 dydt < C0 где С0 - некоторая постоянная, не зависимая от геометрии области. 29 (111)
3.2 Доказательство теоремы 1 Предположим, что задача (3.5) - (3.6) имеет два обобщенных решения, то гда их разность w будет удовлетворять интегральному тождеству T Я T 0 Yf ^ 0 Yy J j w ~ dy dt + T JD & w j D4y, ц dydt+X^ Jdivw divndydt 0 Yf (3.8) x \ J(1 - x(y))w ndydt = 0 0 Yf 0 1Д для любой вектор-функции ij(y ,t) е W 2,n(JT) и равной нулю при t = Т . Таким образом, функция w есть обобщенное решение задачи (3.5) - (3.6) с однородным начальным условием W ( y ,0) = 0. Выберем в качестве n (y , t ) функцию w (y , t ). Получим интегральное тожде ство — J iv2(y,0)dyd( + /л JVw : Vwdydt+X \^divw\2d y d t+ 2 Y Yf Yf + X j ( l - x ( y ) ) \w f dydt = 0, Yf из которого следует, что U = 0, то есть w = 0. 30 (3.9)
3.3 Доказательство теоремы 2 Для обоснования существования обобщенного решения задачи (3.5) - (3.6) будем использовать метод Галеркина. Выберем в пространстве W П (Y) фундаментальную ортонормированную в L2(Y) систему линейно независимых вектор-функций &к(у) (будем называть их базисными функциями), таких что (<Pi ,<Pj)= \<Pi (y)<Pj (y)dy = s i,j Y Пусть конечномерное подпространство H N представляет собой линейную обо лочку выбранных базисных функций. Приближенное решение v N(y,t) = dWN(y,t)/dt будем искать в виде: N = Ъ Ст^)<Рт(У) • т=1 (3-12) (Индекс X будем опускать для удобства обозначений). Функция VN(y,t ) должна удовлетворять начальному условию (3.13) У/,(у,о) = У ? (у ). Функция V ^ (y) является ортогональной проекцией вектора xV0 (y) на подпро странство H n . Следовательно, (j) = k / ( j ) + z, где z есть ортогональная со ставляющая вектора Уд (у) относительно H N . Поскольку N Уо (у )= Y .K ,< P jy), т=1 где 31 (у) е Я у , то
bm ( t ) = ( / ( у ) , < Р т ( у ) 4 ( 7 ) = i v o ( y ) - z , ^ m ( y ) = = { v 0 (y),<Pm(y)j t<pm(y)2 Учитывая, что (j ) , окончательно получим (3.14) K i t ) = i v 0 (y),(pm{ 'm' y ) = j/Vff (y)<Pm(y)dy■ ~ Y Коэффициенты разложения ст(t) в формуле (3.12) определяются из усло вия ортогональности в L2 (Y) невязки dV a y . v ) = — - М ^Л -+ v e + « Л 'О - х( У)) dt подпространству H N , то есть из условия = °> V p m( y ) e H N , т = 1,2, . . . , N . Таким образом, что Q + XdivV = 0 , для определения коэффициентов с т(t) имеем систему уравнений: / 6V ^ J ~ £ ~ <Рт+И^У\ : V^,„ +M ivVNdivcpm +/.(1 - х (y))VN<pm dy = 0. YV от (1.15) У Подставляя в эти уравнения выражения для VN , получим систему N обыкно венных линейных дифференциальных уравнений первого порядка с постоян ными коэффициентами: N ё « ( 0 + Х с* ( 0 k=1 I : V % + Xdiv<pmdiv(pk +X{\~x{y))<pm(pk 'cly = 0, (3.16) ck(°) = bm, m = l,2 ,...,N . Полученная система при заданных начальных условиях имеет единственное 1TV решение. Следовательно, функция VN {y,t) = Z ot=ic™(0^ot(j) ляется однозначно. 32 W = l, 2,.. опреде
Докажем теперь ограниченность последовательности галеркинских при ближений HjvCv.O в норме пространства L2((0, T y,w\.n (Y)) ГИГ = J И +S i=1 dV 2 (3.17) dydt. YT Умножим уравнение с номером т из системы (3.16) на с т(t ) и просуммируем по т от 1 до N . Получим N Х X ^ м +^ т=1 =1 Y : УКдгф +А ф + Y (3.18) ^ | П - / ( у ) ^ | 2Ф = о, Y Представим первое слагаемое в следующем виде X стст = 1 d J1Vn | 2dy т =1 2 dt y и проинтегрируем уравнение (3.18) от 0 до t : ^ Лк ^(у> 0 |2Ф + /« J v k w : V V у dy dr +Х j]divVN |2 dydx - У, Т, 1 I + ^ | П - /00>)|*лг|2ф * - = Y 2 Wo* - (3.19) dy. Y Поскольку вектор V ^ является ортогональной проекцией %V0 на подпро странство H N , то rN 0 N xVo . Следовательно, i j k ' ' 2rfv<C,, Q = c o n st . Окончательно получаем 33
dV-,N гmax ч .. .rj-, *f|K i i Ji2dy + ju j 0 <t<T YTi=1 Y 2 dydt +X | HivVN ^ dydt - fy i (3.20) т + л \ ( l - Х(у))\Ук\2dydt ^ С ъ Yт а, следовательно max Пк^|2ф <Q 1 1 Г1 w ^ -T 7 0<t<T 3 E 7r *=l •> Y 5F;N ” j j 3v,- Q dydt < — И — J divVn ^ dydt < — Yт < Ci (3.21) X Yт Так как ц > 0, Я > 0, имеем ограниченность последовательности И\- в норме (1.17). Из известной теоремы функционального анализа (см. раздел 1, теорема 2) следует слабая компактность множества функций ^ следовательности И\- . Таким образом, из по можно выделить подпоследовательность, слабо схо дящуюся к некоторой функции V(y,t). Докажем теперь, что эта функция являет ся искомым обобщенным решением задачи, то есть удовлетворяет ин0и тегральному тождеству (1.7) для любой вектор-функции ij(y,t) e W 2 ,n(YT) , рав ной нулю при t = Т . Для этого достаточно установить выполнение этого усло0 1,1 вия для некоторого счетного всюду плотного множества в W 2,п (YT). Докажем, что интегральное тождество (1.7) справедливо для любой функ ции tjn вида 34
N Vn (У>0 = X 'd m(f)<PmGOm=1 (b.22) Здесь dm(t) - произвольные функции из L2(0, T). Зафиксируем N ' < N . Умножим каждое уравнение системы (3.15) на свою гладкую функцию d m(t) , просуммируем по m от 1 до N' и проинтегрируем по t от 0 до T . Получим Т tfy \dl( \ — }~rjX'dy +/и jVFjv : V rjN'dy +Я \divVNdivr]N<dy o r Y Y (3.23) + Л J((l - х ( у ) У ы 1?ы'Ф) = 0. Y После интегрирования по частям в первом слагаемом, получим dr] \VN(y,t)\— 1 dydt +u JVKjv : VrjN>dydt +X ^divVNdivrjN>dydt ■ d ■ЛJ(0-XiyWNVN'dydt =\V0(y)rjN,(y,0)dy. (3.24) Y YT Зафиксируем функцию r/N’(y,t ) и перейдем к пределу при N —>сс по выбранной подпоследовательности. Получим интегральное тождество для функции V ( y,t) - j v (у, t) dydt +и JVK : Vrjyd yd t +/. ^divVdivrjN>dydt-1~ dt v v + Л J((l - X ( y W v N'dydt = \VQ{y)T]N'{y,0)dy YT (3.25) Y верное для любой функции ijN>(y,t) вида (3.22). Такие функции всюду плотны в 0 1,1 пространстве W 2,п (YT), поэтому интегральное тождество выполняется и для любой функции 7j(y,t) е W 2,n(YT) . Таким образом, lim VN = V (y,t ) и есть искомое обобщенное решение заN— >сс дачи. 35
3.4 Доказательство теоремы 3 Лемма 1. Решение V X вспомогательной задачи (3.5) - (3.6) слабо в L2(YT) сходится к решению V задачи (3.1) - (3.3). Доказательство. Для каждого фиксированного X мы нашли решение V X вспомогательной задачи (3.5) - (3.6). Очевидно, что функция V X как предел по следовательности Ум также удовлетворяет неравенствам (3.21). При А->со эти неравенства только усиливаются, поэтому последовательность $ х является ограниченной в норме (3.17), то есть из нее снова можно выделить сходящуюся подпоследовательность. Выбирая подпоследовательность, для которой будем сохранять прежнее обозначение, получим, что решение VX вспомогательной задачи сходится слабо в L2(Yt ) к решению V : Vх V. (3.26) Кроме того мы получаем слабую сходимость в L2(YT) У Vх к V V : V V X -> VV (3.27) Неравенства (3.21) дают сильную в L2(YT) сходимость последовательно стей divVX и (1-х)V X к нулю: divVX — »о, (3.28) (1-X)VX ^ 0 ( 3 ,2 9 ) Из (3.27) и (3.28) следует, что d iv V = 0 36 (3.30)
из (3.26) и (3.28) следует V(y,t) = о, (3.31) Краевое условие v(y,t) = о, у & у вытекает из утверждений (3.31), (3.26) и приo1 надлежности функции V пространству L2((0, T);W 2,п (Y)). Рассмотрим X | d iv V X : divtjdydt YT интегральное И тождество (3.7) /. J(1 - /( y ^ V '^ jd y d / обращаются В при нуль Л->оо. Члены В СИЛу ТОГО, ЧТО YT divtj = 0, функция х(у) ограничена, функцию tj(y, t) продолжаем нулем в Ys . Таким образом, функция V (y ,t ) = lim V х удовлетворяет интегральному тожX —>со деству (3.4). Неравенство (3.20) дает нам требуемую оценку (3.11). 37
4. П рограм м ная реализация 4.1. Выбор среды разработки В качестве среды разработки был выбран Visual Studio Express для Desktop2013 одна из редакций Visual Studio Express. Visual Studio- линейка продуктов компании Microsoft включающих интегрированную среду разработ ки программного обеспечения. Данные продукты позволяют разрабатывать как консольные, так и приложения с графическим интерфейсом, а так же веб приложения [8]. Включает в себя редактор исходного кода, встроенный отлад чик (может работать как отладчик исходного кода и как отладчик машинного уровня). Остальные встроенные инструменты включают в себя редактор форм для упрощения создания графического интерфейса, веб-редактор, дизайнер классов и дизайнер схемы базы данных. VisualStudioExpress - набор легковесных сред разработки, представляю щих собой урезанную версию VisualStudio. Она включает в себя набор инстру ментов, в отличие от полных версий: отсутствует дизайнер классов и многие другие инструменты, а так же поддержка плагинов и удаленных баз данных[4]. Ключевыми особенностямиexpress-версий являются: - ориентирование на цель разработки, а не на язык; - необходимость регулярно продлевать регулярную регистрацию для индивидуальных разработчиков, если разработка на express-версии ведется не с целью обучения; - поддержка компиляции 64-битного кода; - поддержка unit-текстов. VisualStudioExpress для Desktop используется для разработки обычных десктоповых (классических) приложений и позволяет воспользоваться всеми преимуществами Windowsс помощью конструкторов ХЛМЬпроизводительной среды разработки и различных языков программирования, в том числе С#, VisualBasic и C++. Десктоповые приложения - это программы, логика которых 38
требует наличия оператора, содержащие в себе всю полную функциональность и способные работать отдельно на любой машине изолированно от других при ложений. 4.1.1 Описание язы к а програм м ирования В качестве языка программирования был выбран C#. C# - типобезопас ный объектно-ориентированный язык, предназначенный для разработки разно образных безопасных и мощных приложений, выполняемых в среде .NETFramework. C# относиться к семье языков с С-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java^brn: имеет статическую типи зацию, поддерживает полиморфизм, перегрузку операторов (операторов явного и не явного приведения типа), делегаты, атрибуты, события, свойства, обоб щенные типы и методы, итераторы, анонимные функции с поддержкой замыка ний, LINQ (набор функций, расширяющих возможности синтаксиса C#), ис ключения, комментарии в формате XML. С помощью языка С#можно создавать обычные приложения Windows, XML-веб-службы, распределенные компоненты, приложения «клиент-сервер», приложения баз данных и др. VisualC# предоставляют развитый редактор кода, конструкторы с удобным пользовательским интерфейсом, встроенный отлад чик и другие средства, упрощающие разработку приложений. 4.2. Описание программной реализации Данная программа предназначена для применения метода Галеркина к уравнений Стокса для прямоугольной поверхности. В данном программном приложении будут присутствовать: график функции, область входных данных (область прямоугольника), область вычислений и кнопка начала вычислений, а так же вывод окна оповещений при некорректном вводе данных. Вид запущен ной программы в ожидании ввода данных представлен на рисунке (рис.1) 39
Рис. 1 - Запуск программы. Мы видим окно ввода данных и кнопку начало решений. В момент напи сания программы им были присвоены соответствующие действия, а именно для окон ввода данных обработка введенных данных, и проверка их на правиль ность ввода, и является ли текст числом. Блоки программы отвечающие за вво димые данные: private void button1_Click(object sender, EventArgs e) //обработка входных данных; вывод результата после запуска решения 40
{ graphics.Clear(pictureBox1.BackColor); if (!IsNumber(textBox1.Text) || !IsNumber(textBox2.Text) || !IsNumber(textBox3.Text) || !IsNumber(textBox4.Text)) { MessageBox.Show("Неправильный ввод!"); return; } float ax = float.Parse(textBox1.Text); float bx = float.Parse(textBox2.Text); float ay = float.Parse(textBox3.Text); float by = float.Parse(textBox4.Text); float x = pictureBox1.ClientSize.Width / 2; float y = pictureBox1.ClientSize.Height / 2; Font font = new Font("Arial", 6, FontStyle.Regular); Pen pen = new Pen(Color.Black, 1); float Mx = (x - 2 * R) / (Math.Abs(ax) > Math.Abs(bx) ? M ath.Abs(ax) : Math.Abs(bx)); float My = (y - 2 * R) / (Math.Abs(ay) > Math.Abs(by) ? M ath.Abs(ay) : Math.Abs(by)); if (My < graphics.MeasureString(" 1", graphics.MeasureString("1", font).Height; DrawAxes(pen, font, R, Mx, My, x, y); pen.Color = Color.Blue; 41 font).Height) My =
PointF[,] grid = DrawGrid(pen, ax, bx, ay, by, H, K, x, y, Mx, My); float[,] U = GetFunction(ax, bx, ay, by, H, K); int m = (int)(1 + Math.Ceiling((bx - ax) / H)); int n = U.Length / m; richTextBox1.Text=""; font = new Font("Arial", 3, FontStyle.Regular); for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { richTextBoxl.Text += string.Format("u({0}, {1}) = {2:F15}", grid[i, j].X, grid[i, j].Y, U[i, j]) + "\n"; graphics.DrawString(string.Format("{0:F3}", U[i, j]), font, Brushes.Green, x + grid[i, j].X * Mx, y - grid[i, j].Y * My + 3); } } private bool IsNumber(string text) //проверка, является ли текст числом { try { float.Parse(text); return true; } 42
catch (FormatException) { return false; } } Соответственно при вводе текста не являющимся числом, программа не сможет корректно работать и известит пользователя о том что была допущена ошибка (рис.2). Рис.2 -извещение о неправильном вводе 43
Часть кода отвечающая за вывод представленного окна на (рис.2) пред ставлена ниже: graphics.Clear(pictureBoxl.BackColor); if (!IsNumber(textBox1.Text) || !IsNumber(textBox2.Text) || !IsNumber(textBox3.Text) || !IsNumber(textBox4.Text)) { MessageBox.Show("Неправильный ввод!"); return; } Как мы видим из кода, программа не выполнит запрос на решение и по сле подтверждения ошибки вернет нас на начало по средствам цикла. После че го нам просто необходимо вести данные удовлетворяющие установленному условию и продолжить работу. Рассмотрим область для построения осей и выполнения дальнейшего ре шения, опираясь на них. Как мы могли заметить в окне программы по мимо окон ввода и кнопки запуска , есть область отвечающая за вывод данных реше ния поставленной задачи, и большая область для построения графика, которая находится выше всех имеющихся объектов. Часть кода для рисования осей имеет большой объем, потому что график занимает большую часть окна про граммы и является основной частью данной программы. private void DrawAxes(Pen pen, Font font, int indentation, float scaleX, float scaleY, float middleX, float middleY) //рисует оси координат { pen.SetLineCap(LineCap.NoAnchor, LineCap.ArrowAnchor, DashCap.Triangle); graphics.DrawLine(pen, 10, middleY, 2 * middleX - 10, middleY); 44
graphics.DrawLine(pen, middleX, 2 * middleY - 10, middleX, 10); pen.SetLineCap(LineCap.NoAnchor, LineCap.NoAnchor, DashCap.Flat); graphics.DrawString("x", font, Brushes.Red, 2 * middleX - 10, middleY + 8); graphics.DrawString("y", font, Brushes.Red, middleX + 5, 10); graphics.DrawString("0", font, Brushes.Black, middleX + graphics.MeasureString("0", font).Width, middleY + 3); int n = 1; for (float i = middleX + scaleX; i < 2 * middleX - 10; i += scaleX, n++) { graphics.DrawLine(pen, i, middleY + 3, i, middleY - 3); graphics.DrawString(n.ToString(), font, Brushes.Black, i - graphics.MeasureString((-n).ToString(), font).Width / 2, middleY + 8); graphics.DrawLine(pen, i - 2 * scaleX * n, middleY + 3, i - 2 * scaleX * n, middleY - 3); graphics.DrawString((-n).ToString(), font, Brushes.Black, (i - 2 * scaleX * n) - graphics.MeasureString((-n).ToString(), font).Width / 2, middleY + 8); } n = 1; for (float i = middleY - scaleY; i > 10; i -= scaleY, n++) { 45
graphics.DrawLine(pen, middleX - 3, i, middleX + 3, i); graphics.DrawString(n.ToString(), font, Brushes.Black, middleX + graphics.MeasureString(n.ToString(), font).Width, i); graphics.DrawLine(pen, middleX - 3, i + 2 * scaleY * n, middleX + 3, i + 2 * scaleY * n); graphics.DrawString((-n).ToString(), font, Brushes.Black, middleX + graphics.MeasureString((-n).ToString(), font).Width, i + 2 * scaleY * n); } } Здесь мы наблюдаем, как программа, опираясь на введенные данные, строит ось X и Y ,имея начальную точку отчета «0». Однако для этого куда есть определенные ограничения , виде отступов от края окна, это сделано для удоб ство использования, и соответственно чтобы график не выходил за отведенное ему место. Данное ограничение установлена с помощью представленного ниже кода: const int R = 10; //отступ от края при рисовании осей Graphics graphics; Из которого мы видим , что отступ от края составляет 1 см, и программа ни как не может нарушить данное ограничение. Итак, выполняя финальную часть работы, программа должна нарисовать сетку по заданным координатам, вывести ее на график , и показать нам найден ные точки в области отвечающей за вывод данных. 46
private PointF[,] DrawGrid(Pen pen, float ax, float bx, float ay, float by, float h, float k, float middleX, float middleY, float scaleX, float scaleY) //рисует сетку { PointF[,] Grid = new PointF[(int)(1 + Math.Ceiling((bx - ax) / h)), (int)(1 + Math.Ceiling((by - ay) / k))]; int i = 0, j = 0; Color color = pen.Color; bool drawing = true; for (float x = ax; x <= bx; x += h, i++, j = 0) { x = (float)M ath.Round(x, 1); graphics.DrawLine(pen, middleX + x * scaleX, middleY - ay * scaleY, middleX + x * scaleX, middleY - by * scaleY); for (float y = ay; y <= by; y += k, j++) { y = (float)M ath.Round(y, 1); if (drawing) graphics.DrawLine(pen, middleX + ax * scaleX, middleY - y * scaleY, middleX + bx * scaleX, middleY - y * scaleY); Grid[i, j] = PointF(x, y); graphics.DrawEllipse(pen, -1 + middleX + x * scaleX, -1 + middleY - y * scaleY, 2, 2); } 47
drawing = false; } pen.Color = Color.Red; graphics.DrawLine(pen, middleX + ax * scaleX, middleY - ay * scaleY, middleX + ax * scaleX, middleY - by * scaleY); graphics.DrawLine(pen, middleX + bx * scaleX, middleY - ay * scaleY, middleX + bx * scaleX, middleY - by * scaleY); graphics.DrawLine(pen, middleX + ax * scaleX, middleY - ay * scaleY, middleX + bx * scaleX, middleY - ay * scaleY); graphics.DrawLine(pen, middleX + ax * scaleX, middleY - by * scaleY, middleX + bx * scaleX, middleY - by * scaleY); pen.Color = Color.Red; return Grid; } private float[,] GetFunction(float ax, float bx, float ay, float by, float h, float k) { int M = (int)(1 + Math.Ceiling((bx - ax) / h)); int N = (int)(1 + M ath.Ceiling((by - ay) / k)); float E = 0.0000001F; float[][,] u = new float[2][,]; 48
u[0]=new float[M,N]; u[1]=new float[M,N]; float x, y; int i = 0, j = 0; for (y = ay; y <= by; y += k, j++) { u[0][0, j] = u[0][M - 1, j] = g(y); u[1][0, j] = u[1][M - 1, j] = g(y); } for (x = ax; x <= bx; x += h, i++) { u[0][i, N - 1] = f(x); u[0][i, 0] = f(x); u[1][i, N - 1] = f(x); u[1][i, 0] = f(x); } const int m = 6; i = 0; j = 0; float Htemp = (bx - ax) / m, Ktemp = (by - ay) / m; float[] Xtemp = new float[m]; float[] Ytemp = new float[m]; float[,] Utemp = new float[m, m]; for (x = ax; x <= bx && i < m; x += Htemp, i++) { Xtemp[i] = x; Utemp[i, m - 1] = f(x); Utemp[i, 0] = f(x); } 49
for (y = ay; y <= by && j < m; y += Ktemp, j++) { Ytemp[j] = y; Utemp[0, j] = Utemp[m - 1, j] = g(y); } int n = (m - 2) * (m - 2); float[,] A = new float[n, n]; A[0, 0] = -4; A[0, 1] = 1; for (i = 1; i < n - 1; i++) { if (i % 4 != 0) A[i - 1, i] = 1; A[i, i] = -4; if ((i + 1) % 4 != 0) A[i, i + 1] = 1; if (i - 4 > 0) A[i, i - 4] = 1; if (i + 4 < n) A[i, i + 4] = 1; } A[n - 2, n - 1] = 1; A[n - 1, n - 1] = -4; float[] B = new float[n]; B[0] = -Utemp[0, 1] - Utemp[1, 0]; B[1] = -Utemp[2, 0]; B[2] = -Utemp[3, 0]; B[3] = -Utemp[4, 0] - Utemp[5, 1]; B[4] = -Utemp[0, 2]; 50
B[5] = 0; B[6] = 0; B[7] = -Utemp[5, 2]; B[8] = -Utemp[0, 3]; B[9] = 0; B[10] = 0; B[11] = -Utemp[5, 3]; B[12] = -Utemp[0, 4] - Utemp[1, 5]; B[13] = -Utemp[2, 5]; B[14] = -Utemp[3, 5]; B[15] = -Utemp[4, 5]; Utemp = SolveSLE(A, B, Utemp, m - 2, 1); i = 1; j = 1; for (x = ax + h; x <= bx - h; x += h, i++, j = 1) for (y = ay + k; y <= by - k; y += k, j++) u[0][i, j] = L(x, y, Xtemp, Ytemp, Utemp, m); int l = 0; while (M ath.Abs(u[0][1, 1]) - Math.Abs(u[1][1, 1]) > E) { l = 1 - l; for (i = 1; i < M - 1; i++) for (j = 1; j < N - 1; j++) 51
u[l][i, j] = (u[1 - l][i + 1, j] + u[1 - l][i - 1, j] + u[1 - l][i, j + 1] + u[1 - l][i, j - 1]) / 4; } return u[l]; } private float f(float x) { return (float)(2 * M ath.Pow((x - 1.5), 2) / 3); } private float g(float y) { return 0.75F * y * y * y * (float)Math.Sin(y); } private float L(float x, float y, float[] X, float[] Y, float[,] u, int N) { float F = 0, s = 1; for (int m = 0; m < N; m++) { for (int n = 0; n < N; n++) { for (int i = 0; i < N; i++) { 52
if (i != m) s *= (x - X[i]) / (X[m] - X[i]); for (int j = 0; j < N; j++) { if (j != n) s *= (y - Y[j]) / (Y[n] - Y[j]); } } F += u[m, n] * s; } } if (float.IsNaN(F) || float.Islnfinity(F)) return L(x - 0.1F, y - 0.1F, X, Y, u, N); return F; } private float[,] SolveSLE(float[,] A, float[] B, float[,] X, int m, int offset) { int i, j, k, n = m * m; float c; for (k = 0; k < n - 1; k++) { for (i = k + 1; i < n; i++) { c = A[i, k] / A[k, k]; 53
B[i] = B[i] - (c * B[k]); for (j = k + 1; j < n; j++) { A[i, j] = A[i, j] - (c * A[k, j]); } } } X[offset + (n - 1) / m, offset + (n - 1) % m] = B[n - 1] / A[n - 1, n - 1]; for (i = n - 2; i >= 0; i--) { c = 0; for (j = i + 1; j < n; j++) { c += A[i, j] * X[offset + j / m, offset + j % m]; } X[offset + i / m, offset + i % m] = (B[i] - c) / A[i, i]; } return X; } } } 54
4.3 П роверка работоспособности программного продукта После рассмотрения составляющих программы, и выяснения некоторых ее аспектов , необходимо убедится в ее работоспособности пошагово выполняя описанные ранее инструкции. Программа имеет файл запуска с разрешением «.exe», для удобства в ис пользовании. Шаг 1. Запускаем файл программы и видим уже знакомое нам окно ожи дания команд (рис.3) Рис.3 55
Шаг 2. Вводим данные, заранее убедившись в правильности ввода, и в том что текст является числом (рис.4). Мы используем следующие координаты ( Ах= (-1); Bx= 2; Ay= (-2); By= 1;). Рис. 4 Шаг 3. Нажимаем кнопку запуска программы «Решить». Поскольку дан ные введены корректно, программа немедленно приступает к рисованию сетки на построенных осях (рис.5). Следует заметить, что чем больше интервал, тем больше времени займет прорисовка всех точек и выстраивание их, когда, не смотря на это окно ввода выдает точки и их координат не зависимо от того, бы ла ли закончена сетка, или нет. 56
Рис. 5 Как было сказано ранее, после мы имеем право завершить программу ли бо продолжить работать с ней, использовав другие данные. Можно сделать вывод, что программа работает корректно, строит необ ходимые визуальные объекты с использованием палитры цветов, для удобного восприятия, однако отказавшись от 3D модели, не удалось избежать проблем связанных с компактностью выводимой сетки на прямую зависящей от введен ных данных. Это потребовала добавления окна вывода точек координат для компенсации этой потребности. 57
ЗА К Л Ю Ч ЕН И Е В работе была рассмотрена нестационарная система Стокса, описы вающая движение вязкой несжимаемой жидкости в упругом пористом теле. Получены априорные оценки решения. Доказана однозначная разрешимость задачи. Проведен подробный анализ литературы по проблеме исследования, краткий обзор исследований, связанных с темой работы, изучены основные теоретические положения, необходимые при исследовании краевых задач для дифференциальных уравнений. Раскрыты основные особенности схемы метода Г алёркина, приведен ряд примеров, иллюстрирующих применение метода. На основании изученного теоретического материала была разработана программная реализация метода Галёркина, проанализировано ее быстродей ствие, проведен тестовый расчет, построен графики полученного численного решения. 58
С П И С О К Л И Т ЕРА ТУ РЫ 1. Meirmanov A. Derivation o f equations of seismic and acoustic wave propaga tion and equations o f filtration via homogenization of periodic structures // Journal o f Mathematical Sciences. - 2009. - 163;2 - P.111 - 172. 2. Некрасова И.В. Математические модели гидравлического удара в вязкой жидкости // Сибирские электронные математические известия. - 2012. Т. 9. - С.274 - 293. - http://semr.math.nsc.ru/v9/p227-246.pdf. 3. Олейник О.А. Лекции об уравнениях с частными производными. - М.: БИНОМ. Лаборатория знаний, 2005. - 260 с. 4. Ладыженская О.А. Математические вопросы динамики вязкой несжима емой жидкости. - М.: Наука, 1970. - 288 с. 5. Ладыженская О.А. Краевые задачи математической физики. - М.: Наука, 1973. - 408с. 6. Михайлов В.П. Дифференциальные уравнения в частных производных. М.: Наука, 1976. - 391 с. 7. Ладыженская О.А., Солонников В.А., Уральцева Н.Н. Линейные и квази линейные уравнения параболического типа. - М.: Наука, 1967. - 736 с. 8. Петров Г. И. Применение метода Галёркина к задаче об устойчивости те чения вязкой жидкости // Прикладная математика и механика. Новая се рия. - 1940. - Т. 4. - Вып. 3. - с. 3 - 11. 9. Bickley W.G. - Phil. Mag., 1941, v. 32, p. 50 - 66. 10.Orzag S.A. Numerical simulation o f turbulent flows. - In: Handbook of turbu lence, Ed. W. Frost, T.H. Moulden - New York: Plenum Press, 1977, p. 281 313. 59
11.Bourke W., McAveney B., Puri K., Thurling R. - Meth. In Comp. Phys., 1977. v. 17, p. 267 - 325. 12.Oden J.T. Finite elements of nonlinear continua. - Nev York: Mc Graw-Hill. 1972. [Перевод: Оден Дж. Конечные элементы в нелинейной механике сплошных сред. - М. Мир, 1976.] 13. Канторович Л.В., Крылов В.И. Приближенные методы высшего анализа. - М.: Физматгиз, 1962. 14. Dryden H.L., Murnaghan F.P., Bateman H. - Hydrodynamics, New York: Dover, 1956, p. 197. 15. Finlayson B.A. - Brit. Chem. Eng., 1969, v. 14, p. 179 - 182. 16. Ворович И.И. О методе Бубнова - Галеркина в нелинейной теории коле бания пологих оболочек. - Доклады АН СССР, 1956. - т. 110. - №5. - с. 723 - 726. 17. Галёркин Б.Г. Стержни и пластинки. Ряды в некоторых вопросах упруго го равновесия стержней и пластинок. // Вестник инженеров. - 1915. - т.1. - с. 897 - 908. 18. Канторович Л.В., Крылов В.И. Приближенные методы высшего анализа. - 5-е изд. - Л.-М., 1962. 19. Михлин С.Г. Вариационные методы в математической физике. - 2-е изд. - М.-Л. - 1970. 20. Флетчер К. Численные методы на основе метода Галеркина. - М. - Мир - 1988. 21. Ritz W., Neue Metode zur Losung gewisser Randwertaufgaben, «Gesellschaft der Wissenschaften zu Gottingen. Math.-physik. Klasse. Nachrichten», Got tingen, 1908. 60
22. Википедия. [Электронный ресурс]. Метод Галёркина. Режим доступа: https://ru.wikipedia.org/wiki/Метод Галёркина. 23. Википедия. частных [Электронный ресурс]. Дифференциальное уравнение в производных. Режим доступа: https://ru.wikipedia.org/wiki/ДифФеренциальное уравнение в частных пр оизводных. 61
П РИ Л О Ж ЕН И Е. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication30 { public partial class Form1 : Form { public Form1() { InitializeComponent(); graphics = pictureBox1.CreateGraphics(); } const float H = 0.2F, K = 0.2F; const int R = 10; //отступ от края при рисовании осей Graphics graphics; 62
private void button1_Click(object sender, EventArgs e) //обработка входных данных; вывод результата после запуска решения { graphics.Clear(pictureBox1.BackColor); if (!IsNumber(textBox1.Text) || !IsNumber(textBox2.Text) || !IsNumber(textBox3.Text) || !IsNumber(textBox4.Text)) { MessageBox.Show("Неправильный ввод!"); return; } float ax = float.Parse(textBox1.Text); float bx = float.Parse(textBox2.Text); float ay = float.Parse(textBox3.Text); float by = float.Parse(textBox4.Text); float x = pictureBox1.ClientSize.Width / 2; float y = pictureBox1.ClientSize.Height / 2; Font font = new Font("Arial", 6, FontStyle.Regular); Pen pen = new Pen(Color.Black, 1); float Mx = (x - 2 * R) / (Math.Abs(ax) > Math.Abs(bx) ? M ath.Abs(ax) : Math.Abs(bx)); float My = (y - 2 * R) / (Math.Abs(ay) > Math.Abs(by) ? M ath.Abs(ay) : Math.Abs(by)); if (My < graphics.MeasureString(" 1", graphics.MeasureString("1", font).Height; DrawAxes(pen, font, R, Mx, My, x, y); 63 font).Height) My =
pen.Color = Color.Blue; PointF[,] grid = DrawGrid(pen, ax, bx, ay, by, H, K, x, y, Mx, My); float[,] U = GetFunction(ax, bx, ay, by, H, K); int m = (int)(1 + Math.Ceiling((bx - ax) / H)); int n = U.Length / m; richT extB oxl.T ext-’"; font = new Font("Arial", 3, FontStyle.Regular); for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { richTextBoxl.Text += string.Format("u({0}, {1}) = {2:F15}", grid[i, j].X, grid[i, j].Y, U[i, j]) + "\n"; graphics.DrawString(string.Format("{0:F3}", U[i, j]), font, Brushes.Green, x + grid[i, j].X * Mx, y - grid[i, j].Y * My + 3); } } private bool IsNumber(string text) //проверка, является ли текст числом { try { float.Parse(text); return true; 64
} catch (FormatException) { return false; } } private void DrawAxes(Pen pen, Font font, int indentation, float scaleX, float scaleY, float middleX, float middleY) //рисует оси координат { pen.SetLineCap(LineCap.NoAnchor, LineCap.ArrowAnchor, DashCap.Triangle); graphics.DrawLine(pen, 10, middleY, 2 * middleX - 10, middleY); graphics.DrawLine(pen, middleX, 2 * middleY - 10, middleX, 10); pen.SetLineCap(LineCap.NoAnchor, LineCap.NoAnchor, DashCap.Flat); graphics.DrawString("x", font, Brushes.Red, 2 * middleX - 10, middleY + 8); graphics.DrawString("y", font, Brushes.Red, middleX + 5, 10); graphics.DrawString("0", font, Brushes.Black, middleX + graphics.MeasureString("0", font).Width, middleY + 3); int n = 1; for (float i = middleX + scaleX; i < 2 * middleX - 10; i += scaleX, n++) 65
{ graphics.DrawLine(pen, i, middleY + 3, i, middleY - 3); graphics.DrawString(n.ToString(), font, Brushes.Black, i - graphics.MeasureString((-n).ToString(), font).Width / 2, middleY + 8); graphics.DrawLine(pen, i - 2 * scaleX * n, middleY + 3, i - 2 * scaleX * n, middleY - 3); graphics.DrawString((-n).ToString(), font, Brushes.Black, (i - 2 * scaleX * n) - graphics.MeasureString((-n).ToString(), font).Width / 2, middleY + 8); } n = 1; for (float i = middleY - scaleY; i > 10; i -= scaleY, n++) { graphics.DrawLine(pen, middleX - 3, i, middleX + 3, i); graphics.DrawString(n.ToString(), font, Brushes.Black, middleX + graphics.MeasureString(n.ToString(), font).Width, i); graphics.DrawLine(pen, middleX - 3, i + 2 * scaleY * n, middleX + 3, i + 2 * scaleY * n); graphics.DrawString((-n).ToString(), font, Brushes.Black, middleX + graphics.MeasureString((-n).ToString(), font).Width, i + 2 * scaleY * n); } } 66
private PointF[,] DrawGrid(Pen pen, float ax, float bx, float ay, float by, float h, float k, float middleX, float middleY, float scaleX, float scaleY) //рисует сетку { PointF[,] Grid = new PointF[(int)(1 + Math.Ceiling((bx - ax) / h)), (int)(1 + Math.Ceiling((by - ay) / k))]; int i = 0, j = 0; Color color = pen.Color; bool drawing = true; for (float x = ax; x <= bx; x += h, i++, j = 0) { x = (float)M ath.Round(x, 1); graphics.DrawLine(pen, middleX + x * scaleX, middleY - ay * scaleY, middleX + x * scaleX, middleY - by * scaleY); for (float y = ay; y <= by; y += k, j++) { y = (float)M ath.Round(y, 1); if (drawing) graphics.DrawLine(pen, middleX + ax * scaleX, middleY - y * scaleY, middleX + bx * scaleX, middleY - y * scaleY); Grid[i, j] = PointF(x, y); graphics.DrawEllipse(pen, -1 + middleX + x * scaleX, -1 + middleY - y * scaleY, 2, 2); 67
} drawing = false; } pen.Color = Color.Red; graphics.DrawLine(pen, middleX + ax * scaleX, middleY - ay * scaleY, middleX + ax * scaleX, middleY - by * scaleY); graphics.DrawLine(pen, middleX + bx * scaleX, middleY - ay * scaleY, middleX + bx * scaleX, middleY - by * scaleY); graphics.DrawLine(pen, middleX + ax * scaleX, middleY - ay * scaleY, middleX + bx * scaleX, middleY - ay * scaleY); graphics.DrawLine(pen, middleX + ax * scaleX, middleY - by * scaleY, middleX + bx * scaleX, middleY - by * scaleY); pen.Color = Color.Red; return Grid; } private float[,] GetFunction(float ax, float bx, float ay, float by, float h, float k) { int M = (int)(1 + M ath.Ceiling((bx - ax) / h)); int N = (int)(1 + Math.Ceiling((by - ay) / k)); float E = 0.0000001F; float[][,] u = new float[2][,]; 68
u[0]=new float[M,N]; u[1]=new float[M,N]; float x, y; int i = 0, j = 0; for (y = ay; y <= by; y += k, j++) { u[0][0, j] = u[0][M - 1, j] = g(y); u[1][0, j] = u[1][M - 1, j] = g(y); } for (x = ax; x <= bx; x += h, i++) { u[0][i, N - 1] = f(x); u[0][i, 0] = f(x); u[1][i, N - 1] = f(x); u[1][i, 0] = f(x); } const int m = 6; i = 0; j = 0; float Htemp = (bx - ax) / m, Ktemp = (by - ay) / m; float[] Xtemp = new float[m]; float[] Ytemp = new float[m]; float[,] Utemp = new float[m, m]; for (x = ax; x <= bx && i < m; x += Htemp, i++) { Xtemp[i] = x; Utemp[i, m - 1] = f(x); Utemp[i, 0] = f(x); } 69
for (y = ay; y <= by && j < m; y += Ktemp, j++) { Ytemp[j] = y; Utemp[0, j] = Utemp[m - 1, j] = g(y); } int n = (m - 2) * (m - 2); float[,] A = new float[n, n]; A[0, 0] = -4; A[0, 1] = 1; for (i = 1; i < n - 1; i++) { if (i % 4 != 0) A[i - 1, i] = 1; A[i, i] = -4; if ((i + 1) % 4 != 0) A[i, i + 1] = 1; if (i - 4 > 0) A[i, i - 4] = 1; if (i + 4 < n) A[i, i + 4] = 1; } A[n - 2, n - 1] = 1; A[n - 1, n - 1] = -4; float[] B = new float[n]; B[0] = -Utemp[0, 1] - Utemp[1, 0]; B[1] = -Utemp[2, 0]; B[2] = -Utemp[3, 0]; B[3] = -Utemp[4, 0] - Utemp[5, 1]; B[4] = -Utemp[0, 2]; 70
B[5] = 0; B[6] = 0; B[7] = -Utemp[5, 2]; B[8] = -Utemp[0, 3]; B[9] = 0; B[10] = 0; B[11] = -Utemp[5, 3]; B[12] = -Utemp[0, 4] - Utemp[1, 5]; B[13] = -Utemp[2, 5]; B[14] = -Utemp[3, 5]; B[15] = -Utemp[4, 5]; Utemp = SolveSLE(A, B, Utemp, m - 2, 1); i = 1; j = 1; for (x = ax + h; x <= bx - h; x += h, i++, j = 1) for (y = ay + k; y <= by - k; y += k, j++) u[0][i, j] = L(x, y, Xtemp, Ytemp, Utemp, m); int l = 0; while (M ath.Abs(u[0][1, 1]) - Math.Abs(u[1][1, 1]) > E) { l = 1 - l; for (i = 1; i < M - 1; i++) for (j = 1; j < N - 1; j++) 71
u[l][i, j] = (u[1 - l][i + 1, j] + u[1 - l][i - 1, j] + u[1 - l][i, j + 1] + u[1 - l][i, j - 1]) / 4; } return u[l]; } private float f(float x) { return (float)(2 * M ath.Pow((x - 1.5), 2) / 3); } private float g(float y) { return 0.75F * y * y * y * (float)Math.Sin(y); } private float L(float x, float y, float[] X, float[] Y, float[,] u, int N) { float F = 0, s = 1; for (int m = 0; m < N; m++) { for (int n = 0; n < N; n++) { for (int i = 0; i < N; i++) { 72
if (i != m) s *= (x - X[i]) / (X[m] - X[i]); for (int j = 0; j < N; j++) { if (j != n) s *= (y - Y[j]) / (Y[n] - Y[j]); } } F += u[m, n] * s; } } if (float.IsNaN(F) || float.Islnfinity(F)) return L(x - 0.1F, y - 0.1F, X, Y, u, N); return F; } private float[,] SolveSLE(float[,] A, float[] B, float[,] X, int m, int offset) { int i, j, k, n = m * m; float c; for (k = 0; k < n - 1; k++) { for (i = k + 1; i < n; i++) { c = A[i, k] / A[k, k]; 73
B[i] = B[i] - (c * B[k]); for (j = k + 1; j < n; j++) { A[i, j] = A[i, j] - (c * A[k, j]); } } } X[offset + (n - 1) / m, offset + (n - 1) % m] = B[n - 1] / A[n - 1, n - 1]; for (i = n - 2; i >= 0; i--) { c = 0; for (j = i + 1; j < n; j++) { c += A[i, j] * X[offset + j / m, offset + j % m]; } X[offset + i / m, offset + i % m] = (B[i] - c) / A[i, i]; } return X; } } } 74
Отзывы:
Авторизуйтесь, чтобы оставить отзыв