dsolve

Дифференциальные уравнения и системный решатель

Входные параметры вектора символов будут удалены в будущем релизе. Вместо этого используйте syms, чтобы объявить переменные и входные параметры замены, такие как dsolve('Dy = y') с syms y(t); dsolve(diff(y,t) == y).

Синтаксис

S = dsolve(eqn)
S = dsolve(eqn,cond)
S = dsolve(eqn,cond,Name,Value)
[y1,...,yN] = dsolve(___)

Описание

пример

S = dsolve(eqn) решает дифференциальное уравнение eqn, где eqn является символьным уравнением. Используйте diff и ==, чтобы представлять дифференциальные уравнения. Например, diff(y,x) == y представляет уравнение dy/dx=y. Решите систему дифференциальных уравнений путем определения eqn как вектора тех уравнений.

пример

S = dsolve(eqn,cond) решает eqn с начальным или граничным условием cond.

пример

S = dsolve(eqn,cond,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары Name,Value.

пример

[y1,...,yN] = dsolve(___) присваивает решения переменных y1,...,yN.

Примеры

Решите дифференциальное уравнение

Задайте дифференциальное уравнение при помощи == и представляйте дифференцирование при помощи функции diff. Затем решите уравнение при помощи dsolve.

Решите уравнение dydt=ay.

syms a y(t)
eqn = diff(y,t) == a*y;
dsolve(eqn)
ans =
C2*exp(a*t)

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

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

Задайте производную второго порядка функционального y при помощи diff(y,t,2) или diff(y,t,t). Точно так же задайте производную n-го порядка при помощи diff(y,t,n).

Решите уравнение d2ydt2=ay.

syms y(t) a
eqn = diff(y,t,2) == a*y;
ySol(t) = dsolve(eqn)
ySol(t) =
C2*exp(-a^(1/2)*t) + C3*exp(a^(1/2)*t)

Решите дифференциальное уравнение с условием

Задайте условия как второй вход к dsolve при помощи оператора ==. Определение условий устраняет произвольные постоянные, такие как C1, C2, ... из решения.

Решите уравнение dydt=ay с условием y(0)=5.

syms y(t) a
eqn = diff(y,t) == a*y;
cond = y(0) == 5;
ySol(t) = dsolve(eqn,cond)
ySol(t) =
5*exp(a*t)

Решите дифференциальное уравнение второго порядка d2ydt2=a2y с двумя условиями, y(0)=b и y'(0)=1. Создайте второе условие путем присвоения diff(y,t) Dy и затем использования Dy(0) == 1.

syms y(t) a b
eqn = diff(y,t,2) == a^2*y;
Dy = diff(y,t);
cond = [y(0)==b, Dy(0)==1];
ySol(t) = dsolve(eqn,cond)
ySol(t) =
(exp(a*t)*(a*b + 1))/(2*a) + (exp(-a*t)*(a*b - 1))/(2*a)

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

Решите систему дифференциальных уравнений

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

Решите систему уравнений

dydt=zdzdt=y.

syms y(t) z(t)
eqns = [diff(y,t) == z, diff(z,t) == -y];
sol = dsolve(eqns)
sol = 
  struct with fields:

    z: [1×1 sym]
    y: [1×1 sym]

Доступ к решениям путем обращения к элементам структуры.

soly(t) = sol.y
soly(t) =
C2*cos(t) + C1*sin(t)
solz(t) = sol.z
solz(t) =
C1*cos(t) - C2*sin(t)

Присвойте Выходные параметры функциям или переменным

При решении для нескольких функций dsolve возвращает структуру по умолчанию. Также можно непосредственно присвоить решения функций или переменных путем определения выходных параметров явным образом как вектора. виды dsolve выходные параметры в алфавитном порядке с помощью symvar.

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

syms y(t) z(t)
eqns = [diff(y,t)==z, diff(z,t)==-y];
[ySol(t) zSol(t)] = dsolve(eqns)
ySol(t) =
C2*cos(t) + C1*sin(t)
zSol(t) =
C1*cos(t) - C2*sin(t)

Когда никакие решения не найдены

Если dsolve не может решить ваше уравнение, то попытайтесь решить уравнение численно. Смотрите Решают Дифференциальное уравнение Второго порядка Численно.

syms y(x)
eqn = diff(y, 2) == (1 - y^2)*diff(y) - y;
dsolve(eqn)
 Warning: Unable to find explicit solution. 
> In dsolve (line 201) 
ans =
[ empty sym ]

Включайте особые случаи путем выключения внутренних упрощений

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

Решить dydt=ay+y где y(a)=1 с и без упрощений. Выключите упрощения установкой 'IgnoreAnalyticConstraints' к false.

syms a y(t)
eqn = diff(y) == a/sqrt(y) + y;
cond = y(a) == 1;
withSimplifications = dsolve(eqn, cond)
withSimplifications =
(exp((3*t)/2 - (3*a)/2 + log(a + 1)) - a)^(2/3)
withoutSimplifications = dsolve(eqn, cond, 'IgnoreAnalyticConstraints', false)
withoutSimplifications =
piecewise(pi/2 < angle(-a), {piecewise(in(C11, 'integer'),...
 (- a + exp((3*t)/2 - (3*a)/2 + log(a + 1) + pi*C11*2i))^(2/3))},...
 angle(-a) <= -pi/2, {piecewise(in(C12, 'integer'),...
 (- a + exp((3*t)/2 - (3*a)/2 + log(a + 1) + pi*C12*2i))^(2/3))},...
 angle(-a) in Dom::Interval(-pi/2, [pi/2]), {piecewise(in(C13, 'integer'),...
 (- a + exp((3*t)/2 - (3*a)/2 + log(a + 1) + pi*C13*2i))^(2/3))})

withSimplifications является простым в использовании, но неполным, в то время как withoutSimplifications включает особые случаи, но не прост в использовании.

Далее, для определенных уравнений, dsolve не может найти явное решение, если вы устанавливаете 'IgnoreAnalyticConstraints' на false.

Входные параметры

свернуть все

Дифференциальное уравнение или система уравнений, заданная как символьное уравнение или вектор символьных уравнений.

Задайте дифференциальное уравнение при помощи оператора ==. В уравнении представляйте дифференцирование при помощи diff. Например, diff(y,x) дифференцирует символьный функциональный y(x) относительно x. Создайте символьный функциональный y(x) при помощи syms как syms y(x). Таким образом, чтобы решить d2y(x)/dx2 = x*y(x), введите:

syms y(x)
dsolve(diff(y,x,2) == x*y)

Задайте систему дифференциальных уравнений при помощи вектора уравнений, таких как dsolve([diff(y,t) == z, diff(z,t) == -y]).

Начальное или граничное условие, заданное как символьное уравнение или вектор символьных уравнений.

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

Задайте несколько условий при помощи вектора уравнений. Если количество условий является меньше, чем количество зависимых переменных, решения содержат произвольные постоянные C1, C2, ....

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'IgnoreAnalyticConstraints',false не применяет внутренние упрощения.

Используйте внутренние упрощения, заданные как true или false.

По умолчанию решатель применяет упрощения при решении дифференциального уравнения. Эти упрощения не могут быть обычно допустимыми. Поэтому по умолчанию решатель не гарантирует полноты результатов. Для получения дополнительной информации см. Алгоритмы. Чтобы решить обыкновенные дифференциальные уравнения без этих упрощений, установите 'IgnoreAnalyticConstraints' на false. Результаты, полученные с набором 'IgnoreAnalyticConstraints' к false, правильны для всех значений аргументов.

Если вы не устанавливаете 'IgnoreAnalyticConstraints' на false, всегда проверяйте результаты, возвращенные командой dsolve.

Максимальная степень полиномиальных уравнений, для которых решатель использует явные формулы, заданные как положительное целое число, меньшее, чем 5. dsolve не использует явные формулы при решении полиномиальных уравнений степеней, больше, чем MaxDegree.

Выходные аргументы

свернуть все

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

Переменные, хранящие решения дифференциального уравнения, возвращенного как вектор символьных переменных. Количество выходных переменных должно равняться количеству зависимых переменных в системе. dsolve сортирует зависимые переменные в алфавитном порядке, и затем присваивает решения для переменных к выходным переменным или символьным массивам.

Советы

  • Если dsolve не может найти явное или неявное решение, то он выдает предупреждение и возвращает пустой sym. В этом случае попытайтесь найти числовое решение с помощью функции ode45 или MATLAB® ode23. Иногда, вывод является эквивалентным дифференциальным уравнением более низкоуровневым или интегралом.

  • Если dsolve не может найти закрытую форму (явным) решением, он пытается найти неявное решение. Когда dsolve возвращает неявное решение, он выдает это предупреждение:

    Warning: Explicit solution could not be found;
    implicit solution returned.
  • dsolve не возвращает полные решения, даже если 'IgnoreAnalyticConstraints' является false.

Алгоритмы

Если вы не устанавливаете 'IgnoreAnalyticConstraints' на false, то dsolve применяет эти правила при решении уравнения:

  • регистрируйте (a) + журнал (b) = журнал (a · b) для всех значений a и b. В частности, следующее равенство применяется для всех значений a, b и c:

      ) c = a c · b c.

  • журнал (a b) = b · регистрируйте (a) для всех значений a и b. В частности, следующее равенство применяется для всех значений a, b и c:

      (a b) c = a b · c.

  • Если f и g являются стандартными математическими функциями и f (g (x)) = x для всех маленьких положительных чисел, f (g (x)) = , x принят, чтобы быть допустимым для всего комплексного x. В частности:

    • журнал (e x) = x

    • asin (sin (x)) = x, acos (cos (x)) = x, atan (загар (x)) = x

    • asinh (sinh (x)) = x, acosh (дубинка (x)) = x, atanh (tanh (x)) = x

    • Wk (x · e x) = x для всех значений k

  • Решатель может умножить обе стороны уравнения по любому выражению кроме 0.

  • Решения полиномиальных уравнений должны быть завершены.

Представлено до R2006a