Решение краевой задачи с использованием MATLAB

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

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 23.01.2015
Размер файла 133,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

функция граничный солвер дифференциальный

Данный вид уравнения представляет собой ОДУ второго порядка

Y'' = f (x,y,y'),

и граничными условиями

б • y (a) + в ? y'(a) = A, г • y(b) + д ? y'(b) = B,

где х, y - координаты;

б, в, г, д, A, B - заданные числа.

Решение этой задачи в MATLAB состоит из следующих этапов:

1) преобразование дифференциального уравнения второго порядка к системе двух уравнений первого порядка;

2) написание функции для вычисления правой части системы;

3) написание функции, определяющей граничные условия;

4) формирование начального приближения при помощи специальной функции bvpinit;

5) вызов солвера bvp4c для решения граничной задачи;

6) визуализация результата.

1) Для решения ОДУ второго порядка введем две вспомогательные функции, количество которых определяется порядком уравнения.

y1 = y, y2 = y'

Составим систему уравнений первого порядка

y1' = y2 ; y1(1) = 0

y2' = y2/x - 2/x2; y2(0,5) 2

2) Функция правой части системы зависит от x и вектора y, состоящего из двух компонентов, y(1) соответствует y1, а y(2) - y2.

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

Можно использовать функции вычисления вектора правых частей (twoode.m) и соблюдения граничных условий (twobc.m).

3) При постановке граничных условий для вспомогательных функций требуется преобразовать их так, чтобы в правых частях стояли нули. Функция, описывающая граничные условия, зависит от двух аргументов - векторов ya и yb.

В данной задаче ya(2)-2=0, yb(1)-0=0

4) Для задания начальной сетки и приближения предназначена функция bvpinit, обращение к которой в самом простом случае выглядит следующим образом:

bvpinit (начальная сетка, начальное приближение к решению).

Начальная сетка определяется вектором координат узлов, упорядоченных по возрастанию и принадлежащих отрезку [a,b]. Формирование равномерной сетки целесообразно производить функцией linspace:

linspace (a, b, n)

возвращающей вектор х из n равноотстоящих узлов между a и b, включая границы.

Заданная сетка модифицируется солвером в процессе решения для обеспечения требуемой точности. Постоянное начальное приближение задается вектором из двух элементов для функций y1 (х), y2 (х).

5) Солвер bvp4c основан на методе конечных разностей, т.е получающееся решение есть векторы значений неизвестных функций в точках отрезка (в узлах сетки). Выбор начальной сетки и приближения может оказать влияние на решение.

6) Отображаем графически приближенное решение, извлекая нужные компоненты из структуры, возвращаемой солвером (рис.1).

Листинг. Файл-функция для решения граничной задачи

function var11

% Условие

% y''(x)-y'(x)/x=-3/x^2

% y'(0.5) = 2

% y(1) = 0

% 0.5 <= x<= 1

% Решаемая задача

function dxdy = twoode(x, y)

dxdy = [y(2)

y(2)/x-2/x^2];

end

% Краевые условия

function res = twobc(ya, yb)

% ... (1) = функция

% ... (2) = производная

res = [ya(2)-2

yb(1)];

end

% Вычисляем начальные условия

% 10 линейно распределенных точек в интервале [0,5; 1}

% Вектор начальных значений для каждой точки х [y y']

solinit = bvpinit(linspace(0.5,1,10), [0 2]);

% Решаемая задача, краевые условия и начальные решения

sol = bvp4c( @twoode, @twobc, solinit);

x = linspace(0.5,1);

y1 = deval (sol,x);

figure;

hold on

plot (x,y1(1, :), 'r.-');

xlabel('x');

ylabel('y');

plot(sol.x,sol.y (2, :), 'k.:');

% вывод пояснений на график

title('Решение {\ity} \prime\prime-(1/x){\ity} \prime = -2/x^2{\it}')

legend('координаты','производная',4);

grid on;

hold off;

end

Рис. 1 График функции и ее производной в результате решения

Пояснения:

res - структура, в которой выдается решение. Ее поле res.x содержит последовательность времен t i, в которых найдены приближенные значения вектора y. Найденное решение y ( t i ) выдается в поле res.y

В отличие от задачи Коши, которая при заданных начальных условиях, как правило, имеет единственное решение, краевая задача может не иметь решения вообще, иметь конечное число решений или иметь бесконечное число решений.

Основным инструментом решения краевых задач в системе MatLab является функция bvp4c, обращение к которой в простейшем случае выглядит следующим образом:

sol=bvp4c(@f_e, @f_b, [a b], y_init);

здесь:

f_e - указатель на функцию вычисления правых частей системы ОДУ, сведенной к виду (1);

f_b - указатель на функцию ограничений, приведенную к формату f = y ( a ) ;y ( b ) Ґ = 0;

[a b] - интервал интегрирования;

y_init - начальное приближение к искомому решению;

sol - структура с полями sol.x и sol.y , в которых получается решение.

При вызове функции вычисления правых частей ей передаются текущие значения независимой переменной x и вектор текущих значений y. Она, в свою очередь, должна сформировать вектор значений dy=dx в соответствии с исходными ОДУ.

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

Как правило, для этой цели используется вспомогательная функция bvpinit с двумя векторными аргументами:

y_init=bvpinit(linspace(a,b,n),y0);

здесь:

linspace - функция, разбивающая интервал [a b] на n равных отрезков и генерирующая вектор узловых точек начальной сетки. Значение n выбирается пользователем, чаще всего задают n = 10;

y0 - вектор начальных констант, определяющий стартовые значения искомых функций на интервале [a b]. Первая константа y0(1) используется в качестве начального приближения к первой функции y1 во всех внутренних узлах сетки, вторая константа y0(2) - в качестве начального приближения ко второй функции y2 и т.д.

В случае единственного решения краевой задачи выбор n и вектора y0 особого влияния на ход решения не оказывают. Однако краевая задача может иметь не одно решение, и тогда приходится перебирать несколько вариантов задания начальных значений.

Для построения более гладкого графика найденных решений можно воспользоваться сервисной программой deval, предварительно разбив интервал интегрирования на большее количество равных отрезков (по умолчанию - 100).

Размещено на Allbest.ru

...

Подобные документы

  • Численное решение задачи Коши для обыкновенного дифференциального уравнения первого и второго порядка методом Эйлера и Рунге-Кутты и краевой задачи для ОДУ второго порядка с применением пакета MathCad, электронной таблицы Excel и программы Visual Basic.

    курсовая работа [476,2 K], добавлен 14.02.2016

  • Численный метод для решения однородного дифференциального уравнения первого порядка методом Эйлера. Решение систем дифференциальных уравнений методом Рунге–Кутта. Решение краевой задачи. Уравнения параболического типа, а также Лапласа и Пуассона.

    курсовая работа [163,5 K], добавлен 27.05.2013

  • Решение дифференциального уравнения N-го порядка методом интегрирования при помощи характеристического уравнения, методом интегрирования и операторным методом для значений аргументов при заданных начальных условиях и нулевых уравнения 4–го порядка.

    практическая работа [806,9 K], добавлен 05.12.2009

  • Основные леммы и теоремы для решения линейных интегральных уравнений методом итераций. Применение информационных технологий для вычисления функции, построение алгоритма для определения уравнения по ядру и отрезку интегрирования и правой части уравнения.

    курсовая работа [213,7 K], добавлен 27.11.2010

  • Создание математической модели бистабильной системы "нагреватель-охлаждающая жидкость". Решение задачи Коши для дифференциального уравнения второго порядка. Обзор особенностей компьютерного построения модели динамической системы развития двух популяций.

    контрольная работа [1,1 M], добавлен 20.10.2014

  • Команды, используемые при решении обыкновенных дифференциальных уравнений в системе вычислений Maple. Произвольные константы решения дифференциального уравнения второго порядка, представленном рядом Тейлора. Значения опции method при численном решении.

    лабораторная работа [47,2 K], добавлен 15.07.2009

  • Программа вычисления интеграла методом прямоугольников. Решение задачи Коши для дифференциальных уравнений. Модифицированный метод Эйлера. Методы решения краевой задачи для обыкновенного дифференциального уравнения. Задачи линейного программирования.

    методичка [85,2 K], добавлен 18.12.2014

  • Особенности работы в режиме командной строки в системе Matlab. Переменные и присваивание им значений. Комплексные числа и вычисления в системе Matlab. Вычисления с использованием функции sqrt. Неправильное использование функций с комплексными аргументами.

    дипломная работа [1,9 M], добавлен 30.07.2015

  • Решение дифференциальных уравнений с использованием классических алгоритмов численных методов Эйлера и Рунге-Кутта 4-го порядка. Команды, используемые при решении обыкновенных дифференциальных уравнений в системе вычислений. Результат работы программы.

    курсовая работа [226,6 K], добавлен 05.04.2013

  • Решение уравнения методом половинного деления. Программа в Matlab для уравнения (x-2)cos(x)=1. Решение нелинейных уравнений методом Ньютона. Интерполяция заданной функции. Решение системы линейных алгебраических и обыкновенных дифференциальных уравнений.

    курсовая работа [1,4 M], добавлен 15.08.2012

  • Написание программы для вычисления функции f(x), изображенной на графике, используя оператор if. Построение графика функции. Составление программы, вычисляющей сумму 101 из последовательно расположенных нечетных чисел. Нахождение корней системы уравнений.

    контрольная работа [694,4 K], добавлен 07.08.2013

  • Решение задачи Коши для дифференциального уравнения методом Рунге-Кутта и Адамса с автоматическим выбором шага и заданным шагом. Интерполирование табличной функции. Численное решение системы линейных алгебраических уравнений методами простой итерации.

    методичка [35,8 K], добавлен 15.03.2009

  • Суть метода Рунге-Кутта и его свойства. Решение дифференциальных уравнений первого порядка. Вычислительный блок Given/Odesolve. Встроенные функции rkfixed, Rkadapt, Bulstoer. Решения линейных алгебраических уравнений в среде MathCad и Microsoft Excel.

    курсовая работа [1,1 M], добавлен 02.06.2014

  • Обзор методов решения в Excel. Рекурентные формулы метода Эйлера. Метод Рунге-Кутта четвертого порядка для решения уравнения первого порядка. Метод Эйлера с шагом h/2. Решение дифференциальных уравнений с помощью Mathcad. Модифицированный метод Эйлера.

    курсовая работа [580,1 K], добавлен 18.01.2011

  • Расчет трансформатора питания. Численное решение нелинейных уравнений с заданной точностью и дифференциальных уравнений первого порядка. Разработка программы с использованием средств визуального программирования на алгоритмическом языке программирования.

    курсовая работа [1,2 M], добавлен 17.08.2013

  • Математическая модель задачи для исследования характера движения тела. Решение задачи Коши для системы дифференциальных уравнений первого и второго порядка. Использование метода Эйлера. Схема алгоритма, таблица идентификаторов, программа на языке Pascal.

    курсовая работа [137,9 K], добавлен 07.03.2013

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

    курсовая работа [568,3 K], добавлен 07.03.2015

  • Математическое описание задачи решения обыкновенного дифференциального уравнения численным явным методом Рунге-Кутта, разработка схемы алгоритма и написание программы в среде программирования Microsoft Visual Studio 2010. Тестирование работы программы.

    курсовая работа [1,1 M], добавлен 22.01.2014

  • Анализ предметной области объектно-ориентированного программирования. Языки Delphi, Object Pascal - объектно-ориентированная среда программирования. Основные алгоритмические решения. Решение дифференциального уравнения методом Рунге-Кутта в среде Excel.

    курсовая работа [1,5 M], добавлен 02.04.2011

  • Возможности и синтаксис команд MATLAB, листинг программы и описание цикла. Порядок составления программы вычисления коэффициентов алгебраического интерполяционного многочлена и построения сплайн-функции, "склеенной" из кусков многочленов 3-го порядка.

    лабораторная работа [30,8 K], добавлен 04.07.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.