The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
quadform
packageQuadratic forms are polynomials with all terms of degree 2. Given a column vector \({\mathbf x}=(x_1,\ldots,x_n)^\top\) and an \(n\times n\) matrix \(M\) then the function \(f\colon\mathbb{R}^n\longrightarrow\mathbb{R}\) given by \(f({\mathbf x})=x^TMx\) is a quadratic form; we extend to complex vectors by mapping \({\mathbf z}=(z_1,\ldots, z_n)^\top\) to \({\mathbf z}^*M{\mathbf z}\), where \(z^*\) means the complex conjugate of \(z^T\). These are implemented in the package with quad.form(M,x)
which is essentially
quad.form <- function(M,x){crossprod(crossprod(M, Conj(x)), x)}.
This is preferable to t(x) %*% M %*% x
on several grounds. Firstly, it streamlines and simplifies code; secondly, it is more efficient; and thirdly it handles the complex case consistently. The package includes similar functionality for other related expressions.
The main motivation for the package is nicer code. For example, the emulator
package has to manipulate the following expression:
\[ \left[H_x-H^\top A^{-1}U\right]^\top \left[H^\top\left(H^\top A^{-1}H\right)^{-1}H\right] \left[H_x-H^\top A^{-1}U\right]. \]
Direct R idiom would be:
t(Hx - t(H) %*% solve(A) %*% U) %*% t(H) %*% solve(t(H) %*% solve(A) %*% H) %*% H %*% (Hx - t(H) %*% solve(A) %*% U)
But quadform
idiom is:
quad.form(quad.form.inv(quad.form.inv(A,H),H), Hx - quad3.form.inv(A,H,U))
and in terse form becomes:
qf(qfi(qfi(A,H),H), Hx - q3fi(A,H,U))
which is certainly shorter, arguably more elegant, and possibly faster.
The package is maintained on github.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.