Дифференциальные уравнения и системный решатель
Входные параметры вектора символов будут удалены в будущем релизе. Вместо этого используйте 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
,Name,Value
)Name,Value
.
Задайте дифференциальное уравнение при помощи ==
и представляйте дифференцирование при помощи функции diff
. Затем решите уравнение при помощи dsolve
.
Решите уравнение .
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)
.
Решите уравнение .
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
, ...
из решения.
Решите уравнение с условием .
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)
Решите дифференциальное уравнение второго порядка с двумя условиями, и . Создайте второе условие путем присвоения 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
возвращает структуру, содержащую решения.
Решите систему уравнений
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
применяет упрощения, которые не обычно правильны, но производят простые решения. Для получения дополнительной информации см. Алгоритмы. Вместо этого включайте эти особые случаи путем выключения этих упрощений.
Решить где с и без упрощений. Выключите упрощения установкой '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
.
Если 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:
A·) 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
.
Решения полиномиальных уравнений должны быть завершены.
functionalDerivative
| linsolve
| ode23
| ode45
| odeToVectorField
| solve
| syms
| vpasolve