Residual & Jacobian progress
This commit is contained in:
parent
8ea28beb42
commit
dd23355554
@ -5,14 +5,21 @@ using Vector3 = UnityEngine.Vector3;
|
||||
public class Matrix2 {
|
||||
public float[,] data { get; }
|
||||
|
||||
public int nRows => data.GetLength(0);
|
||||
public int nCols => data.GetLength(1);
|
||||
public uint nRows => (uint)data.GetLength(0);
|
||||
public uint nCols => (uint)data.GetLength(1);
|
||||
|
||||
public Matrix2(uint nRows, uint nCols) {
|
||||
this.data = new float[nRows, nCols];
|
||||
}
|
||||
public Matrix2(float[,] data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public static Matrix2 Identity(int size) {
|
||||
public static Matrix2 Zero(uint nRows, uint nCols) {
|
||||
return new Matrix2(nRows, nCols);
|
||||
}
|
||||
|
||||
public static Matrix2 Identity(uint size) {
|
||||
return Diagonal(1, size);
|
||||
// float[,] resultData = new float[size, size];
|
||||
// for (int i = 0; i < size; i++)
|
||||
@ -26,7 +33,7 @@ public class Matrix2 {
|
||||
resultData[ix, ix] = v.data[ix];
|
||||
return new Matrix2(resultData);
|
||||
}
|
||||
public static Matrix2 Diagonal(float f, int size) {
|
||||
public static Matrix2 Diagonal(float f, uint size) {
|
||||
float[,] resultData = new float[size, size];
|
||||
for (int ix = 0; ix < size; ix++)
|
||||
resultData[ix, ix] = f;
|
||||
@ -137,7 +144,7 @@ public class Matrix2 {
|
||||
public Matrix2 Inverse() {
|
||||
Matrix2 A = this;
|
||||
// unchecked
|
||||
int n = A.nRows;
|
||||
uint n = A.nRows;
|
||||
|
||||
// Create an identity matrix of the same size as the original matrix
|
||||
float[,] augmentedMatrix = new float[n, 2 * n];
|
||||
@ -168,9 +175,9 @@ public class Matrix2 {
|
||||
}
|
||||
|
||||
// Back substitution
|
||||
for (int i = n - 1; i >= 0; i--) {
|
||||
for (uint i = n - 1; i >= 0; i--) {
|
||||
// Eliminate the column above the pivot
|
||||
for (int j = i - 1; j >= 0; j--) {
|
||||
for (uint j = i - 1; j >= 0; j--) {
|
||||
float factor = augmentedMatrix[j, i];
|
||||
for (int k = 0; k < 2 * n; k++)
|
||||
augmentedMatrix[j, k] -= factor * augmentedMatrix[i, k];
|
||||
@ -191,7 +198,7 @@ public class Matrix2 {
|
||||
public class Matrix1 {
|
||||
public float[] data { get; }
|
||||
|
||||
public int magnitude => data.GetLength(0);
|
||||
public uint magnitude => (uint)data.GetLength(0);
|
||||
|
||||
public Matrix1(uint magnitude) {
|
||||
this.data = new float[magnitude];
|
||||
|
Loading…
x
Reference in New Issue
Block a user