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

Дифференциальным уравнением называют уравнение, содержащее производную неизвестной функции. Решением дифференциального уравнения называется функция, которая обращает уравнение в тождество.

Порядок дифференциального уравнения - это порядок его старшей производной. Обыкновенным дифференциальным уравнением первого порядка называется уравнение вида

F(x,y,y') = 0.

Каноническая форма записи ОДУ первого порядка: y' = f(x,y).

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

  • • задачу Коши (когда все дополнительные условия заданы в одной (начальной) точке интервала);
  • • краевую задачу (когда дополнительные условия заданы на границах интервала).

Существуют точные (аналитические) и приближенные (численные) методы решения дифференциальных уравнений. Большое количество уравнений может быть решено аналитически. Однако есть уравнения, а особенно системы уравнений, для которых точное решение записать невозможно. Среди приближенных методов решения наибольшую известность получили методы Эйлера и Рунге - Кутта. Формулы Эйлера значительно проще формул Рунге - Кутта, но точность численного решения по ним существенно меньше. Формулы метода Рунге -Кутта громоздки, но дают хороший результат. С уменьшением шага точность обоих методов возрастает.

Решение задачи Коши для обыкновенных дифференциальных уравнений первого порядка в Scilab

Постановка задачи Коши: найти решение обыкновенного дифференциального уравнения первого порядка, записанного в канонической форме,

y' = f(x,y), удовлетворяющее начальному условию

УЫ = у00-const.

Для решения этой задачи в системе Scilab можно использовать функцию ode следующего синтаксиса:

у = ode(yO, хО, x,f).

Параметры:

  • у - вектор искомых значений решения;
  • • хО, уО - начальное условие;
  • • х - вектор значений аргумента, при которых ищется решение;
  • f ~ функция, определяющая правую часть уравнения.

Пример. Решить задачу Коши: у' + у = sin(xy), у(1) = 1.5 на отрезке [1, 10] с шагом h = 1.

Запишем уравнение в канонической форме: у' = -у + sin(xy). (То есть в нашем случае f(x,y) = -у + sin(xy).) Зададим внешнюю функцию с помощью function и применим функцию ode:

function w=f(x, у) //правая часть уравнения w=-y+sin(x*y)-,

endfunction

clc

scf

formatfv', 5) //уменьшаем число выводимых десятичных знаков

х0=1;

у0=1.5;

х=[1:10]; // значения аргумента

z=ode(yQ, хО, х, /); // искомые значения решения задачи Коши

plot(x, z, xgrid() // график интегральной кривой (решения)

// звездочками обозначены значения решения в заданных

// точках отрезка [1, 10]

Графическое решение задачи Коши

Рис. 4.30. Графическое решение задачи Коши

Интегральная кривая, описывающая решение задачи Коши, приведена на рис. 4.30. Для получения в командном окне числового решения задачи Коши достаточно убрать точку с запятой в тексте программы в конце строки х = [1:10]; и строки z = ode(yO, xQ, х, fy.

Результат.

х=1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

z= 1.5 1.12 0.83 0.65 0.54 0.46 0.40 0.35 0.32 0.29

С помощью функции ode в системе Scilab можно решать задачу Коши не только для уравнения, но и для системы обыкновенных дифференциальных уравнений первого порядка, представленной в канонической форме:

dy^X- = fi(x, y^x), y2(x),..., yn(x)), dx

d)2}X) = У1(А y2(x),...,yn(x) dx

dy"^ = fn(x, У1(х), y2(x),...,yn(x)).

Начальное условие в этом случае имеет тот же вид, что и в случае ОДУ первого порядка, но понимается в векторном смысле.

Рассмотрим пример использования функции ode для системы ОДУ (рис. 4.31).

Пример. Решить задачу Коши:

у' = cos(yz), z = sin(y + xz), У(1) = 1,

Z(D = 2

на отрезке [1,6] с шагом h = 0.5.

function g=syst(x, w) //правая часть системы g=zeros(2, 1) //матрица размера 2x1 из нулей g(1 )=cos( w(1)*iv(2));

g(2)=s/n(w(1)+iv(2)*x)

endfunction

de, sef

formate v’, 5) //сокращаем число выводимых десятичных знаков

и/0=[1;2];

х0=1;

х=[1:0.5:6] //значения аргумента

w=ode(w0, хО, х, syst) // искомые значения решения задачи Коши

plot(x, iv, xgrid(), legend('y', 2) //графики интегральных кривых

Графическое решение задачи Коши для системы ОДУ

Рис.4.31. Графическое решение задачи Коши для системы ОДУ

Результат числового решения:

х =

1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. 5.5 6.

и/ =

  • 1. 0.88 0.90 1.04 1.25 1.53 1.87 2.26 2.71 3.19 3.69
  • 2. 1.88 1.55 1.17 0.84 0.59 0.4 0.25 0.13 0.03 -0.06

Здесь w=[w(l), w(2)] = [у, z],

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

[у, w, iw]=ode([type],yO, хО, х, [, rtol [, atol]],/ [, jak] [, w, iw]). Обязательные параметры - y0, x0, x, f, у - описаны выше. Рассмотрим необязательные параметры функции ode:

• type - параметр для выбора метода решения или типа решаемой задачи: adams - метод прогноза-коррекции Адамса; stiff -

метод решения жестких задач; rk - метод Рунге-Кутта 4-го порядка; rkf - пятиэтапный метод 4-го порядка; fix - тот же метод Рунге-Кутта с фиксированным шагом;

  • • rtol, atol - относительная и абсолютная погрешности вычислений - вектор, размерность которого совпадает с размерностью вектора решения у; по умолчанию rtol = 0.00001, atoll = 0.0000001, при использовании параметров rkf и fix -rtol=0.001, atol=0.0001;
  • jak матрица, представляющая собой якобиан правой части жесткой системы ОДУ, задают матрицу в виде внешней функции в форме J=jak(x,y);
  • w, iw - векторы, предназначенные для сохранения информации о параметрах интегрирования, которые применяют, чтобы последующие вычисления выполнялись с теми же параметрами.
 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >