V Matlabu:

  • Užitečné je vědět, že Symbolic Math Toolbox for Matlab umí zadefinovat nejen symbolické parametry, ale symbolické funkce (pro obojí pomocí funkce syms). Ty je pak možné derivovat podle jejich proměnných.
  • Matlabská funkce functionalDerivative() pro zadanou funkci L(t,x(t),x'(t)) vrací levou stranu Lagrangeovy rovnice (až na znaménko, ta jejich konvence je, že funkcionální/variační derivace je Ly-d/dt Ly', tedy naše levá strana Lagrangeovy rovnice vynásobená -1). Tedy udělá velkou část "ruční práce" za nás.
  • Bez použití výše uvedené funkce functionalDerivative() je ale možné tu levou stranu Lagrangeovy rovnice sestavit ručně. Poměrně nově je v symbolickém toolboxu možno "derivovat i podle derivace", tedy výraz diff(L,diff(q(t),t)) projde. Celou Lagrangeovu rovnici podle q je tak možno napsat jako diff(diff(L,diff(phi(t),t)),t) - diff(L,phi(t)) == 0. Pro zajímavost (a porozumění některým starším matlabským kódům): ještě poměrně nedávno bylo nutné zavádět substituce pomocí subs(), aby tak místo diff(q(t),t) byla nějaký obecná symbolická proměnná a ne funkce, a pak teprve derivovat L podle této proměnné a pak zase dosazovat zpátky funkce, aby bylo možno derivovat podle času – strašná otrava.
  • Lagrangeova rovnice je rovnicí druhého řádu. Pokud chceme stavový model, musíme řád redukovat. A to standardně provádíme zavedením další proměnné. Typicky v mechanice kromě pozic x(t) a/nebo úhlů theta(t) zavádíme rychlosti v(t) a/nebo úhlové rychlosti omega(t). Toto lze s využitím Symbolic Math Toolboxu zautomatizovat pomocí funkce reduceDifferentialOrder().
  • V případě, že Lagrangeových rovnice je více, se může lehce stát, že alespoň v jedné rovnice se objevují druhé derivace alespoň dvou veličin. Přímé vyjádření druhých derivací coby funkcí všeho možného tedy není možné. Nejdříve musíme takovou soustavu rovnic vyřešit. V tomto okamžiku se však na rovnice nedíváme jako na diferenciální rovnice, nýbrž těmi neznámými tady jsou ty druhé derivace proměnných a tyto chceme vyjádřit právě jako funkce všeho možného ostatního (parametrů, prvních i nultých derivací proměnných). Buď takové řešení soustavy rovnic budeme realizovat "ručně" pomocí solveru solve(), a nebo využijeme high-level funkci massMatrixForm() následovanou symbolickým řešení soustavy lineárních rovnic pomocí zpětného lomítka.
  • Na závěr různých manipulací se symbolickými výrazy v Matlabu budeme jistě chtít převést odvozené rovnice do formátu klasické matlabské funkce, kterou můžeme mimo jiné použít i coby vstup do numerického solveru jako například ode45(). Pro tento účel se velmi hodí převodní funkce odeFunction().

V Mathematice:

  • Velmi pohodlná schopnost Mathematicy derivovat funkci podle derivace jiné funkce. Tedy přesně ta schopnost, kterou potřebujeme při sestavení Lagrangeovy rovnice (ještě nedávno ji Symbolic Math Toolbox pro Matlab neměl). Příklad: LagrEq = D[D[L, D[\(Theta][t], t]], t] - D[L, \(Theta][t]]== 0.

V Pythonu:

V Julii:

  • Je možné z ní volat funkce ze SymPy, a to pohodlně pomocí balíku SymPy.jl.
Naposledy změněno: úterý, 27. října 2020, 15.44