- •ВВЕДЕНИЕ
- •2. СОЗДАНИЕ И РЕДАКТИРОВАНИЕ ФОРМУЛ И ТЕКСТА
- •2.1.Курсор
- •2.2. Шаблоны
- •2.3. Текстовые области
- •2.4. Задание размерности
- •3. ВХОДНОЙ ЯЗЫК СИСТЕМЫ
- •3.1. Общие сведения
- •3.2. Алфавит
- •3.3. Элементарные конструкции
- •3.4. Выражения
- •3.5. Операторы
- •3.6. Константы и переменные
- •3.7. Функции
- •3.7.1. Встроенные функции
- •3.7.2. Функции, принимающие несколько значений
- •3.7.3. Функции, определяемые пользователем
- •4. РАБОТА С ДОКУМЕНТАМИ
- •5. ВЫПОЛНЕНИЕ ВЫЧИСЛЕНИЙ
- •6. ВЕКТОРЫ И МАТРИЦЫ
- •6.1. Создание и отображение массивов
- •6.2. Задание элементов массивов
- •6.3. Векторные и матричные операции
- •6.4. Векторные и матричные функции
- •6.4.1. Формирование матриц
- •6.4.2. Определение размеров массивов и значений элементов
- •6.4.3. Сортировка векторов и матриц
- •6.4.4.Специальные характеристики матрицы
- •7. ПОСТРОЕНИЕ ГРАФИКОВ
- •7.1. Графические возможности
- •7.2. Создание графиков на плоскости
- •7.2.1. График в декартовых координатах (X-Y Plot)
- •7.2.2. График в полярной системе координат (Polar Plot)
- •7.3. Построение трёхмерных графиков
- •7.3.1. Создание трёхмерных графиков
- •7.3.2. Форматирование трехмерных поверхностей
- •7.3.3. Построение контурных графиков (Contour Plot)
- •7.3.4. Построение точечного графика (3D Scatter Plot)
- •7.3.5. Построение трёхмерной гистограммы
- •7.3.6. Векторное поле (Vector Field Plot)
- •7.4. Применение функций CreateMesh и CreateSpace
- •7.5. Импорт изображений
- •8. ДАННЫЕ ФАЙЛОВОГО ТИПА
- •9. СИМВОЛЬНЫЕ ВЫЧИСЛЕНИЯ
- •9.1. Организация символьных вычислений
- •9.2. Меню Symbolics
- •9.2.1. Обзор команд меню Symbolics
- •9.2.2. Операции с выделенными выражениями
- •9.2.3. Операции с выделенными переменными
- •9.2.4. Операции с выделенными матрицами
- •9.2.5. Операции преобразования
- •9.3. Система SmartMath
- •9.3.1 Операции символьного вывода
- •9.3.2.Состав директив
- •9.3.3. Вычисление пределов
- •9.3.4. Специальные функции
- •9.3.5. Большие символьные результаты
- •10. РЕШЕНИЕ УРАВНЕНИЙ И СИСТЕМ
- •10.1. Решение уравнения с одной неизвестной
- •10.2. Поиск всех корней полинома
- •10.3. Решение систем нелинейных уравнений и неравенств
- •10.4. Решение систем линейных уравнений
- •10.5. Символьное решение алгебраического уравнения
- •11. ОБРАБОТКА ДАННЫХ
- •11.1. Интерполяция
- •11.2. Регрессии
- •11.3. Сглаживание данных
- •12. ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ И СИСТЕМЫ
- •12.1. Методы решения
- •12.2. Пример использования функции rkfixed
- •12.3. Решение системы ОДУ первого порядка
- •13. ПРОГРАММНЫЕ БЛОКИ
- •13.1. Программирование в пакете MathCad
- •13.2. Программные операторы
- •ЗАДАНИЯ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- •ОГЛАВЛЕНИЕ
12. ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ И СИСТЕМЫ
12.1. Методы решения
Начиная с версии 5 в систему MathCad введены функции для решения дифференциальных уравнений и систем численными методами. Применение этих функций требует выполнения ряда вспомогательных операций и учёта особенностей каждой из них. Далее рассматривается решение обыкновенных дифференциальных уравнений (ОДУ), представленных в форме Коши.
Решение обыкновенных дифференциальных уравнений существенно упростилось в MathCad 2000, так как появилась новая функция odesolve(x,b,[step]), которая используется в вычислительном блоке Given и позволяет записывать уравнения и начальные условия в привычном виде. Функция odesolve(x,b,[step]) возвращает решение дифференциального уравнения в виде функции. Уравнение должно быть линейным относительно наивысшей производной и количество начальных условий должно быть равно порядку ОДУ. Параметрами функции odesolve являются:
x – переменная интегрирования, вещественного типа;
b – конечное значение интервала интегрирования, вещественного типа;
step – необязательный параметр, определяющий число шагов. Если этот параметр задан, то при поиске решения используется постоянный шаг. В противном случае применяется адаптивный метод.
При записи уравнения можно применять символы дифференцирования d/dx или обозначение производной штрихом. Для задания штриха используется комбинация клавиш Ctrl+F7.
Given |
|
|
|
|
||
d y(x) |
|
|
sin(x) + |
1 |
||
|
|
|||||
|
|
y(x) |
||||
dx |
|
|
|
|||
y(0) |
|
|
1 |
|
|
|
|
|
|
|
|||
|
|
|
y := Odesolve (x ,24 ,100 )
58
При записи уравнения и условий следует использовать жирный знак равенства и в правой части обязательно указывать аргумент функции (x). Если написать просто y, а не y(x), то будет ошибка.
Для формирования блока Given можно использовать предварительно определённую функцию пользователя, а также задавать переменными начальные условия, конечное значение интервала интегрирования и число шагов :
f (t ,y) := sin(t) + 1y t0 := 0 y0 := 1
t1 := 8 π
Given
y'(t) f (t ,y(t))
y(t0) y0
y := Odesolve (t ,t1)
f(t,y) - правая часть уравнения
y0 - значение функции при t0=0
t1 - конечное значение интервала интегрирования
Исходное уравнение
Начальное условие
Вызов функции
Получив функцию, являющуюся решением уравнения, целесообразно построить её график (обычным способом). При желании можно вывести значения функции y, задав предварительно точки с помощью ранжированной переменной.
Для решения обыкновенных дифференциальных уравнений используются функции:
Bulstoer(y, x1, x2, n, D), bulstoer(y, x1, x2, acc, n, D, k, s), Rkadapt (y, x1, x2, n, D), rkadapt(y, x1, x2, acc, n, D, k, s), rkfixed(y, x1, x2, n, D),
Stiffb(y, x1, x2, n, D, J),
stiffb(y, x1, x2, acc, n, D, J, k, s) , Stiffr(y, x1, x2, n, D, J),
stiffr(y, x1, x2, acc, n, D, J, k, s),
где y – вектор начальных условий,
x1 – начало интервала интегрирования,
x2 – конец интервала интегрирования, n – число шагов интегрирования,
59
D – вектор, элементами которого являются правые части
исходных уравнений, |
|
|
|
k – максимальное |
число |
промежуточных |
точек |
решения, |
|
|
|
s – минимально допустимый интервал между точками, acc – параметр, контролирующий точность решения. J – функция Якобиана.
Начальные условия в векторе y должны соответствовать x1. С помощью параметра асс можно управлять точностью решения: при малых значениях асс делаются более мелкие шаги вдоль траектории, что повышает точность результата.
Решение получается в виде матрицы, содержащей n+1 строк и p+1 столбцов. Количество столбцов на единицу больше, чем количество уравнений p или порядок уравнения. Начальный столбец матрицы по умолчанию имеет индекс 0 и содержит значения аргумента в точках, определяемых величинами x1, x2, n.
Функции, имена которых начинаются с букв rk (rkadapt, Rkadapt, rkfixed), используют метод Рунге-Кутта. В функциях
Bulstoer, bulstoer, Stiffb, stiffb реализован метод Булирша-Штёра.
Функции Stiffr, stiffr находят корни по методу Розенброка.
Метод Рунге-Кутта, реализованный в rkfixed, не является самым быстрым, но во многих случаях справляется с поставленной задачей. Однако в ряде задач целесообразно применить более сложные методы.
Функции bulstoer, Stiffb, stiffb, Stiffr, stiffr позволяют находить решения жёстких систем дифференциальных уравнений.
Если известно, что функции системы являются гладкими, то целесообразно применить метод Bulstoer, а для плавных функций рекомендуется метод Rkadapt. Функция Rkadapt изменяет шаг в зависимости от поведения производной: уменьшает там, где производная меняется быстро, и увеличивает там, где поведение производной можно считать спокойным. Таким образом, при поиске решения используется переменный шаг, но в матрице результата значения приводятся для равноотстоящих точек, заданных пользователем через параметры.
В тех случаях, когда требуется найти решение только в конечной точке, то целесообразно применить одну из функций bulstoer, rkadapt, stiffb, stiffr, что позволит уменьшить объём выполняемых вычислений.
60
Иногда оказывается целесообразным попытаться решить уравнение или систему несколькими методами, чтобы выбрать более подходящий по точности или скорости получения результата.
12.2. Пример использования функции rkfixed
Решим рассмотренное ранее уравнение с помощью функции rkfixed(y, x1, x2, n, D). Аналогичным образом для решения уравнения можно было применить функцию Rkadapt или Bulstoer.
Последовательность действий:
задаём количество шагов
формируем вектор ic начальных условий. Так как уравнение одно, то вектор содержит один элемент
задаём правые части D(t,Y). Вторым аргументом
должен быть вектор искомой функции
вызываем функцию rkfixed для получения матрицы решения
выделяем первый столбец матрицы, который содержит значения независимой переменной
выделяем второй столбец матрицы, который содержит значения функции-результата
строим график
N : = 100 |
ic0 := y0 |
|
|
|
|
|
D(t,Y) := sin(t) + |
1 |
|
|
|
|
|
|
|
Y0 |
|
|
|
|
S := rkfixed(ic,t0 ,t1 ,N ,D) |
|
|
||||
T := |
0 |
|
1 |
|
|
|
S |
Y := S |
|
|
|
||
|
10 |
|
|
|
|
|
Y |
5 |
|
|
|
|
|
|
0 |
5 |
10 |
15 |
20 |
25 |
|
|
|
|
T |
|
|
|
|
|
61 |
|
|