Решение дифференциальных уравнений второго порядка

Метод Эйлера для дифференциальных уравнений первого порядка

Решим задачу Коши для ДУ первого порядка методом Эйлера.

Пусть правая часть уравнения равна

Зададим границы изменения 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).