Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting the Row and Column of a Triangular Matrix, Given the Index

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

like image 804
Redek Avatar asked Mar 12 '12 20:03

Redek


People also ask

How do you find the upper and lower triangular matrix?

In the mathematical discipline of linear algebra, a triangular matrix is a special kind of square matrix. A square matrix is called lower triangular if all the entries above the main diagonal are zero. Similarly, a square matrix is called upper triangular if all the entries below the main diagonal are zero.

What is the formula for upper triangular matrix?

If U is an n × n upper-triangular matrix, we know how to solve the linear system Ux = b using back substitution. In fact, this is the final step in the Gaussian elimination algorithm that we discussed in Chapter 2. Compute the value of xn = bn/unn, and then insert this value into equation (n − 1) to solve for xn−1.

What is row index in matrix?

Description. Returns a matrix of integers indicating their row number in a matrix-like object, or a factor indicating the row labels.


1 Answers

New Answer

You can find the row and column using the following formulas:

int row = floor(-0.5 + sqrt(0.25 + 2 * index));
int triangularNumber = row * (row + 1) / 2;
int column = index - triangularNumber;

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 index gives us the row. Then column is simply the difference between index and that triangular number.

Also, note that you don't need the parameter M.


Old Answer

This code will give you both the row and column of index.

int triangularNumber = 0;
int row = 0;
while (triangularNumber + row < index) {
    row ++;
    triangularNumber += row;
}
int column = index - triangularNumber;
like image 89
sch Avatar answered Oct 21 '22 03:10

sch