public class QrHelperFunctions_FDRM
extends java.lang.Object
Contains different functions that are useful for computing the QR decomposition of a matrix.
Two different families of functions are provided for help in computing reflectors. Internally both of these functions switch between normalization by division or multiplication. Multiplication is most often significantly faster than division (2 or 3 times) but produces less accurate results on very small numbers. It checks to see if round off error is significant and decides which one it should do.
Tests were done using the stability benchmark in jmatbench and there doesn't seem to be any advantage to always dividing by the max instead of checking and deciding. The most noticeable difference between the two methods is with very small numbers.
Constructor and Description |
---|
QrHelperFunctions_FDRM() |
Modifier and Type | Method and Description |
---|---|
static float |
computeTauAndDivide(int j,
int numRows,
float[] u,
float max)
Normalizes elements in 'u' by dividing by max and computes the norm2 of the normalized
array u.
|
static float |
computeTauAndDivide(int j,
int numRows,
float[] u,
int startU,
float max) |
static void |
divideElements_Bcol(int j,
int numRows,
int numCols,
float[] u,
float[] b,
int startB,
float u_0) |
static void |
divideElements_Brow(int j,
int numRows,
float[] u,
float[] b,
int startB,
float u_0) |
static void |
divideElements(int j,
int numRows,
float[] u,
float u_0) |
static void |
divideElements(int j,
int numRows,
float[] u,
int startU,
float u_0) |
static float |
findMax(float[] u,
int startU,
int length) |
static void |
rank1UpdateMultL(org.ejml.data.FMatrixRMaj A,
float[] u,
float gamma,
int colA0,
int w0,
int w1)
Performs a rank-1 update operation on the submatrix specified by w with the multiply on the left.
A = A(I - γ*u*uT) |
static void |
rank1UpdateMultR(org.ejml.data.FMatrixRMaj A,
float[] u,
float gamma,
int colA0,
int w0,
int w1,
float[] _temp)
Performs a rank-1 update operation on the submatrix specified by w with the multiply on the right.
A = (I - γ*u*uT)*A |
static void |
rank1UpdateMultR(org.ejml.data.FMatrixRMaj A,
float[] u,
int offsetU,
float gamma,
int colA0,
int w0,
int w1,
float[] _temp) |
public static float findMax(float[] u, int startU, int length)
public static void divideElements(int j, int numRows, float[] u, float u_0)
public static void divideElements(int j, int numRows, float[] u, int startU, float u_0)
public static void divideElements_Brow(int j, int numRows, float[] u, float[] b, int startB, float u_0)
public static void divideElements_Bcol(int j, int numRows, int numCols, float[] u, float[] b, int startB, float u_0)
public static float computeTauAndDivide(int j, int numRows, float[] u, int startU, float max)
public static float computeTauAndDivide(int j, int numRows, float[] u, float max)
for i=j:numRows u[i] = u[i] / max tau = tau + u[i]*u[i] end tau = sqrt(tau) if( u[j] < 0 ) tau = -tau;
j
- Element in 'u' that it starts at.numRows
- Element in 'u' that it stops at.u
- Arraymax
- Max value in 'u' that is used to normalize it.public static void rank1UpdateMultR(org.ejml.data.FMatrixRMaj A, float[] u, float gamma, int colA0, int w0, int w1, float[] _temp)
Performs a rank-1 update operation on the submatrix specified by w with the multiply on the right.
A = (I - γ*u*uT)*A
The order that matrix multiplies are performed has been carefully selected to minimize the number of operations.
Before this can become a truly generic operation the submatrix specification needs to be made more generic.
public static void rank1UpdateMultR(org.ejml.data.FMatrixRMaj A, float[] u, int offsetU, float gamma, int colA0, int w0, int w1, float[] _temp)
public static void rank1UpdateMultL(org.ejml.data.FMatrixRMaj A, float[] u, float gamma, int colA0, int w0, int w1)
Performs a rank-1 update operation on the submatrix specified by w with the multiply on the left.
A = A(I - γ*u*uT)
The order that matrix multiplies are performed has been carefully selected to minimize the number of operations.
Before this can become a truly generic operation the submatrix specification needs to be made more generic.