public class LinearEquationSystem extends Object
Modifier and Type | Field and Description |
---|---|
private double[][] |
coeff
The matrix of coefficients.
|
private int[] |
col
Encodes column permutations, column j is at position col[j].
|
private static Logging |
logger
Logger.
|
private int |
rank
The rank of the coefficient matrix.
|
private boolean |
reducedRowEchelonForm
Indicates if linear equation system is in reduced row echelon form.
|
private double[] |
rhs
The right hand side of the equation system.
|
private int[] |
row
Encodes row permutations, row i is at position row[i].
|
private boolean |
solvable
Indicates if linear equation system is solvable.
|
private boolean |
solved
Indicates if solvability has been checked.
|
private static int |
TOTAL_PIVOT_SEARCH
Indicates total pivot search strategy.
|
private static int |
TRIVAL_PIVOT_SEARCH
Indicates trivial pivot search strategy.
|
private double[][] |
u
Holds the space of solutions of the homogeneous linear equation system.
|
private double[] |
x_0
Holds the special solution vector.
|
Constructor and Description |
---|
LinearEquationSystem(double[][] a,
double[] b)
Constructs a linear equation system with given coefficient matrix
a and right hand side b . |
LinearEquationSystem(double[][] a,
double[] b,
int[] rowPermutations,
int[] columnPermutations)
Constructs a linear equation system with given coefficient matrix
a and right hand side b . |
Modifier and Type | Method and Description |
---|---|
String |
equationsToString(int fractionDigits)
Returns a string representation of this equation system.
|
String |
equationsToString(NumberFormat nf)
Returns a string representation of this equation system.
|
String |
equationsToString(String prefix,
int fractionDigits)
Returns a string representation of this equation system.
|
String |
equationsToString(String prefix,
NumberFormat nf)
Returns a string representation of this equation system.
|
private void |
format(NumberFormat nf,
StringBuffer buffer,
double value,
int maxIntegerDigits)
Helper method for output of equations and solution.
|
double[][] |
getCoefficents()
Returns a copy of the coefficient array of this linear equation system.
|
int[] |
getColumnPermutations()
Returns a copy of the column permutations, column i is at position
column[i].
|
double[] |
getRHS()
Returns a copy of the right hand side of this linear equation system.
|
int[] |
getRowPermutations()
Returns a copy of the row permutations, row i is at position row[i].
|
private int |
integerDigits(double d)
Returns the integer digits of the specified double value.
|
boolean |
isSolvable()
Checks if a solved system is solvable.
|
private boolean |
isSolvable(int method)
Checks solvability of this linear equation system with the chosen method.
|
boolean |
isSolved()
Tests if system has already been tested for solvability.
|
private int |
maxIntegerDigits(double[] values)
Returns the maximum integer digits of the specified values.
|
private int[] |
maxIntegerDigits(double[][] values)
Returns the maximum integer digits in each column of the specified values.
|
private IntIntPair |
nonZeroPivotSearch(int k)
Method for trivial pivot search, searches for non-zero entry.
|
private void |
permutePivot(IntIntPair pos1,
IntIntPair pos2)
permutes two matrix rows and two matrix columns
|
private void |
pivotOperation(int k)
performs a pivot operation
|
private void |
reducedRowEchelonForm(int method)
Brings this linear equation system into reduced row echelon form with
choice of pivot method.
|
String |
solutionToString(int fractionDigits)
Returns a string representation of the solution of this equation system.
|
private void |
solve(int method)
solves linear system with the chosen method
|
void |
solveByTotalPivotSearch()
Solves this linear equation system by total pivot search.
|
void |
solveByTrivialPivotSearch()
Solves this linear equation system by trivial pivot search.
|
int |
subspacedim()
Return dimensionality of spanned subspace.
|
private IntIntPair |
totalPivotSearch(int k)
Method for total pivot search, searches for x,y in {k,...n}, so that |a_xy|
> |a_ij|
|
private static final Logging logger
private static final int TRIVAL_PIVOT_SEARCH
private static final int TOTAL_PIVOT_SEARCH
private boolean solvable
private boolean solved
private int rank
private double[][] coeff
private double[] rhs
private int[] row
private int[] col
private double[] x_0
private double[][] u
private boolean reducedRowEchelonForm
public LinearEquationSystem(double[][] a, double[] b)
a
and right hand side b
.a
- the matrix of the coefficients of the linear equation systemb
- the right hand side of the linear equation systempublic LinearEquationSystem(double[][] a, double[] b, int[] rowPermutations, int[] columnPermutations)
a
and right hand side b
.a
- the matrix of the coefficients of the linear equation systemb
- the right hand side of the linear equation systemrowPermutations
- the row permutations, row i is at position row[i]columnPermutations
- the column permutations, column i is at position
column[i]public double[][] getCoefficents()
public double[] getRHS()
public int[] getRowPermutations()
public int[] getColumnPermutations()
public boolean isSolved()
public void solveByTotalPivotSearch()
( a_11 ... a_1n )
( 0 ... a_2n )
( 0 ... a_ii ... a_in )
( 0 ... a_(i+1)i ... a_(i+1)n )
( 0 ... a_ni ... a_nn )
Then we search for x,y in {i,...n}, so that |a_xy| > |a_ij|public void solveByTrivialPivotSearch()
public boolean isSolvable()
public String equationsToString(String prefix, int fractionDigits)
prefix
- the prefix of each linefractionDigits
- the number of fraction digits for output accuracypublic String equationsToString(String prefix, NumberFormat nf)
prefix
- the prefix of each linenf
- the number formatpublic String equationsToString(NumberFormat nf)
nf
- the number formatpublic String equationsToString(int fractionDigits)
fractionDigits
- the number of fraction digits for output accuracypublic String solutionToString(int fractionDigits)
fractionDigits
- precisionprivate void reducedRowEchelonForm(int method)
method
- the pivot search method to useprivate IntIntPair totalPivotSearch(int k)
k
- search starts at entry (k,k)private IntIntPair nonZeroPivotSearch(int k)
k
- search starts at entry (k,k)private void permutePivot(IntIntPair pos1, IntIntPair pos2)
pos1
- the fist position for the permutationpos2
- the second position for the permutationprivate void pivotOperation(int k)
k
- pivoting takes place below (k,k)private void solve(int method) throws NullPointerException
method
- the pivot search methodNullPointerException
private boolean isSolvable(int method) throws NullPointerException
method
- the pivot search methodNullPointerException
private int[] maxIntegerDigits(double[][] values)
values
- the values arrayprivate int maxIntegerDigits(double[] values)
values
- the values arrayprivate int integerDigits(double d)
d
- the double valueprivate void format(NumberFormat nf, StringBuffer buffer, double value, int maxIntegerDigits)
nf
- the number formatbuffer
- the string buffer to append the value tovalue
- the value to appendmaxIntegerDigits
- the maximum number of integer digitspublic int subspacedim()