dsolve

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

Поддержка вектора символов или строковых входов будет удалена в следующем релизе. Вместо этого используйте syms объявить переменные и заменить такие входы, как dsolve('Dy = -3*y') с syms y(t); dsolve(diff(y,t) == -3*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=ay.

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

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

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

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

Задайте производную второго порядка 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+C2eatC1 * exp ((-sqrt (a) * t)) + C2 * exp ((sqrt (a) * t))

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

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

syms y(t) a
eqn = diff(y,t) == a*y;
cond = y(0) == 5;
ySol(t) = dsolve(eqn,cond)
ySol(t) = 5eat5 * 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) = 

eatab+12a+e-atab-12a(exp ((a * t)) * (a * b + 1) )/( 2 * a) + (exp ((-a * t)) * (a * b - 1) )/( 2 * a)

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

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

dydt=zdzdt=-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) = C1cos(t)+C2sin(t)C1 * cos (t) + C2 * sin (t)
zSol(t) = S.z
zSol(t) = C2cos(t)-C1sin(t)C2 * cos (t) - C1 * 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) = C1cos(t)+C2sin(t)C1 * cos (t) + C2 * sin (t)
zSol(t) = C2cos(t)-C1sin(t)C2 * cos (t) - C1 * sin (t)

Решите дифференциальное уравнение ty(t)=e-y(t)+y(t). dsolve возвращает явное решение в терминах функции Lambert W, которая имеет постоянное значение.

syms y(t)
eqn = diff(y) == y+exp(-y)
eqn(t) = 

t y(t)=e-y(t)+y(t)diff (y (t), t) = = exp ((-y (t))) + y (t)

sol = dsolve(eqn)
sol = Wlambertw0(-1)lambertw (sym (0), -1)

Чтобы вернуть неявные решения дифференциального уравнения, установите 'Implicit' опция для true. Неявное решение имеет форму F(y(t))=g(t).

sol = dsolve(eqn,'Implicit',true)
sol = 

(eyyey+1dy|y=y(t)=C1+te-y(t)ey(t)y(t)+1=0)[(нижние индексы (int (exp (y )/( y * exp (y) + 1)), y, 'IgnoreSpecialCases', true, 'IgnoreAnalyticConstraints', true), y, y (t))) = = = C1 + t; exp ((-y (t))) * (exp (y (t)) * y (t) + 1) = = 0]

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

syms y(x)
eqn = diff(y) == (x-exp(-x))/(y(x)+exp(y(x)));
S = dsolve(eqn)
Warning: Unable to find symbolic solution.
 
S =
 
[ empty sym ]
 

В качестве альтернативы можно попробовать найти неявное решение дифференциального уравнения путем определения 'Implicit' опция для true. Неявное решение имеет форму F(y(x))=g(x).

S = dsolve(eqn,'Implicit',true)
S = 

ey(x)+y(x)22=C1+e-x+x22exp (y (x)) + y (x) ^ 2/2 = = C1 + exp ((-x)) + x ^ 2/2

Решите дифференциальное уравнение 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+log(a+1)-a2/3(exp (((3 * t )/2 - (3 * a )/2 + журнал (a + 1))) - a) ^ sym (2/3)

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

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

{{{σ1} если  -π2<σ2{σ1,--a+e3t2-3a2+log(a+-12+σ33/2)+2πC2i2/312+σ3} если  σ2-π2 если  C2Z если  C2Zwhere  σ1=-a+e3t2-3a2+log(a+1)+2πC2i2/3  σ2=angle(e3C12+3t2-a)  σ3=3i2

Решить дифференциальное уравнение второго порядка (x2-1)22x2y(x)+(x+1)xy(x)-y(x)=0. dsolve возвращает решение, которое содержит член с недооцененным интегралом.

syms y(x)
eqn = (x^2-1)^2*diff(y,2) + (x+1)*diff(y) - y == 0;
S = dsolve(eqn)
S = 

C2x+1+C1x+1e12x-11-x1/4x+19/4dxC2 * (x + 1) + C1 * (x + 1) * int (((exp ((1/( 2 * (x - 1)))) * (1 - x) ^ sym (1/4) )/( x + 1) ^ sym (9/4)), x, 'IgnoreSpecialCases', true, 'IgnoreAnalyticConstraints'

Чтобы вернуть последовательные решения дифференциального уравнения вокруг x=-1, установите 'ExpansionPoint' на -1. dsolve возвращает два линейно независимых решения в терминах расширения серии Puiseux.

S = dsolve(eqn,'ExpansionPoint',-1)
S = 

(x+11x+11/4-5x+13/44+5x+17/448+5x+111/4336+115x+115/433792+169x+119/4184320)[x + 1; 1/( x + 1) ^ sym (1/4) - (5 * (x + 1) ^ sym (3/4) )/4 + (5 * (x + 1) ^ sym (7/4) )/48 + (5 * (x + 1) ^ sym (11/4 )/336 + (115 * (x + 1) ^ sym (15/4) )/33799

Найдите другие последовательные решения вокруг точки расширения путем установки 'ExpansionPoint' на Inf.

S = dsolve(eqn,'ExpansionPoint',Inf)
S = 

(x-16x2-18x416x2+18x4+190x5+1)[x - 1/( 6 * x ^ 2) - 1/( 8 * x ^ 4); 1/( 6 * x ^ 2) + 1/( 8 * x ^ 4) + 1/( 90 * x ^ 5) + 1]

Порядок усечения по умолчанию для последовательного расширения равен 6. Чтобы получить больше членов в решениях серии Puiseux, установите 'Order' до 8.

S = dsolve(eqn,'ExpansionPoint',Inf,'Order',8)
S = 

(x-16x2-18x4-190x5-37336x616x2+18x4+190x5+37336x6+371680x7+1)[x - 1/( 6 * x ^ 2) - 1/( 8 * x ^ 4) - 1/( 90 * x ^ 5) - 37/( 336 * x ^ 6); 1/( 6 * x ^ 2) + 1/( 8 * x ^ 4) + 1/( 90 * x ^ 5) + 37/( 336 * x ^ 6) + 37/( 1680 * x ^ 7) + 1]

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

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

C1+e-1xC1 + exp ((-1/x))

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

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

e-1x+1exp ((-1/x)) + 1

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

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

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

свернуть все

Дифференциальное уравнение или система уравнений, заданная в виде символьного уравнения или вектора символьных уравнений. Задайте дифференциальное уравнение при помощи == оператор. Если eqn является символьным выражением (без правой стороны), решатель принимает, что правая сторона равна 0, и решает уравнение eqn == 0.

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

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

Задайте систему дифференциальных уравнений при помощи вектора уравнений, как в syms y(t) z(t); S = dsolve([diff(y,t) == z, diff(z,t) == -y]). Здесь, y и z должны быть символьными функциями, которые зависят от символьных переменных, которые t в этом случае. Правой стороной должны быть символические выражения, которые зависят от t, y и z. Обратите внимание, что Symbolic Math Toolbox™ в настоящее время не поддерживает составные символьные функции, то есть символические функции, которые зависят от других символьных функций.

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

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

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

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

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

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

Точка расширения решения ряда Puiseux, заданная в виде числа или символьного числа, переменной, функции или выражения. Установка этой опции возвращает решение дифференциального уравнения в терминах ряда Puiseux (степень ряда, который допускает отрицательные и дробные экспоненты). Точка расширения не может зависеть от переменной серии. Для примера смотрите Нахождение Последовательного Решения Дифференциального Уравнения.

Типы данных: single | double | sym
Поддержка комплексного числа: Да

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

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

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

Опция для возврата неявного решения, заданная как false или true. Для дифференциального уравнения с переменными x и y (x) неявное решение имеет вид F (y (x)) = g (x).

По умолчанию решатель пытается найти явное решение y (x) = f (x) аналитически при решении дифференциального уравнения. Если dsolve не удается найти явное решение, тогда можно попробовать найти решение в неявной форме, задав 'Implicit' опция для true.

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

Порядок усечения решения серии Puiseux, заданный как положительное целое число или символическое положительное целое число. Установка этой опции возвращает решение дифференциального уравнения в терминах ряда Puiseux (степенях ряда, которые допускают отрицательные и дробные экспоненты). Порядок <reservedrangesplaceholder1> усечения является экспонентом в O -term:O(varn) или O(varn).

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

свернуть все

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

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

Совет

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

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

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

Алгоритмы

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

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

      (a · b)c = ac· bc.

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

      (ab)c = ab·c.

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

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

    • asin (sin (x )) = x, acos (cos (x )) = x, atan ( tan (x)) = x

    • asinh (sinh (x )) = x, acosh (cosh (x )) = x, atanh (tanh  (x)) = x

    • W k (x· ex) = x для всех индексов ветви k функции Lambert W.

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

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

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

расширить все

Предупреждает, начиная с R2019b

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