Function to run basic IPFP (iterative proportional fitting procedure)

Description

Use IPFP starting from x0 to produce vector x s.t. Ax = y within tolerance. Need to ensure that x0 >= 0.

Usage

1
2
ipfp(y, A, x0, tol = .Machine$double.eps, maxit = 1000, verbose = FALSE,
  full = FALSE)

Arguments

y

numeric constraint vector (length nrow)

A

constraint matrix (nrow x ncol)

x0

numeric initial vector (length ncol)

tol

numeric tolerance for IPFP; defaults to .Machine$double.eps

maxit

integer maximum number of iterations for IPFP; defaults to 1e3

verbose

logical parameter to select verbose output from C function

full

logical parameter to select full return (with diagnostic info)

Value

if not full, vector of length ncol containing solution obtained by IPFP. If full, list containing solution (as x), number of iterations (as iter), and norm of Ax - y (as errNorm)

Examples

1
2
3
4
5
6
7
A <- buildStarMat(3)
x <- rgamma(ncol(A), 10, 1/100)
y <- A %*% x
x0 <- x * rgamma(length(x), 10, 10)
ans <- ipfp(y, A, x0, full=TRUE)
print(ans)
print(x)

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.