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)

Преобразуйте дифференциальное уравнение второго порядка 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 функция, чтобы указать на дифференцирование. Например, представляйте d 2y (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.

Алгоритмы

Преобразовывать дифференциальное уравнение th-порядка 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