Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_Маткад.doc
Скачиваний:
7
Добавлен:
01.04.2025
Размер:
2.86 Mб
Скачать

Разностные методы решения

Методы решения дифференциальных уравнений можно условно разделить:

  • на точные;

  • на приближенные;

  • на разностные.

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

Особенности разностных методов решения дифференциальных уравнений покажем на примере одного уравнения вида (10.6)

решение которого определяется на отрезке .

Метод Эйлера. Примером простейшего разностного метода является метод Эйлера, или метод ломаных. Рассмотрим задачу Коши для уравнения (10.6). Разобьем отрезок [x0, xk] на n малых интервалов так, что получим некоторую последовательность (или сетку) значений аргумента x: x0<x1<x2< … <xn-1<xn. Для упрощения задачи будем полагать, что длина шага h=xi+1xi – постоянная величина (в общем случае это не так).

Разностная схема метода Эйлера для уравнения (10.6) имеет вид

. (10.9)

Э то рекурентное соотношение позволяет по предыдущему значению yi получить последующее yi+1. Для начала счета используется начальное значение y0 в точке x0.

Метод Эйлера имеет простую геометрическую интерпретацию (рисунок 10.1). В начальной точке (xo,yo) мы рассчитываем правую часть уравнения, т.е. определяем касательную к решению в данной точке. Далее движемся по этой касательной до следующей точки. На каждом шаге мы заново находим касательную и численное решение получается в виде ломаной линии (метод Эйлера часто называют методом ломаных). Существует оценка общей погрешности решения err: err = Ch, где C – некоторая константа, зависящая от свойств функции f(x,y).

Из этой оценки следует, что с уменьшением шага точность решения повышается, но одновременно растет объем вычислений. На практике часто используют следующий прием: вначале проводят расчет при некотором шаге h, затем – при шаге h/2 и сравнивают результаты; если они отличаются незначительно, то точность расчета считается удовлетворительной.

На рисунке 10.2 приведена программа решения по методу Эйлера задачи Коши для простого уравнения

Д ля сравнения также приведено точное решение.

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

10.2 Решение оду в системе MathCad

В системе MathCAD имеется большое количество функций, позволяющих решать разнообразные типы ОДУ. Мы ограничимся только стандартными функциями rkfixed и Odesolve. Другие функции при желании вы можете успешно изучить самостоятельно.

Решение с помощью функции rkfixed

В системе MathCAD метод Рунге–Кутта реализуется с помощью стандартной функции rkfixed: решается задача Коши для заданных уравнений с постоянным шагом интегрирования.

Для этого систему (10.4) и соответствующие начальные условия запишем в векторной форме

, (10.10)

где

– вектор искомых решений;

– вектор-функция правых частей уравнений;

– вектор начальных значений y при x = Xinit.

Обращение к функции:

rkfixed(Yinit, Xinit, Xfinal, nstep, F),

где Xfinal – конечное значение x, nstep число шагов интегрирования, остальные обозначения пояснены выше.

Функция rkfixed возвращает матрицу значений следующего вида

Значения x

Значения y0

Значения y1

Значения yn-1

x0=Xinit

x1=x0+h

x2=x1+h

x=Xfinal

В качестве примера на рисунке 10.3 приведено решение с помощью метода Рунге–Кутта уравнения

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

Рис. 10.3 – Пример решения уравнения методом Рунге-Кутта

На рисунке 10.4 приведено решение методом Рунге–Кутта системы двух уравнений следующего вида

с начальными условиями x=0, u=0, v=5.

Поучительный пример приведен на рисунке 10.5, где построены решения уравнения

Интегральные кривые для данного уравнения – окружности с центром в начале координат и радиусом, равным y(0). Данное уравнение не имеет решения при y=0. Этому значению соответствует значение x=8. Однако компьютер этого «не знает» и при переходе через значение y=0 (начиная с x=8) выдает значения, не имеющие смысла. Попытка решить некорректную задачу с помощью уменьшению шага безуспешна, как это и следует из рисунка 10.5.

Рис. 10.4 – Пример решения системы уравнения методом Рунге–Кутта

Рис. 10.5 – Графики решения уравнения с разными шагами

Решение с помощью функции Odesolve

Метод решения с помощью функции rkfixed, приведенный выше, по форме записи несколько громоздок и требует особой тщательности при записи операторов и выражений. Более удобен на практике метод решения ОДУ с помощью специальной функции Odesolve, введенной в последних версиях MathCAD. Ее основные преимущества:

  1. уравнения и дополнительные условия записываются в более привычном виде;

  2. можно решать как начальные, так и краевые задачи;

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

В общем случае функция имеет следующую структуру:

Odesolve( [vector], x, b, [npoints] ). (10.11)

Здесь:

  • vector (используется только при решении систем ОДУ) – вектор-функция, которая содержит имена интегрируемых функций в системе ОДУ. Например, если решается система из двух уравнений относительно f(x) и g(x), то вектор должен быть записан как ;

  • x – имя переменной интегрирования;

  • b – конечная точка интегрирования (может быть как больше, так и меньше начальной точки);

  • npoints – целое число узлов, используемых при сплайн-интерполяции полученного решения. Данный параметр можно не задавать, тогда по умолчанию предполагается, что npoints = 1000.

Данная функция используется в составе вычислительного блока Given, структура которого имеет вид

Given

<Дифференциальные уравнения>

<Начальные или граничные условия>

<Получение решения с помощью функции Odesolve>

Здесь:

Given – служебное слово, начало вычислительного блока;

<Дифференциальные уравнения> – уравнение или система уравнений, линейных относительно старших производных;

<Начальные или граничные условия> – начальные или краевые (граничные) условия, их количество должно совпадать с порядком уравнения или системы уравнений;

<Получение решения с помощью функции Odesolve> – использование функции Odesolve с соответствующими параметрами (10.11) – конец вычислительного блока.

Дифференциальные уравнения должны быть линейными относительно старших производных. Допускается две формы их записи:

  1. с помощью операторов ;

  2. с помощью верхней кавычки, например, , которая набирается сочетанием клавиш <Ctrl–F7>.

При записи уравнений и дополнительных условий используются булевы (логические) операторы.

Функция Odesolve возвращает решение – функцию, полученную сплайн-интерполяцией численного решения.

Вышесказанное поясним следующим примером, приведенным на рисунке 10.6, решения задачи Коши:

Здесь решается уравнение 2-го порядка, описывающего затухающие колебания маятника при наличии трения.

Рис. 10.6 – Решение уравнения 2-го порядка с помощью функции Odesolve

Обратите внимание на следующие детали:

  • в вычислительном блоке в приведенном уравнении и начальных условиях переменная y записывается как функция от независимой переменной (в нашем случае – y(t));

  • начальное значение t задается как аргумент функции y, т.е. y(0), y′(0);

  • функция Odesolve использует два параметра: t и b=10 – конечная точка интегрирования (см. (10.11)).

Теперь полученную функцию y можно использовать, например, построить графики решения (рисунок 10.7).

Рис. 10.7 – Графики полученной функции и ее производной в зависимости от времени (слева) и на фазовой плоскости (справа)

Решение краевой задачи покажем на примере этого же маятника, но с дополнительными условиями, заданными в разных точках

Результаты показаны на рисунке 10.8.

Рис. 10.8  Решение краевой задачи для уравнения 2-го порядка с помощью функции Odesolve

Решение системы ОДУ покажем на примере решения начальной задачи для следующей системы уравнений:

Результаты показаны на рисунке 10.9.

Рис. 10.9 – Решение задачи Коши для системы ОДУ

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