set.seed(0) library("stokes") options(rmarkdown.html_vignette.check_title = FALSE) knitr::opts_chunk$set(echo = TRUE) knit_print.function <- function(x, ...){dput(x)} registerS3method( "knit_print", "function", knit_print.function, envir = asNamespace("knitr") )
knitr::include_graphics(system.file("help/figures/stokes.png", package = "stokes"))
dovs
To cite the stokes package in publications, please use
@hankin2022_stokes. Function dovs() returns the dimensionality of
the underlying vector space of a $k$-form. Recall that a $k$-form is
an alternating linear map from $V^k$ to $\mathbb{R}$, where
$V=\mathbb{R}^n$ [@spivak1965]. Function dovs() returns $n$
[compare arity(), which returns $k$]. As seen above, the function
is very simple, essentially being max(index(K)), but its use is not
entirely straightforward in the context of stokes idiom. Consider
the following:
set.seed(0) a <- rform(n=4,k=2) a
Now object a is notionally a map from $\left(\mathbb{R}^4\right)^2$
to $\mathbb{R}$:
f <- as.function(a) (M <- matrix(1:8,4,2)) f(M)
However, a can equally be considered to be a map from
$\left(\mathbb{R}^5\right)^2$ to $\mathbb{R}$:
f <- as.function(a) (M <- matrix(c(1,2,3,4,1454,5,6,7,8,-9564),ncol=2)) # row 5 large numbers f(M)
If we view $a$ [or indeed f()] in this way, that is
$a\colon\left(\mathbb{R}^5\right)^2\longrightarrow\mathbb{R}$, we
observe that row 5 is ignored: $e_5=\left(0,0,0,0,1\right)^T$ maps to
zero in the sense that $f(e_5,\mathbf{v})=f(\mathbf{v},e_5)=0$, for
any $\mathbf{v}\in\mathbb{R}^5$.
(M <- cbind(c(0,0,0,0,1),runif(5))) f(M)
(above we see that rows 1-4 of M are ignored because of the zero in
column 1; row 5 is ignored because the index of a does not include
the number 5). Because a is alternating, we could have put $e_5$ in
the second column with the same result. Alternatively we see that
the $k$-form a, evaluated with $e_5$ as one of its arguments,
returns zero because the index matrix of a does not include the
number 5. Most of the time, this kind of consideration does not
matter. However, consider this:
dx
Now, we know that dx is supposed to be a map from
$\left(\mathbb{R}^3\right)^1$ to $\mathbb{R}$; but:
dovs(dx)
So according to stokes,
$\operatorname{dx}\colon\left(\mathbb{R}^1\right)^1\longrightarrow\mathbb{R}$.
This does not really matter numerically, until we consider the Hodge
star operator. We know that
$\star\operatorname{dx}=\operatorname{dy}\wedge\operatorname{dz}$, but
hodge(dx)
Above we see the package giving, correctly, that the Hodge star of
$\operatorname{dx}$ is the zero-dimensional volume element (otherwise
known as "1"). To get the answer appropriate if $\operatorname{dx}$
is considered as a map from $\left(\mathbb{R}^3\right)^1$ to
$\mathbb{R}$ [that is,
$\operatorname{dx}\colon\left(\mathbb{R}^3\right)^1\longrightarrow\mathbb{R}$],
we need to specify dovs explicitly:
hodge(dx,3)
Actually this looks a lot better with a more appropriate print method:
options(kform_symbolic_print="dx") hodge(dx,3)
options(kform_symbolic_print = NULL)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.