Как найти Лагранж в MATLAB, используя diff и символические переменные - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь использовать уравнение Лагранжа для вывода ma = -kx из кинетической и потенциальной энергии массы на пружине, однако я сталкиваюсь с ошибками ниже в обеих следующих частях кода. Я понимаю, что ошибка говорит о том, что я не могу использовать символическую переменную в качестве второго аргумента diff, но в справочных документах MATLAB говорится, что для частных производных вы пишете в этом формате?

Метод 1:

clear
clc

syms m K t x(t) x_dot(t)

T = 0.5 * m * x_dot^2
V = 0.5 * K * x^2

L = T - V

temp = diff(L, x_dot)

Метод 2:

clear
clc

syms m K t x(t) x_dot

x_dot = diff(x)

T = 0.5 * m * x_dot^2
V = 0.5 * K * x^2

L = T - V

temp = diff(L, x_dot)

Ошибка:

Error using sym/diff (line 26)
Arguments, except for the first, must not be symbolic functions.

Если я удаляю (t) из символического инициализатора для x, тоошибка исчезает, но, насколько я знаю, мне понадобится x, чтобы быть в терминах t позже по линии, поскольку я буду дифференцировать x_dot относительно t, чтобы получить ускорение.

РЕДАКТИРОВАТЬ ...

Это то, что я хотел достичь, однако я не знаю, можно ли это сделать без введения подстановок?

clear
clc

syms m K t x(t) v p

x_dot = diff(x);

T = 0.5 * m * x_dot^2;
V = 0.5 * K * x^2;

L_sym = T - V;

L1 = subs(L_sym, x_dot(t),v);
L = subs(L1, x(t), p);

temp = diff(L(t), v);

LHS = diff(subs(temp, v, x_dot(t)) / diff(t));
RHS = subs(diff(L(t), p), p, x(t));

eqn = LHS == RHS
...