diff --git a/LinearAlgebra/Matrix.cs b/LinearAlgebra/Matrix.cs index b7dd7c3..9c2e84e 100644 --- a/LinearAlgebra/Matrix.cs +++ b/LinearAlgebra/Matrix.cs @@ -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];