After making my original posts, I realized that switching to jagged arrays would potentially break code that uses these two functions of the Matrix class:
public Matrix(double[,] A)
public static implicit operator double[,] (Matrix m)
In my opinion, the best option for the implicit operator would be to make it return a double[][] instead, which would force consumers to rewrite their code accordingly. A constructor for two dimensional arrays seems appropriate to keep, but consumers of the library would need to be informed of the change in semantics. For example, the following code would produce differing results:
//assuming test is a double[,] and all indices are valid
test[4,3] = 2;
Matrix testMat = new Matrix(test);
test[4,3] = 3;
Console.WriteLine(testMat[4, 3])
In the current code this would print 3, but in the new code this would print 2. Also, I would be willing to contribute to the codebase, starting with a new Matrix class.
Gideon