- •Основы работы в системе mathcad
- •1.1 Основы пользовательского интерфейса
- •1.2 Предварительные сведения о меню команд
- •1.3 Принцип блоков. Порядок вычислений
- •1.4 Ввод и редактирование текста
- •Создание текстового блока
- •Вставка математических выражений в текстовый блок
- •Форматирование текста
- •1.5 MathCad в режиме калькулятора
- •1.6 Ввод и редактирование формул
- •Ввод формул
- •Редактирование формул
- •2 Простейшие элементы языка mathcad
- •2.1 Алфавит, идентификаторы и числа Алфавит
- •Идентификаторы
- •2.2 Константы и переменные
- •Переменные
- •2.3 Арифметические и логические операторы
- •Арифметические операторы
- •Логические операторы
- •2.4 Единицы измерения и размерность
- •Основные и дополнительные единицы измерения
- •Ввод размерных значений
- •Вывод размерных значений
- •3 Переменные диапазона, векторы и переменные с индексом
- •3.1 Переменные диапазона
- •Использование переменных диапазона
- •3.2 Векторы и переменные с индексом
- •Способы определения векторов
- •3.3 Итерации и рекурсии
- •3.4 Операторы суммирования и перемножения
- •4. Построение графиков
- •4.1 Создание двумерных графиков Создание графических шаблонов
- •Декартова система координат
- •Полярные координаты
- •Примеры создания двумерных графиков
- •Форматирование графиков
- •Форматирование графиков в декартовой системе координат
- •Форматирование графиков в полярной системе координат
- •Вторая ось по y
- •4.2 Трехмерные графики
- •5. Функции
- •5.1 Основные стандартные функции общего назначения
- •5.2 Функции с условными выражениями
- •Функция until
- •Функция if
- •5.3 Функции пользователя
- •6. Операции с векторами и матрицами
- •6.1 Операции с векторами
- •Векторные операторы
- •Векторные функции
- •Векторные функции пользователя
- •Одновременные вычисления с помощью векторов
- •6.2 Операции с матрицами
- •Как создать матрицу
- •Матричные операторы
- •Матричные функции
- •6.3 Примеры векторных и матричных операций
- •Решение уравнений
- •8.1 Решение одного уравнения Предварительные сведения
- •Алгебраические уравнения
- •Уравнения любого типа
- •8.2 Решение систем линейных уравнений Краткие сведения из теории
- •Решение методом обратной матрицы
- •Функции lsolve
- •Решение линейной системы методом Гаусса
- •8.3 Решение систем нелинейных уравнений
- •9. Производные и интегралы
- •9.1 Операторы дифференцирования и интегрирования
- •9.2 Дифференцирование
- •Производные высших порядков
- •Частные производные
- •9.3 Интегрирование
- •Определенный интеграл
- •Кратные интегралы
- •Разностные методы решения
- •10.2 Решение оду в системе MathCad
- •Решение с помощью функции rkfixed
- •Сборник задач
- •Литература
Разностные методы решения
Методы решения дифференциальных уравнений можно условно разделить:
на точные;
на приближенные;
на разностные.
Ниже мы рассмотрим только разностные методы, которые дают приближенные значения y на некоторой сетке значений x. Решение при этом получается в виде таблицы. Эти методы применимы к очень широкому классу уравнений и в настоящее время являются одним из основных способов решения многих практических задач.
Особенности разностных методов решения дифференциальных уравнений покажем на примере одного уравнения вида (10.6)
решение
которого определяется на отрезке
.
Метод Эйлера. Примером простейшего разностного метода является метод Эйлера, или метод ломаных. Рассмотрим задачу Коши для уравнения (10.6). Разобьем отрезок [x0, xk] на n малых интервалов так, что получим некоторую последовательность (или сетку) значений аргумента x: x0<x1<x2< … <xn-1<xn. Для упрощения задачи будем полагать, что длина шага h=xi+1xi – постоянная величина (в общем случае это не так).
Разностная схема метода Эйлера для уравнения (10.6) имеет вид
.
(10.9)
Э
то
рекурентное соотношение позволяет по
предыдущему значению yi
получить
последующее yi+1.
Для начала счета используется начальное
значение y0
в точке
x0.
Метод Эйлера имеет простую геометрическую интерпретацию (рисунок 10.1). В начальной точке (xo,yo) мы рассчитываем правую часть уравнения, т.е. определяем касательную к решению в данной точке. Далее движемся по этой касательной до следующей точки. На каждом шаге мы заново находим касательную и численное решение получается в виде ломаной линии (метод Эйлера часто называют методом ломаных). Существует оценка общей погрешности решения err: err = Ch, где 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. Ее основные преимущества:
уравнения и дополнительные условия записываются в более привычном виде;
можно решать как начальные, так и краевые задачи;
решение получается не в виде таблицы значений, как в случае использования функции 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) – конец вычислительного блока.
Дифференциальные уравнения должны быть линейными относительно старших производных. Допускается две формы их записи:
с помощью операторов
;с помощью верхней кавычки, например,
,
которая набирается сочетанием клавиш
<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 использует максимальное количество аргументов, назначение которых было изложено выше.
