Learn R Programming

spatstat.sparse (version 3.1-0)

sumouter: Compute Quadratic Forms

Description

Calculates certain quadratic forms of matrices.

Usage

sumouter(x, w=NULL, y=x)
  quadform(x, v)
  bilinearform(x, v, y)

Value

A vector or matrix.

Arguments

x,y

A matrix, whose rows are the vectors in the quadratic form.

w

Optional vector of weights

v

Matrix determining the quadratic form

Author

Adrian Baddeley Adrian.Baddeley@curtin.edu.au and Rolf Turner rolfturner@posteo.net

Details

The matrices x and y will be interpreted as collections of row vectors. They must have the same number of rows. The entries of x and y may be numeric, integer, logical or complex values.

The command sumouter computes the sum of the outer products of corresponding row vectors, weighted by the entries of w: $$ M = \sum_i w_i x_i^\top y_i $$ where \(x_i\) is the i-th row of x and \(y_i\) is the i-th row of y (after removing any rows containing NA or other non-finite values). If w is missing or NULL, the weights will be taken as 1. The result is a \(p \times q\) matrix where p = ncol(x) and q = ncol(y).

The command quadform evaluates the quadratic form, defined by the matrix v, for each of the row vectors of x: $$ y_i = x_i V x_i^\top $$ The result y is a numeric vector of length n where n = nrow(x). If x[i,] contains NA or other non-finite values, then y[i] = NA. If v is missing or NULL, it will be taken as the identity matrix, so that the resulting values will be $$ y_i = x_i x_i^\top $$

The command bilinearform evaluates the more general bilinear form defined by the matrix v. Here x and y must be matrices of the same dimensions. For each row vector of x and corresponding row vector of y, the bilinear form is $$ z_i = x_i V y_i^\top $$ The result z is a numeric vector of length n where n = nrow(x). If x[i,] or y[i,] contains NA or other non-finite values, then z[i] = NA. If v is missing or NULL, it will be taken as the identity matrix, so that the resulting values will be $$ z_i = x_i y_i^\top $$

Examples

Run this code
  x <- matrix(1:12, 4, 3)
  dimnames(x) <- list(c("Wilma", "Fred", "Barney", "Betty"), letters[1:3])
  x

  sumouter(x)

  w <- 4:1
  sumouter(x, w)
  v <- matrix(1, 3, 3)
  quadform(x, v)

  # should be the same as quadform(x, v)
  bilinearform(x, v, x)

  # See what happens with NA's
  x[3,2] <- NA
  sumouter(x, w)
  quadform(x, v)

Run the code above in your browser using DataLab