Dérivé sans coordonnées

Sep 08 2020

Compte tenu de la fonction \begin{align*} f \colon \mathbb{R}^n &\to \mathbb{R}^n\\ v&\mapsto \dfrac{v}{\|v\|}, \end{align*} Je voudrais calculer la dérivée de $f$, C'est $df(v)$. Il est possible de le dériver à la main, ce qui conduit à

$$df(v)=\dfrac{1}{\| v\|}\Big(I_n - \dfrac{v}{\|v\|}\otimes \dfrac{v}{\|v\|}\Big)$$

où $I_n$ est la matrice d'identité du second ordre.

Je pense que Mathematica ne peut pas trouver que l'utilisation de fonctions intégrées simples (sans définir explicitement v = {v1, v2, v3}si$n=3$par exemple). Certains packages sont dédiés à la géométrie différentielle (voir Package de formes différentielles libres de coordonnées ou Add-ons de géométrie différentielle pour Mathematica ) mais je n'ai pas réussi à réaliser le calcul ci-dessus. Tout indice serait apprécié.


Modifier Pour ceux d'entre vous qui souhaitent trouver la formule ci-dessus, vous pouvez définir$g(t)=f(v(t))=\big(v(t)\cdot v(t)\big)^{1/2}v(t)$ et calculer $g'(t)$ avec la règle de la chaîne. $g'(t)$ est une fonction linéaire de $v'(t)$ car:

$$g'(t)=\dfrac{df}{dv}(v(t)) v'(t)$$

Prendre le coefficient devant $v'(t)$ donne l'expression ci-dessus.

Or, la mise en œuvre naïve de cette approche comme suit échoue car elle ne capture pas la multidimensionnalité de f:

f[v_] = v/Norm[v]
h[t_] = D[f[v[t]], t]/v'[t] // Simplify
h[t] /. Norm'[v[t]] -> v[t]/Norm[v[t]] // Simplify
(* (Norm[v[t]]^2 - v[t]^2)/Norm[v[t]]^3 *)

Réponses

8 vsht Sep 15 2020 at 15:39

Une solution utilisant FeynCalc serait d'écrire

ex = CVD[v, i]/Sqrt[CSPD[v, v]]

qui correspond à $ \frac{v^i}{\sqrt{v^2}} $( CVDdésigne un$D-1$vecteur cartésien dimensionnel, CSPDest un produit scalaire cartésien en$D-1$dimensions). Puis en utilisant la routine ThreeDivergence($\nabla^j$)

ThreeDivergence[ex, CVD[v, j]]

nous trouvons $ \frac{\delta ^{i j}}{\sqrt{v^2}}-\frac{v^i v^j}{\left(v^2\right)^{3/2}}. $

Bien sûr, FeynCalc n'est pas un outil pour faire de la géométrie différentielle. Les routines tensorielles ne couvrent que ce dont on a généralement besoin dans les calculs de diagramme de Feynman. Je suppose donc que pour des tâches plus sérieuses, l'OP aurait encore besoin de se familiariser avec les packages d'algèbre tensorielle dédiés.

8 MichaelSeifert Sep 16 2020 at 00:24

Vous pouvez abuser de la fonctionnalité de dérivée variationnelle xTensorpour ce faire:

<< xAct`xTensor`
DefManifold[M, dim, IndexRange[a, m]];
DefMetric[1, metric[-a, -b], PD, PrintAs -> "\[Delta]", 
  FlatMetric -> True, SymbolOfCovD -> {",", "\[PartialD]"}];

DefTensor[v[a], M]
DefScalarFunction[ff]

La fonction ffici est un substitut pour «l'inverse de la norme». Il doit être typé comme une fonction scalaire de certains arguments scalaires, il xTensorsait donc comment prendre sa dérivée. (Essayer de le faire directement en utilisant Sqrtjette des erreurs; je ne sais pas pourquoi.)

VarD[v[c], PD][v[a] ff[v[b] v[-b]]] // ScreenDollarIndices // ContractMetric
% /. ff -> (#^(-1/2) &)

Une fois que la dérivée variationnelle est prise, vous pouvez ensuite définir la fffonction de votre choix, y compris (dans ce cas) la fonction de puissance -1/2.

Notez que la dimensionnalité de la variété dimreste non spécifiée dans ce code. Il peut être nécessaire de le spécifier dans certains cas connexes (pour simplifier ou pour calculer des traces de quantités), mais cela ne semble pas nécessaire ici.

8 CarlWoll Sep 16 2020 at 01:03

Vous pourriez peut-être utiliser l'approche suivante:

Clear[VectorD]

VectorD[e_, v_] := ReplaceAll[
    D[e, VectorD, NonConstants->{v}],
    s_Dot:>TensorReduce[s,Assumptions->v ∈ Vectors[d]]
]

VectorD /: D[s_. v_,VectorD,NonConstants->{v_}] := s IdentityMatrix[d] + 
    TensorProduct[v, D[s, VectorD, NonConstants->{v}]]
VectorD /: D[Transpose[f_], VectorD, NonConstants->{x_}] := Transpose[
    D[f, VectorD, NonConstants->{x}]
]
VectorD /: D[a_Dot|a_Times|a_TensorProduct, VectorD, NonConstants->{x_}] := Sum[
    MapAt[D[#, VectorD, NonConstants->{x}]&, a, i],
    {i,Length[a]}
]

Ensuite:

VectorD[v/Sqrt[v.v], v]

IdentityMatrix [d] / Sqrt [vv] - TensorProduct [v, v] / (vv) ^ (3/2)