อนุพันธ์ที่ไม่มีพิกัด

Sep 08 2020

รับฟังก์ชั่น \begin{align*} f \colon \mathbb{R}^n &\to \mathbb{R}^n\\ v&\mapsto \dfrac{v}{\|v\|}, \end{align*} ฉันต้องการคำนวณอนุพันธ์ของ $f$, นั่นคือ $df(v)$. เป็นไปได้ที่จะได้มาด้วยมือซึ่งนำไปสู่

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

ที่ไหน $I_n$ คือเมทริกซ์ลำดับที่สองของเอกลักษณ์

ฉันเชื่อว่าMathematicaไม่พบว่าการใช้ฟังก์ชันง่ายๆในตัว (โดยไม่ได้กำหนดv = {v1, v2, v3}if อย่างชัดเจน$n=3$เช่น) บางแพ็กเกจมีไว้สำหรับรูปเรขาคณิตเชิงอนุพันธ์ (โปรดดูชุดรูปแบบเชิงอนุพันธ์อิสระหรือโปรแกรมเสริมรูปทรงเรขาคณิตเชิงอนุพันธ์สำหรับ Mathematica ) แต่ฉันคำนวณข้างต้นไม่สำเร็จ คำแนะนำใด ๆ จะได้รับการชื่นชม


แก้ไขสำหรับผู้ที่สนใจวิธีค้นหาสูตรข้างต้นคุณสามารถกำหนดได้$g(t)=f(v(t))=\big(v(t)\cdot v(t)\big)^{1/2}v(t)$ และคำนวณ $g'(t)$ ด้วยกฎลูกโซ่ $g'(t)$ เป็นฟังก์ชันเชิงเส้นของ $v'(t)$ เพราะ:

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

นำค่าสัมประสิทธิ์หน้า $v'(t)$ ให้นิพจน์ข้างต้น

ตอนนี้การนำแนวทางนี้ไปใช้อย่างไร้เดียงสาดังต่อไปนี้ล้มเหลวเนื่องจากไม่ได้จับภาพหลายมิติของ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 *)

คำตอบ

8 vsht Sep 15 2020 at 15:39

วิธีแก้ปัญหาโดยใช้FeynCalcคือการเขียน

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

ซึ่งสอดคล้องกับ $ \frac{v^i}{\sqrt{v^2}} $( CVDหมายถึงก$D-1$เวกเตอร์คาร์ทีเซียนมิติCSPDคือผลิตภัณฑ์คาร์ทีเซียนสเกลาร์ใน$D-1$มิติข้อมูล) จากนั้นใช้รูทีนThreeDivergence($\nabla^j$)

ThreeDivergence[ex, CVD[v, j]]

เราพบ $ \frac{\delta ^{i j}}{\sqrt{v^2}}-\frac{v^i v^j}{\left(v^2\right)^{3/2}}. $

แน่นอนว่า FeynCalc ไม่ใช่เครื่องมือในการสร้างเรขาคณิตเชิงอนุพันธ์ กิจวัตรเทนเซอร์ครอบคลุมเฉพาะสิ่งที่มักต้องการในการคำนวณแผนภาพไฟน์แมน ดังนั้นฉันคิดว่าสำหรับงานที่จริงจังมากขึ้น OP ยังคงต้องทำความคุ้นเคยกับแพ็คเกจพีชคณิตเทนเซอร์โดยเฉพาะ

8 MichaelSeifert Sep 16 2020 at 00:24

คุณสามารถละเมิดฟังก์ชันอนุพันธ์รูปแบบต่างๆxTensorเพื่อทำสิ่งนี้:

<< 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]

ฟังก์ชั่นffนี้เป็นแบบสแตนด์อินสำหรับ "the inverse of the norm" จะต้องพิมพ์เป็นฟังก์ชันสเกลาร์ของอาร์กิวเมนต์สเกลาร์ดังนั้นจึงควรxTensorรู้วิธีหาอนุพันธ์ (พยายามทำสิ่งนี้โดยตรงโดยใช้Sqrtข้อผิดพลาดในการโยนฉันไม่แน่ใจว่าทำไม)

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

เมื่อได้อนุพันธ์แบบแปรผันแล้วคุณสามารถตั้งค่าffเป็นฟังก์ชันใดก็ได้ที่คุณต้องการรวมถึง (ในกรณีนี้) ฟังก์ชันกำลัง -1/2

โปรดทราบว่ามิติข้อมูลของท่อร่วมdimยังคงไม่ได้ระบุไว้ในรหัสนี้ อาจจำเป็นต้องระบุในบางกรณีที่เกี่ยวข้อง (สำหรับการทำให้เข้าใจง่ายหรือเพื่อคำนวณร่องรอยของปริมาณ) แต่ดูเหมือนจะไม่จำเป็นที่นี่

8 CarlWoll Sep 16 2020 at 01:03

บางทีคุณอาจใช้แนวทางต่อไปนี้:

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]}
]

จากนั้น:

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

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