Dérivé sans coordonnées
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
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.
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.
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)