From dd23355554624c15f36c7ad1ad5efe2ab7cdc9ed Mon Sep 17 00:00:00 2001
From: Pascal Serrarens <pascal@passervr.com>
Date: Fri, 14 Feb 2025 11:07:30 +0100
Subject: [PATCH] Residual & Jacobian progress

---
 LinearAlgebra/Matrix.cs | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

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];