odeToVectorField

Уменьшите порядок дифференциальных уравнений до первого порядка

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

Описание

пример

V = odeToVectorField(eqn1,...,eqnN) преобразует дифференциальные уравнения более высокого порядка eqn1,...,eqnN в систему дифференциальных уравнений первого порядка, возвращаемую как символьный вектор.

пример

[V,S] = odeToVectorField(eqn1,...,eqnN) преобразует eqn1,...,eqnN и возвращает два символьных вектора. Первый вектор V совпадает с выходами предыдущего синтаксиса. Второй вектор S показаны замены, сделанные для получения V.

Примеры

свернуть все

Задайте дифференциальное уравнение второго порядка:

d2ydt2+y2t=3t.

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

syms y(t)
eqn = diff(y,2) + y^2*t == 3*t;
V = odeToVectorField(eqn)
V = 

(Y23t-tY12)[Y (2); 3 * t - t * Y (1) ^ 2]

Элементы V представляют систему дифференциальных уравнений первого порядка, где V[i] = Yi и Y1=y. Вот, выход V представляет эти уравнения:

dY1dt=Y2

dY2dt=3t-tY12.

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

При уменьшении порядка дифференциальных уравнений возвращайте замены, которые odeToVectorField делает путем определения второго выходного аргумента.

syms f(t) g(t)
eqn1 = diff(g) == g-f;
eqn2 = diff(f,2) == g+f;
eqns = [eqn1 eqn2];
[V,S] = odeToVectorField(eqns)
V = 

(Y2Y1+Y3Y3-Y1)[Y (2); Y (1) + Y (3); Y (3) - Y (1)]

S = 

(fDfg)[f; Df; g]

Элементы V представляют систему дифференциальных уравнений первого порядка, где V[i] = Yi. Выходные данные S показывают выполняемые замены, S [1] =Y1=f, S [2] =Y2 = diff(f), и S [3] =Y3=g.

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

Преобразуйте следующее дифференциальное уравнение второго порядка в систему дифференциальных уравнений первого порядка при помощи odeToVectorField.

d2ydt2=(1-y2)dydt-y.

syms y(t)
eqn = diff(y,2) == (1-y^2)*diff(y)-y;
V = odeToVectorField(eqn)
V = 

(Y2-Y12-1Y2-Y1)[Y (2); - (Y (1) ^ 2 - 1) * Y (2) - Y (1)]

Сгенерируйте указатель на функцию MATLAB из V при помощи matlabFunction.

M = matlabFunction(V,'vars',{'t','Y'})
M = function_handle with value:
    @(t,Y)[Y(2);-(Y(1).^2-1.0).*Y(2)-Y(1)]

Задайте интервал решения, который будет [0 20] и начальные условия, которые будут y(0)=2 и y(0)=0. Решить систему дифференциальных уравнений первого порядка можно используя ode45.

interval = [0 20];
yInit = [2 0];
ySol = ode45(M,interval,yInit);

Далее постройте график решения y(t) в пределах интервала t = [0 20]. Сгенерируйте значения t при помощи linspace. Оцените решение для y(t), который является первым индексом в ySol, вызовом deval функция с индексом 1. Постройте график решения с помощью plot.

tValues = linspace(0,20,100);
yValues = deval(ySol,tValues,1);
plot(tValues,yValues)

Figure contains an axes. The axes contains an object of type line.

Преобразуйте дифференциальное уравнение второго порядка y(x)=x с начальным условием y(0)=a в систему первого порядка.

syms y(x) a
eqn = diff(y,x,2) == x;
cond = y(0) == a;
V = odeToVectorField(eqn,cond)
V = 

(Y2x)[Y (2); x]

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

свернуть все

Дифференциальные уравнения более высокого порядка, заданные как символьное дифференциальное уравнение или массив символьных дифференциальных уравнений. Используйте == оператор для создания уравнения. Используйте diff функция для указания дифференциации. Для примера представьте d2y (<reservedrangesplaceholder1>) / dt2 = t y (t) путем ввода следующей команды.

syms y(t)
eqn = diff(y,2) == t*y;

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

свернуть все

Дифференциальные уравнения первого порядка, возвращенные как символьное выражение или вектор символьных выражений. Каждый элемент этого вектора является правой стороной дифференциального уравнения первого порядка Y [i] ′ = V [i].

Замены в уравнениях первого порядка, возвращенные как вектор символьных выражений. Элементы вектора представляют замены, такие что S(1) = Y[1], S(2) = Y[2],….

Совет

  • Чтобы решить получившуюся систему дифференциальных уравнений первого порядка, сгенерируйте MATLAB® указатель на функцию с использованием matlabFunction с V как вход. Затем используйте сгенерированный указатель на функцию MATLAB в качестве входов для численного решателя MATLAB ode23 или ode45.

  • odeToVectorField может преобразовывать только квазилинейные дифференциальные уравнения. То есть производные высшего порядка должны появиться линейно. Для примера, odeToVectorField можно преобразовать y * y ″ (t) = - t2 потому что его можно переписать как y(t) = - t2/ y. Однако он не может преобразовать y(t)2 = – t2 или sin (y (t)) = - t2.

Алгоритмы

Для преобразования дифференциального уравнения n-го порядка

an(t)y(n)+an1(t)y(n1)++a1(t)y+a0(t)y+r(t)=0

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

Y1=yY2=yY3=yYn1=y(n2)Yn=y(n1)

Используя новые переменные, он переписывает уравнение как систему n дифференциальных уравнений первого порядка:

Y1=y=Y2Y2=y=Y3Yn1=y(n1)=YnYn=an1(t)an(t)Ynan2(t)an(t)Yn1...a1(t)an(t)Y2a0(t)an(t)Y1+r(t)an(t)

odeToVectorField возвращает правые стороны этих уравнений как элементы вектора V и замены, сделанные в качестве второго выхода S.

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

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

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

См. также

| | |

Введенный в R2012a