exponenta event banner

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 возвращает явное решение в терминах функции Ламберта 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)[(subs(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 + log(a + 1))) - a)^sym(2/3)

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

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

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

Решите дифференциальное уравнение второго порядка (x2-1) 2∂2∂x2y (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', true)

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

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))/33792 + (169*(x + 1)^sym(19/4))/184320]

Поиск других серийных решений вокруг точки расширения путем установки '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. Функция имеет правый предел, limx→0+ e-1x = 0, но имеет неопределенный левый предел, limx→0 - e-1x=∞.

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

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

свернуть все

Дифференциальное уравнение или система уравнений, заданная как символическое уравнение или вектор символических уравнений. Задайте дифференциальное уравнение с помощью == оператор. Если 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, заданная как число или символьное число, переменная, функция или выражение. Задание этой опции возвращает решение дифференциального уравнения в терминах ряда Пюисё (степенного ряда, допускающего отрицательные и дробные экспоненты). Точка расширения не может зависеть от переменной серии. Например, см. раздел Поиск последовательного решения дифференциального уравнения.

Типы данных: 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, определяемый как положительное целое число или символическое положительное целое число. Задание этой опции возвращает решение дифференциального уравнения в терминах ряда Пюисё (степенного ряда, допускающего отрицательные и дробные экспоненты). Порядок усечения n - экспонента в O-члене: O (varn) или O (var − n).

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

свернуть все

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

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

Совет

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

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

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

Алгоритмы

Если не установлен 'IgnoreAnalyticConstraints' кому false, то dsolve применяет следующие правила при решении уравнения:

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

      (a· b) c = ac· bc.

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

      (ab)  c = ab· c.

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

    • log (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

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

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

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

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

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

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

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