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 при помощи == оператор. Определение условия устраняет произвольные постоянные, такие как C1C2 , ..., из решения.

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 возвращает явное решение в терминах функции Ламберта В, которая имеет постоянное значение.

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', верный, 'IgnoreAnalyticConstraints', верный), 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 + журнал (+ 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', верный, 'IgnoreAnalyticConstraints', верный)

Возвратить серийные решения дифференциального уравнения вокруг 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. Чтобы получить больше условий в серийных решениях Пюизе, установите '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 в этом случае. Правая сторона должна быть символьными выражениями, которые зависят от tY и z. Обратите внимание на то, что Symbolic Math Toolbox™ в настоящее время не поддерживает составные символьные функции, то есть, символьные функции, которые зависят от другого символьные функции.

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

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

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

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

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

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

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

Типы данных: 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'.

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

      ) 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