https://github.com/cran/pracma
Tip revision: fdf16693b000f3e309c56091892c61f0ec9fd670 authored by Hans W. Borchers on 21 November 2017, 16:15:00 UTC
version 2.1.1
version 2.1.1
Tip revision: fdf1669
mldivide.Rd
\name{mldivide}
\alias{mldivide}
\alias{mrdivide}
\title{Matlab backslash operator}
\description{
Emulate the Matlab backslash operator ``\\'' through QR decomposition.
}
\usage{
mldivide(A, B, pinv = TRUE)
mrdivide(A, B, pinv = TRUE)
}
\arguments{
\item{A, B}{
Numerical or complex matrices; \code{A} and \code{B} must have the same
number of rows (for \code{mldivide}) or the same number of columns
(for \code{mrdivide})
}
\item{pinv}{logical; shall SVD decomposition be used; default true.}
}
\details{
\code{mldivide} performs matrix left division (and \code{mrdivide} matrix
right division). If \code{A} is scalar it performs element-wise division.
If \code{A} is square, \code{mldivide} is roughly the same as
\code{inv(A) \%*\% B} except it is computed in a different way ---
using QR decomposition.
If \code{pinv = TRUE}, the default, the SVD will be used as
\code{pinv(t(A)\%*\%A)\%*\%t(A)\%*\%B} to generate results similar
to Matlab. Otherwise, \code{qr.solve} will be used.
If \code{A} is not square, \code{x <- mldivide(A, b)} returnes a
least-squares solution that minimizes the length of the vector
\code{A \%*\% x - b}
(which is equivalent to \code{norm(A \%*\% x - b, "F")}.
}
\value{
If \code{A} is an n-by-p matrix and \code{B} n-by-q, then the result of
\code{mldivide(A, B)} is a p-by-q matrix (\code{mldivide}).
}
\note{
\code{mldivide(A, B)} corresponds to \code{A\\B} in Matlab notation.
}
\examples{
# Solve a system of linear equations
A <- matrix(c(8,1,6, 3,5,7, 4,9,2), nrow = 3, ncol = 3, byrow = TRUE)
b <- c(1, 1, 1)
mldivide(A, b) # 0.06666667 0.06666667 0.06666667
A <- rbind(1:3, 4:6)
mldivide(A, c(1,1)) # -0.5 0 0.5 ,i.e. Matlab/Octave result
mldivide(A, c(1,1), pinv = FALSE) # -1 1 0 R qr.solve result
}
\keyword{ math }