This generic function solves the equation \(a \%*\% x = b\) for \(x\), where \(b\) can be either a vector or a matrix.
If a and b are rational, return is a rational matrix.
If a and b are big integers (of class bigz) solution is in Z/nZ if there is a common modulus, or a rational matrix if not.
# S3 method for bigz
solve(a, b, ...)
# S3 method for bigq
solve(a, b, ...)
A element of class bigz or bigq
Unused
If a and b are rational, return is a rational matrix.
If a and b are big integers (of class bigz) solution is in Z/nZ if there is a common modulus, of a rational matrix if not.
It uses the Gauss and trucmuch algo … (to be detailled).
# NOT RUN { x <- matrix(1:4,2,2) ## standard solve : solve(x) q <- as.bigq(x) ## solve with rational solve(q) z <- as.bigz(x) modulus(z) <- 7 ## solve in Z/7Z : solve(z) b <- c(1,3) solve(q,b) solve(z,b) ## Inversion of ("non-trivial") rational matrices : A <- rbind(c(10, 1, 3), c( 4, 2, 10), c( 1, 8, 2)) (IA.q <- solve(as.bigq(A))) # fractions.. stopifnot(diag(3) == A %*% IA.q)# perfect set.seed(5); B <- matrix(round(9*runif(5^2, -1,1)), 5) B (IB.q <- solve(as.bigq(B))) stopifnot(diag(5) == B %*% IB.q, diag(5) == IB.q %*% B, identical(B, asNumeric(solve(IB.q)))) # }
Run the code above in your browser using DataCamp Workspace