Git Product home page Git Product logo

msu-boundaryproblem's Introduction

ПРИЛОЖЕНИЕ, РЕШАЮЩЕЕ КРАЕВЫЕ ЗАДАЧИ ДЛЯ ЛИНЕЙНЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ 2-ГО ПОРЯДКА С ПЕРЕМЕННЫМИ КОЭФФИЦИЕНТАМИ


СОДЕРЖАНИЕ:

  1. Постановка задачи.
  2. Теоретическое описание алгоритма.
  3. Взаимодействие с приложением.

1. ПОСТАНОВКА ЗАДАЧИ

Дана краевая задача для линейного дифференциального уравнения 2-го порядка с переменными коэффициентами вида y'' + p(x) * y' + q(x) * y = f(x, y). Даны также координаты отрезка [x0; x1], значения искомой функции на его концах вида y(x0) = y0 и y(x1) = y1, желаемая точность решения и начальное количество узлов. Требуется указать значения неизвестной функции y в узлах отрезка, количество которых позволяет достичь заданной точности, а также построить график этого приближенного решения. В случае, если задана функция точного решения, построить также и ее график.


2. ТЕОРЕТИЧЕСКОЕ ОПИСАНИЕ АЛГОРИТМА

Применяется метод сведения линейного дифференциального уравнения второго порядка к системе обыкновенных линейных дифференциальных уравнений первого порядка путем введения замен y = z1 и y' = z2. Полученная система состоит из двух уравнений вида z1' = z2 и z2' = -p(x) * z2 - q(x) * z1 + f(x, z1). Для решения этой системы на отрезке [x0; x1] необходимы начальные условия вида z1(x0) = y1 и z2(x0) = t. Следует отметить, что z2(x0) является значением производной на левом конце отрезка, что в данном случае не известно. Поэтому в процессе решения исходной задачи это значение варьируется для того, чтобы значение неизвестной функции на правом конце совпадало с заданным.

Для решения полученной системы дифференциальных уравнений используется неявный метод Адамса-Мултона 5-го порядка. Так как для вычисления значения каждой неизвестной функции в каждом текущем узле он требует известных значений функции в 5 предыдущих узлах, а в самом начале известно лишь одно значение - в узле 1, до запуска метода Адамса-Мултона значения функции в узлах 2, 3, 4 и 5 вычисляются с помощью классического метода Рунге-Кутты 4-го порядка. Далее запускается собственно метод Адамса-Мултона. Так как система содержит два связанных уравнения, для вычисления значения неизвестной функции в каждом уравнении системы на текущем шаге используются вычисленные значения неизвестных функций обоих уравнений на предыдущих шагах. Таким образом, результатом решения исходного уравнения 2-го порядка являются значения неизвестной функции z1, т. к. замена имеет вид y = z1.

Вычисление правильного значения производной на левом конце отрезка производится с помощью метода Ньютона. В самом начале задается некое произвольное значение производной - начальное приближение, с использованием которого решается исходная задача. Далее находится разность между вычисляемым и заданным изначально значением неизвестной функции на правом конце отрезка. Разность считается функцией, зависящей от параметра t - искомого значения производной. Метод Ньютона используется для минимизации этой функции, то есть такого значения параметра, при котором модуль разности между вычисляемым и данным изначально значением искомой функции не будет превосходить заданного значения погрешности.

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

После того как правильное значение производной на левом конце вычислено, количество узлов отрезка удваивается в соответствии с правилом Рунге апостериорной оценки погрешности численного решения обыкновенного дифференциального уравнения при p = 5 (порядок точности используемого метода Адамса-Мултона). Все вышеописанные действия повторяются на отрезке, имеющем вдвое большее количество узлов. Затем по правилу Рунге вычисляется погрешность решения при удвоенном числе узлов. Уравнение решается на удваивающемся на каждом шаге количестве узлов, пока вычисляемая погрешность Рунге не станет меньше заданного значения.

Более подробные описания функций, используемых в исходном коде приложения, содержатся в его заголовочных файлах.


3. ВЗАИМОДЕЙСТВИЕ С ПРИЛОЖЕНИЕМ

Приложение является консольным, ожидая текстовый ввод из файла и производя текстовый и графический вывод в два разных файла. Имена этих трех файлов должны быть переданы приложению при запуске в качестве аргументов. Входной файл должен быть предварительно создан. Выходные создаются при необходимости. Во входом файле через пробел задаются: левый и правый концы отрезка x0 и x1, значения неизвестной функции на левом и правом концах отрезка y0 и y1, желаемая точность и начальное количество узлов на отрезке. Все числа кроме последнего могут быть вещественными, последнее же - целое положительное.

Функция y(x), задающая точное решение, а также функции p(x), q(x) и f(x, y), задающие исходное дифференциальное уравнение 2-го порядка, определяются в файлах func.(h|cpp). Эти файлы включаются в исходный код приложения до компиляции.

После достижения погрешностью решения задачи заданного значения в выходной текстовый файл выводится начальное количество узлов на отрезке, а затем значения искомой функции в этих узлах, каждое с новой строки. Также приложение строит график полученного приближенного решения, а также точного, если оно задано. Затем график(и) выводятся в выходной графический файл. Построение графика(ов) производится с помощью библиотеки с открытым исходным кодом pbPlots. Библиотека представлена исключительно исходными файлами, уже содержащимися в проекте, никаких дополнительных заранее скомпилированных файлов для запуска приложения не требуется.

msu-boundaryproblem's People

Contributors

mvp280102 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.