I am working with a MxM triangular matrix which has the following form:
M = [m00 m10 m20 m30 m40]
[m11 m21 m31 m41 ]
[m22 m32 m42 ]
[m33 m43 ]
[m44 ]
If it’s easier to picture this in terms of indexes, it would look like this:
M = [0 1 3 6 10]
[2 4 7 11 ]
[5 8 12 ]
[9 13 ]
[14 ]
I know this way of indexing might look odd but it would be much easier if I could keep the indexing system as it is in order for this module to work well with others.
I am struggling with an algorithm that takes an index and size of the matrix that can return the row and column that the given index falls under. Ideally I would have 2 functions such as these:
int getRow (int index, int size);
int getCol (int index, int size);
So getRow (7, 5) would return 3
And getCol (7, 5) would return 1
I have come across this thread already but I cannot seem to modify the solution given there to work for the way I am indexing.
algorithm for index numbers of triangular matrix coefficients
New Answer
You can find the
rowandcolumnusing the following formulas:This works because the first item in each row is a triangular number (0, 1, 3, 6, 10, 15, …). So the biggest triangular number that is lower than
indexgives us therow. Thencolumnis simply the difference betweenindexand that triangular number.Also, note that you don’t need the parameter
M.Old Answer
This code will give you both the
rowandcolumnofindex.