exponenta event banner

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 (t )/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-го порядка

a (t) y (n) + a 1 (t) y (n 1) +... + a1 (t) y′+a0 (t) y + r (t) = 0

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

Y1=yY2=y′Y3=y ... Yn 1 = y (n 2) Yn = y (n − 1)

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

Y1′=y′=Y2Y2′=y″=Y3... Yn−1′=y (n 1) =YnYn′=−an−1 (t) an (t) Yn an 2 (t) an (t) Yn 1 ... a1 (t) an (t) Y2 − a0 (t) an (t) Y1 + r (t) an (t)

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

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

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

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

См. также

| | |

Представлен в R2012a