Решение дифференциальных уравнений второго порядка
Метод Эйлера для дифференциальных уравнений первого порядка
Решим задачу Коши для ДУ первого порядка методом Эйлера.
Пусть правая часть уравнения равна
Зададим границы изменения x:
Зададим число точек и величину шага:
Зададим начальные условия:
Вычислим x и y по формулам Эйлера
Представим результат графически и сравним его с аналитическим решением
Точное аналитическое решение и решение, полученное численно, отличаются в точке x=1 на . То есть относительная ошибка составляет
Для решения ДУ Mathcad имеет ряд встроенных функций, в частности, функцию rkfixed, реализующую метод Рунге–Кутты четвертого порядка с фиксированным шагом. Фактически эта функция предназначена для решения систем дифференциальных уравнений первого порядка.
Функция rkfixed(y, x1, x2, npoints, D) возвращает матрицу. Первый столбец этой матрицы содержит точки, в которых получено решение, а остальные столбцы – решения и его первые производные.
Аргументы функции:
· y – вектор начальных значений (n элементов).
· x1 и x2 – границы интервала, на котором ищется решение дифференциального уравнения.
· npoints – число точек внутри интервала (x1,x2), в которых ищется решение. Функция rkfixed возвращает матрицу, состоящую из 1+npoints строк.
· D – вектор, состоящий из n элементов, который содержит первые производные искомой функции.
Решение дифференциальных уравнений методом Рунге–Кутты
Решим задачу Коши для дифференциального уравнения первого порядка методом Рунге–Кутты.
Зададим границы изменения x:
Зададим число точек внутри интервала Зададим начальные условия
Обратите внимание на обозначения! Поскольку мы решаем только одно дифференциальное уравнение первого порядка, а не систему дифференциальных уравнений, матрица y содержит только один элемент, однако запись y=1 была бы неправильной. Необходимо явно указывать на то, что величина y – матрица, то есть писать индекс.
Определим теперь матрицу производных. Эта матрица тоже состоит только из одного элемента. Этот элемент с точностью до обозначений совпадает с правой частью исходного дифференциального уравнения:
Решаем дифференциальное уравнение
Точное аналитическое решение и решение, полученное численно отличаются в точке на
Относительная ошибка составляет
В качестве примера решим задачу о гармоническом осцилляторе, для которого известно аналитическое решение, и легко может быть оценена точность вычислений. Дифференциальное уравнение второго порядка
преобразуем к системе из двух дифференциальных уравнений первого порядка
Пусть декремент затухания
Пусть циклическая частота
Зададим начальные условия
y0соответствует начальной координате, а y1 – начальной скорости. Зададим теперь матрицу D. С учетом того, что искомая величина соответствует нулевому элементу массива y, ее первая производная – первому, а вторая – второму, имеем
Представим результаты расчета на графике и сравним их с аналитическим решением
Mathcad предлагает новый способ для решения обыкновенных дифференциальных уравнений, разрешенных относительно старшей производной. Для этих целей служит уже известный нам блок given совместно с функцией odesolve.
Функция odesolve решает задачу Коши с начальными условиями
y(x0)=y0, y’(x0)=y0,1, …, y(n-1)(x0)=y0,n-1
или простейшую краевую задачу, в которой заданы n граничных условий, определяющих значения искомой функции y(x) и её производных в концах отрезка [a,b], т.е. заданы n граничных условий вида
y(k)(a)=ya,k, y(m)(b)=yb,m, 0≤k≤n-1, 0≤m≤n-1.
Дифференциальное уравнение совместно с начальными или граничными условиями записывается в блоке given. Производные можно обозначать как штрихами (Ctrl+F7), так и с помощью знака производной .
Функция odesolve имеет три аргумента: odesolve(x,b,step).Первый аргумент х – независимая переменная интегрирования, второй b – правая граница интервала интегрирования, на котором ищется решение, последний аргумент step – шаг, с которым ищется решение. Последний аргумент может быть опущен odesolve(x,b).