Package cc.redberry.rings.linear
Class LinearSolver
- java.lang.Object
-
- cc.redberry.rings.linear.LinearSolver
-
public final class LinearSolver extends Object
Solver for quadratic linear system- Since:
- 1.0
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classLinearSolver.SystemInfoInfo about linear system
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static voidreducedRowEchelonForm(IntegersZp64 ring, long[][] lhs, long[] rhs)Gives the reduced row echelon form of the linear systemlhs.x = rhsfrom a given row echelon form.static <E> voidreducedRowEchelonForm(Ring<E> ring, E[][] lhs, E[] rhs)Gives the reduced row echelon form of the linear systemlhs.x = rhsfrom a given row echelon form.static introwEchelonForm(IntegersZp64 ring, long[][] matrix)Gives the row echelon form of the matrixstatic introwEchelonForm(IntegersZp64 ring, long[][] matrix, boolean reduce)Gives the row echelon form of the matrixstatic introwEchelonForm(IntegersZp64 ring, long[][] lhs, long[] rhs)Gives the row echelon form of the linear systemlhs.x = rhs(rhs may be null).static introwEchelonForm(IntegersZp64 ring, long[][] lhs, long[] rhs, boolean reduce, boolean breakOnUnderDetermined)Gives the row echelon form of the linear systemlhs.x = rhs(rhs may be null).static <E> introwEchelonForm(Ring<E> ring, E[][] matrix)Gives the row echelon form of the matrixstatic <E> introwEchelonForm(Ring<E> ring, E[][] matrix, boolean reduce)Gives the row echelon form of the matrixstatic <E> introwEchelonForm(Ring<E> ring, E[][] lhs, E[] rhs)Gives the row echelon form of the linear systemlhs.x = rhs.static <E> introwEchelonForm(Ring<E> ring, E[][] lhs, E[] rhs, boolean reduce, boolean breakOnUnderDetermined)Gives the row echelon form of the linear systemlhs.x = rhs.static long[]solve(IntegersZp64 ring, long[][] lhs, long[] rhs)Solves linear systemlhs.x = rhsand reduces the lhs to row echelon form.static LinearSolver.SystemInfosolve(IntegersZp64 ring, long[][] lhs, long[] rhs, long[] result)Solves linear systemlhs.x = rhsand reduces the lhs to row echelon form.static LinearSolver.SystemInfosolve(IntegersZp64 ring, long[][] lhs, long[] rhs, long[] result, boolean solveIfUnderDetermined)Solves linear systemlhs.x = rhsand reduces the lhs to row echelon form.static LinearSolver.SystemInfosolve(IntegersZp64 ring, ArrayList<long[]> lhs, gnu.trove.list.array.TLongArrayList rhs, long[] result)Solves linear systemlhs.x = rhsand stores the result inresult(which should be of the enough length).static <E> E[]solve(Ring<E> ring, E[][] lhs, E[] rhs)Solves linear systemlhs.x = rhsand reduces lhs to row echelon form.static <E> LinearSolver.SystemInfosolve(Ring<E> ring, E[][] lhs, E[] rhs, E[] result)Solves linear systemlhs.x = rhsand reduces the lhs to row echelon form.static <E> LinearSolver.SystemInfosolve(Ring<E> ring, E[][] lhs, E[] rhs, E[] result, boolean solveIfUnderDetermined)Solves linear systemlhs.x = rhsand reduces the lhs to row echelon form.static <E> LinearSolver.SystemInfosolve(Ring<E> ring, ArrayList<E[]> lhs, ArrayList<E> rhs, E[] result)Solves linear systemlhs.x = rhsand stores the result inresult(which should be of the enough length).static long[]solveVandermonde(IntegersZp64 ring, long[] row, long[] rhs)Solves Vandermonde linear system (that is with i-th equation of the formrow[i]^0 * x0 + row[i]^1 * x1 + ... row[i]^N * xN = rhs[i]).static LinearSolver.SystemInfosolveVandermonde(IntegersZp64 ring, long[] row, long[] rhs, long[] result)Solves Vandermonde linear system (that is with i-th equation of the formrow[i]^0 * x0 + row[i]^1 * x1 + ... row[i]^N * xN = rhs[i]) and stores the result inresult(which should be of the enough length).static <E> E[]solveVandermonde(Ring<E> ring, E[] row, E[] rhs)Solves Vandermonde linear system (that is with i-th equation of the formrow[i]^0 * x0 + row[i]^1 * x1 + ... row[i]^N * xN = rhs[i]).static <E> LinearSolver.SystemInfosolveVandermonde(Ring<E> ring, E[] row, E[] rhs, E[] result)Solves Vandermonde linear system (that is with i-th equation of the formrow[i]^0 * x0 + row[i]^1 * x1 + ... row[i]^N * xN = rhs[i]) and stores the result inresult(which should be of the enough length).static long[]solveVandermondeT(IntegersZp64 ring, long[] row, long[] rhs)Solves transposed Vandermonde linear system (that is with i-th equation of the formrow[0]^i * x0 + row[1]^i * x1 + ... row[N]^i * xN = rhs[i]).static LinearSolver.SystemInfosolveVandermondeT(IntegersZp64 ring, long[] row, long[] rhs, long[] result)Solves transposed Vandermonde linear system (that is with i-th equation of the formrow[0]^i * x0 + row[1]^i * x1 + ... row[N]^i * xN = rhs[i]) and stores the result inresult(which should be of the enough length).static <E> E[]solveVandermondeT(Ring<E> ring, E[] row, E[] rhs)Solves transposed Vandermonde linear system (that is with i-th equation of the formrow[0]^i * x0 + row[1]^i * x1 + ... row[N]^i * xN = rhs[i]).static <E> LinearSolver.SystemInfosolveVandermondeT(Ring<E> ring, E[] row, E[] rhs, E[] result)Solves transposed Vandermonde linear system (that is with i-th equation of the formrow[0]^i * x0 + row[1]^i * x1 + ... row[N]^i * xN = rhs[i]) and stores the result inresult(which should be of the enough length).static voidtransposeSquare(long[][] matrix)Transpose square matrixstatic voidtransposeSquare(Object[][] matrix)Transpose square matrix
-
-
-
Method Detail
-
transposeSquare
public static void transposeSquare(Object[][] matrix)
Transpose square matrix
-
transposeSquare
public static void transposeSquare(long[][] matrix)
Transpose square matrix
-
rowEchelonForm
public static <E> int rowEchelonForm(Ring<E> ring, E[][] matrix)
Gives the row echelon form of the matrix- Parameters:
ring- the ringmatrix- the matrix- Returns:
- the number of free variables
-
rowEchelonForm
public static <E> int rowEchelonForm(Ring<E> ring, E[][] matrix, boolean reduce)
Gives the row echelon form of the matrix- Parameters:
ring- the ringmatrix- the matrixreduce- whether to calculate reduced row echelon form- Returns:
- the number of free variables
-
rowEchelonForm
public static <E> int rowEchelonForm(Ring<E> ring, E[][] lhs, E[] rhs)
Gives the row echelon form of the linear systemlhs.x = rhs.- Parameters:
ring- the ringlhs- the lhs of the systemrhs- the rhs of the system- Returns:
- the number of free variables
-
rowEchelonForm
public static <E> int rowEchelonForm(Ring<E> ring, E[][] lhs, E[] rhs, boolean reduce, boolean breakOnUnderDetermined)
Gives the row echelon form of the linear systemlhs.x = rhs.- Parameters:
ring- the ringlhs- the lhs of the systemrhs- the rhs of the systemreduce- whether to calculate reduced row echelon formbreakOnUnderDetermined- whether to return immediately if it was detected that system is under determined- Returns:
- the number of free variables
-
reducedRowEchelonForm
public static <E> void reducedRowEchelonForm(Ring<E> ring, E[][] lhs, E[] rhs)
Gives the reduced row echelon form of the linear systemlhs.x = rhsfrom a given row echelon form.- Parameters:
ring- the ringlhs- the lhs of the system in the row echelon formrhs- the rhs of the system
-
solve
public static <E> E[] solve(Ring<E> ring, E[][] lhs, E[] rhs)
Solves linear systemlhs.x = rhsand reduces lhs to row echelon form.- Parameters:
ring- the ringlhs- the lhs of the system (will be reduced to row echelon form)rhs- the rhs of the system- Returns:
- the solution
- Throws:
ArithmeticException- if the system is inconsistent or under-determined
-
solve
public static <E> LinearSolver.SystemInfo solve(Ring<E> ring, E[][] lhs, E[] rhs, E[] result)
Solves linear systemlhs.x = rhsand reduces the lhs to row echelon form. The result is stored inresult(which should be of the enough length).- Parameters:
ring- the ringlhs- the lhs of the system (will be reduced to row echelon form)rhs- the rhs of the systemresult- where to place the result- Returns:
- system information (inconsistent, under-determined or consistent)
-
solve
public static <E> LinearSolver.SystemInfo solve(Ring<E> ring, E[][] lhs, E[] rhs, E[] result, boolean solveIfUnderDetermined)
Solves linear systemlhs.x = rhsand reduces the lhs to row echelon form. The result is stored inresult(which should be of the enough length).- Parameters:
ring- the ringlhs- the lhs of the system (will be reduced to row echelon form)rhs- the rhs of the systemresult- where to place the resultsolveIfUnderDetermined- give some solution even if the system is under determined- Returns:
- system information (inconsistent, under-determined or consistent)
-
solve
public static <E> LinearSolver.SystemInfo solve(Ring<E> ring, ArrayList<E[]> lhs, ArrayList<E> rhs, E[] result)
Solves linear systemlhs.x = rhsand stores the result inresult(which should be of the enough length).- Parameters:
ring- the ringlhs- the lhs of the systemrhs- the rhs of the systemresult- where to place the result- Returns:
- system information (inconsistent, under-determined or consistent)
-
solveVandermonde
public static <E> E[] solveVandermonde(Ring<E> ring, E[] row, E[] rhs)
Solves Vandermonde linear system (that is with i-th equation of the formrow[i]^0 * x0 + row[i]^1 * x1 + ... row[i]^N * xN = rhs[i]).- Parameters:
ring- the ringrow- the Vandermonde coefficientsrhs- the rhs of the system- Returns:
- the solution
- Throws:
ArithmeticException- if the system is inconsistent or under-determined
-
solveVandermondeT
public static <E> E[] solveVandermondeT(Ring<E> ring, E[] row, E[] rhs)
Solves transposed Vandermonde linear system (that is with i-th equation of the formrow[0]^i * x0 + row[1]^i * x1 + ... row[N]^i * xN = rhs[i]).- Parameters:
ring- the ringrow- the Vandermonde coefficientsrhs- the rhs of the system- Returns:
- the solution
- Throws:
ArithmeticException- if the system is inconsistent or under-determined
-
solveVandermonde
public static <E> LinearSolver.SystemInfo solveVandermonde(Ring<E> ring, E[] row, E[] rhs, E[] result)
Solves Vandermonde linear system (that is with i-th equation of the formrow[i]^0 * x0 + row[i]^1 * x1 + ... row[i]^N * xN = rhs[i]) and stores the result inresult(which should be of the enough length).- Parameters:
ring- the ringrow- the Vandermonde coefficientsrhs- the rhs of the systemresult- where to place the result- Returns:
- system information (inconsistent, under-determined or consistent)
-
solveVandermondeT
public static <E> LinearSolver.SystemInfo solveVandermondeT(Ring<E> ring, E[] row, E[] rhs, E[] result)
Solves transposed Vandermonde linear system (that is with i-th equation of the formrow[0]^i * x0 + row[1]^i * x1 + ... row[N]^i * xN = rhs[i]) and stores the result inresult(which should be of the enough length).- Parameters:
ring- the ringrow- the Vandermonde coefficientsrhs- the rhs of the systemresult- where to place the result- Returns:
- system information (inconsistent, under-determined or consistent)
-
rowEchelonForm
public static int rowEchelonForm(IntegersZp64 ring, long[][] matrix)
Gives the row echelon form of the matrix- Parameters:
ring- the ringmatrix- the matrix- Returns:
- the number of free variables
-
rowEchelonForm
public static int rowEchelonForm(IntegersZp64 ring, long[][] matrix, boolean reduce)
Gives the row echelon form of the matrix- Parameters:
ring- the ringmatrix- the matrixreduce- whether to calculate reduced row echelon form- Returns:
- the number of free variables
-
rowEchelonForm
public static int rowEchelonForm(IntegersZp64 ring, long[][] lhs, long[] rhs)
Gives the row echelon form of the linear systemlhs.x = rhs(rhs may be null).- Parameters:
ring- the ringlhs- the lhs of the systemrhs- the rhs of the system (may be null)- Returns:
- the number of free variables
-
rowEchelonForm
public static int rowEchelonForm(IntegersZp64 ring, long[][] lhs, long[] rhs, boolean reduce, boolean breakOnUnderDetermined)
Gives the row echelon form of the linear systemlhs.x = rhs(rhs may be null).- Parameters:
ring- the ringlhs- the lhs of the systemrhs- the rhs of the system (may be null)reduce- whether to calculate reduced row echelon formbreakOnUnderDetermined- whether to return immediately if it was detected that system is under determined- Returns:
- the number of free variables
-
reducedRowEchelonForm
public static void reducedRowEchelonForm(IntegersZp64 ring, long[][] lhs, long[] rhs)
Gives the reduced row echelon form of the linear systemlhs.x = rhsfrom a given row echelon form.- Parameters:
ring- the ringlhs- the lhs of the system in the row echelon formrhs- the rhs of the system
-
solve
public static long[] solve(IntegersZp64 ring, long[][] lhs, long[] rhs)
Solves linear systemlhs.x = rhsand reduces the lhs to row echelon form.- Parameters:
ring- the ringlhs- the lhs of the system (will be reduced to row echelon form)rhs- the rhs of the system- Returns:
- the solution
- Throws:
ArithmeticException- if the system is inconsistent or under-determined
-
solve
public static LinearSolver.SystemInfo solve(IntegersZp64 ring, long[][] lhs, long[] rhs, long[] result)
Solves linear systemlhs.x = rhsand reduces the lhs to row echelon form. The result is stored inresult(which should be of the enough length).- Parameters:
ring- the ringlhs- the lhs of the system (will be reduced to row echelon form)rhs- the rhs of the systemresult- where to place the result- Returns:
- system information (inconsistent, under-determined or consistent)
-
solve
public static LinearSolver.SystemInfo solve(IntegersZp64 ring, long[][] lhs, long[] rhs, long[] result, boolean solveIfUnderDetermined)
Solves linear systemlhs.x = rhsand reduces the lhs to row echelon form. The result is stored inresult(which should be of the enough length and filled with zeros).- Parameters:
ring- the ringlhs- the lhs of the system (will be reduced to row echelon form)rhs- the rhs of the systemresult- where to place the resultsolveIfUnderDetermined- give some solution even if the system is under determined- Returns:
- system information (inconsistent, under-determined or consistent)
-
solve
public static LinearSolver.SystemInfo solve(IntegersZp64 ring, ArrayList<long[]> lhs, gnu.trove.list.array.TLongArrayList rhs, long[] result)
Solves linear systemlhs.x = rhsand stores the result inresult(which should be of the enough length).- Parameters:
ring- the ringlhs- the lhs of the systemrhs- the rhs of the systemresult- where to place the result- Returns:
- system information (inconsistent, under-determined or consistent)
-
solveVandermonde
public static long[] solveVandermonde(IntegersZp64 ring, long[] row, long[] rhs)
Solves Vandermonde linear system (that is with i-th equation of the formrow[i]^0 * x0 + row[i]^1 * x1 + ... row[i]^N * xN = rhs[i]).- Parameters:
ring- the ringrow- the Vandermonde coefficientsrhs- the rhs of the system- Returns:
- the solution
- Throws:
ArithmeticException- if the system is inconsistent or under-determined
-
solveVandermondeT
public static long[] solveVandermondeT(IntegersZp64 ring, long[] row, long[] rhs)
Solves transposed Vandermonde linear system (that is with i-th equation of the formrow[0]^i * x0 + row[1]^i * x1 + ... row[N]^i * xN = rhs[i]).- Parameters:
ring- the ringrow- the Vandermonde coefficientsrhs- the rhs of the system- Returns:
- the solution
- Throws:
ArithmeticException- if the system is inconsistent or under-determined
-
solveVandermonde
public static LinearSolver.SystemInfo solveVandermonde(IntegersZp64 ring, long[] row, long[] rhs, long[] result)
Solves Vandermonde linear system (that is with i-th equation of the formrow[i]^0 * x0 + row[i]^1 * x1 + ... row[i]^N * xN = rhs[i]) and stores the result inresult(which should be of the enough length).- Parameters:
ring- the ringrow- the Vandermonde coefficientsrhs- the rhs of the systemresult- where to place the result- Returns:
- system information (inconsistent, under-determined or consistent)
-
solveVandermondeT
public static LinearSolver.SystemInfo solveVandermondeT(IntegersZp64 ring, long[] row, long[] rhs, long[] result)
Solves transposed Vandermonde linear system (that is with i-th equation of the formrow[0]^i * x0 + row[1]^i * x1 + ... row[N]^i * xN = rhs[i]) and stores the result inresult(which should be of the enough length).- Parameters:
ring- the ringrow- the Vandermonde coefficientsrhs- the rhs of the systemresult- where to place the result- Returns:
- system information (inconsistent, under-determined or consistent)
-
-