2
$\begingroup$

I am trying to create a notebook to evaluate a line integral Line Integral on SO(3). Everything is going fine up to this point:

g[t_] := {t, t^2, t^3}
limits = {t, 0.5, 1.5}
M1[{w_, x_, y_, z_}] := w*x*y*z
M2[{w_, x_, y_, z_}] := w*x*y*z
M3[{w_, x_, y_, z_}] := w*x*y*z
M4[{w_, x_, y_, z_}] := w*x*y*z
M[{w_, x_, y_, z_}] := {M1[{w, x, y, z}], M2[{w, x, y, z}], M3[{w, x, y, z}], M4[{w, x, y, z}]}
r[{psi_, th_, phi_}] := {Cos[(phi + psi)/2]*Cos[th/2], Cos[(phi - psi)/2]*Sin[th/2], Sin[(phi - psi)/2]*Sin[th/2], Sin[(phi + psi)/2]*Cos[th/2]}
r2[psi_, th_, phi_] := {Cos[(phi + psi)/2]*Cos[th/2], Cos[(phi - psi)/2]*Sin[th/2], Sin[(phi - psi)/2]*Sin[th/2], Sin[(phi + psi)/2]*Cos[th/2]}
J[psi_, th_, phi_] := D[r2[psi, th, phi], {{psi, th, phi}}]
Mst[psi_, th_, phi_] := M[r[psi, th, phi]].J[psi, th, phi]

This gives me the pullback of $\mathbf{M}$, $\mathbf{M}^*$, as a function of $\psi, \theta$, and $\phi$.

The problem occurs when I try to substitute $g(t)$ (really, $\gamma(t)$) in for $(\psi, \theta, \phi)$ in $\mathbf{M}^*$:

Mstg[t_] := Mst[g[t]]
Mstg[t]
General::ivar: t^2 is not a valid variable.

I would like to go on to do something like

R[t_] := r[g[t]]
Rp[t_] := D[R[t], t]
Integrate[Mstg[t].Rp[t], limits]

getting the path $\mathbf{R}$ as a function of t and computing its derivative and computing the line integral. How do I substitute $\gamma(t)$ into the expressions for $\mathbf{M}^*(\psi, \theta, \phi)$ (= Mst[psi, th, phi]) and $\vec{r}(\psi, \theta, \phi)$ (= r[psi, th, phi]) and differentiate $\mathbf{R}(t) = \vec{r}[\gamma(t)]$ with respect to $t$ and evaluate the line integral?

(To be clear, there are two problem lines, Mstg[t_] := Mst[g[t]] and R[t_] := r[g[t]] leading to Rp[t_] := D[R[t], t].)

Any assistance you provide is appreciated.

$\endgroup$
  • 1
    $\begingroup$ You do not define r2. Anyway, try J[psi_, th_, phi_] = D[r2[psi, th, phi], {{psi, th, phi}}] $\endgroup$ – yarchik Jun 26 '20 at 6:38
  • $\begingroup$ General comment: You should probably also try to choose either the [arg1, arg2, ...] or the [{arg1, arg2, ...}] conventions. The mixing is just asking for trouble. $\endgroup$ – Natas Jun 26 '20 at 7:26
  • $\begingroup$ Related/duplicate: mathematica.stackexchange.com/questions/1301/… $\endgroup$ – Michael E2 Sep 23 '20 at 15:32
4
$\begingroup$

The problem arises because you want to take the derivative with respect to an expression which is not a valid variable for D[].

A toy example is the following:

f[x_] := x^2
g[x_] := D[f[x], x]

g[x^2]
(* During evaluation of In[130]:= General::ivar: x^2 is not a valid variable.*)

What happens is that g[x^2] evaluates to

D[f[x^2], x^2]

and D does not know how to treat x^2.

As pointed out by yarchik in the comments, one strategy is to use Set (=) rather than SetDelayed (:=) for defining g, i.e.

g[x_] = D[f[x], x]

which has also the benefit of only running D once and not at every call of g. Of course this is not so good if f might change in the future. Then a more robust strategy would be.

g[x_] := Derivative[1][f][x]

which generalizes to functions with more than one argument.

Edit: For your list-based functions you could try something along these lines:

f[{x_, y_}] := x^2 + y^2
g[{x_, y_}] := Module[{xP, yP},D[f[{xP, yP}], {{xP, yP}}] /. Thread[{xP, yP} -> {x, y}]]

g[{a, b}]
(* {2 a, 2 b} *)
$\endgroup$
  • $\begingroup$ Thanks so much for replying! Changing the := to = is exactly what I needed and indeed did the trick; here is the finished notebook bit.ly/2YAuYnO . Thanks again so much for replying! $\endgroup$ – Jeffrey Rolland Jun 27 '20 at 14:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.