odeToVectorField

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

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

Синтаксис

V = odeToVectorField(eqn1,...,eqnN)
[V,S] = odeToVectorField(eqn1,...,eqnN)

Описание

пример

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 =
           Y[2]
 3*t - t*Y[1]^2

Элементы V представляют систему дифференциальных уравнений потому что y = Y [1] и Y [i] ′ = V [i]. Здесь, этот конкретный вывод представляет эти уравнения:

  • diff(Y[1],t) = Y[2]

  • diff(Y[2],t) = 3*t - t*Y[1]^2

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

Возвратите замены, сделанные при сокращении порядка

При сокращении порядка дифференциальных уравнений возвратите замены, которые 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 =
        Y[2]
 Y[1] + Y[3]
 Y[3] - Y[1]

S =
  f
 Df
  g

От S у нас есть S[1] = Y[1] = f, S[2] = Y[2] = diff(f) и S[3] = Y[3] = g.

Численно решите дифференциальное уравнение высшего порядка

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

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

dy2dx2=(1y2)dydxy.

syms y(t)
eqn = diff(y,2) == (1-y^2)*diff(y)-y;
V = odeToVectorField(eqn)
V =
                       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];
y0 = [2 0];
ySol = ode45(M,interval,y0);

Сгенерируйте значения t в интервале при помощи функции linspace. Для этих значений оцените решение для y, который является первым индексом в ySol путем вызывания функции deval с индексом 1. Постройте решение.

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 =
 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.

Алгоритмы

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

Смотрите также

| | |

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