dsolve

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

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

Описание

пример

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

пример

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

пример

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

пример

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

Примеры

свернуть все

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

Задайте производную первого порядка при помощи diff и уравнение при помощи ==. Затем решите уравнение при помощи dsolve.

syms y(t) a
eqn = diff(y,t) == a*y;
S = dsolve(eqn)
S = C1eat

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

Решите дифференциальное уравнение второго порядка d2ydt 2=да.

Задайте производную второго порядка y при помощи diff(y,t,2) и уравнение при помощи ==. Затем решите уравнение при помощи dsolve.

syms y(t) a
eqn = diff(y,t,2) == a*y;
ySol(t) = dsolve(eqn)
ySol(t) = C1e-at+C2eat

Решите дифференциальное уравнение первого порядка dydt =да с начальным условием y(0)=5.

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

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

Затем решите дифференциальное уравнение второго порядка d2ydt 2=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) = 

eatab+12a+e-atab-12a

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

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

dydt =zдюжинаdt =-y.

Задайте систему уравнений как вектор. dsolve возвращает структуру, содержащую решения.

syms y(t) z(t)
eqns = [diff(y,t) == z, diff(z,t) == -y];
S = dsolve(eqns)
S = struct with fields:
    z: [1x1 sym]
    y: [1x1 sym]

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

ySol(t) = S.y
ySol(t) = C1потому что(t)+C2sin(t)
zSol(t) = S.z
zSol(t) = C2потому что(t)-C1sin(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) = C1потому что(t)+C2sin(t)
zSol(t) = C2потому что(t)-C1sin(t)

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

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

Решите дифференциальное уравнение dydt =ay+y с условием y(a)=1. По умолчанию, dsolve применяет упрощения, которые не обычно правильны, но производят простые решения. Для получения дополнительной информации см. Алгоритмы.

syms a y(t)
eqn = diff(y) == a/sqrt(y) + y;
cond = y(a) == 1;
ySimplified = dsolve(eqn, cond)
ySimplified = 

e3t2-3a2+журнал(a+1)-a2/3

Возвратить решения, которые включают все возможные значения параметра a, выключите упрощения установкой 'IgnoreAnalyticConstraints' к false.

yNotSimplified = dsolve(eqn,cond,'IgnoreAnalyticConstraints',false)
yNotSimplified = 

{{{-a+e3t2-3a2+журнал(a+1)+2πC1i2/3 если  C1Z} если  0<a{{-a+e3t2-3a2+журнал(a+1)+2πC2i2/3 если  C2Z} если  a0

Решите дифференциальное уравнение dyдуплекс=1x2e-1x не задавая начальное условие.

syms y(x)
eqn = diff(y) == exp(-1/x)/x^2;
ySol(x) = dsolve(eqn)
ySol(x) = 

C3+e-1x

Чтобы устранить константы из решения, задайте начальное условие y(0)=1.

cond = y(0) == 1;
S = dsolve(eqn,cond)
S = 

e-1x+1

Функция e-1x в решении ySol(x) имеет различные односторонние пределы в x=0. Функция имеет предел правой стороны, lim x0+e-1x=0, но это имеет неопределенный предел левой стороны, lim x0-e-1x=.

Когда вы задаете условие y(x0) для функции с различными односторонними пределами в x0, dsolve обрабатывает условие как предел справа lim xx0+.

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

свернуть все

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

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

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

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

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

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

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

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

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

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

Опция, чтобы использовать внутренние упрощения, заданные как true или false.

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

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

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

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

свернуть все

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

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

Советы

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

    Warning: Explicit solution could not be found;
    implicit solution returned.
  • Если dsolve не может найти явное или неявное решение, затем оно выдает предупреждение и возвращает пустой sym. В этом случае попытайтесь найти числовое решение с помощью MATLAB® ode23 или ode45 функция. Иногда, выход является эквивалентным дифференциальным уравнением более низкоуровневым или интегралом.

  • dsolve не всегда возвращает полные решения даже если 'IgnoreAnalyticConstraints' false.

  • Если dsolve возвращает функцию, которая имеет различные односторонние пределы в x0 и вы задаете условие y(x0), затем dsolve обрабатывает условие как предел справа.

Алгоритмы

Если вы не устанавливаете '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 (tan (x)) = x

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

    • Wk (x · e x) = x для всех индексов ветви k функции Ламберта В.

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

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

Вопросы совместимости

развернуть все

Предупреждает запуск в R2019b

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