# Need help to build a Matrix Identity

function matidentity(nsize as integer) as double(, )
dim i, j as integer
dim a2(-1, -1) as double
redim a2(nsize, nsize)
for i=0 to nsize
for j=0 to nsize
a2(i, j)=0.0
next
a2(i, i)=1.0
next
return a2()
end function

event action button

dim a(10, 10) as double
dim n, n1 as integer
n1=4
a()=matidentity(n1)
n=Ubound(a(), 1)
system.debugLog ?
End Sub

// 1 0 0 0
// 0 1 0 0
// 0 0 1 0
// 0 0 0 1

Whatâ€™s the question? Also, entering 4 will give you a 5x5 matrix (not the 4x4 you show at the bottom) because things are 0 based.

1 Like

The matrix 4x4 is shown what output must be.
My question is how to get this matrix, with 0 Based is default, thus n1=3, the output must be the matrix shown below ?

If I make n1=3, I do get that matrix. If you add this function you can view it.

``````Public Function matrixToString(matrix(, ) as double) as String
dim matrixString as String = ""

for row as Integer = 0 to UBound(matrix,1)

matrixString = matrixString + str(matrix(row,0))
for col as Integer = 1 to UBound(matrix, 2)
matrixString = matrixString + " " + str(matrix(row, col))
next col
matrixString = matrixString + EndOfLine

next row

return matrixString

End Function
``````

At the end of your button action event routine, use `system.debugLog matrixToString(a())` to view it. You should verify that I didnâ€™t get the row and column order backward (and add error checking, etc).

Bill,
The argument must be a square matrix order â€śnâ€ť.
the identity matrix of size n is the n Ă— n square matrix with ones on the main diagonal and zeros elsewhere.

Iâ€™m sorry, I guess I donâ€™t understand what youâ€™re asking for then. Your function â€śmatidentity(3)â€ť will return a â€ś0 to 3 by 0 to 3â€ť identity matrix, which is 4x4. If youâ€™re looking for one that goes from 1 to 4, you could always make it a 5x5 matrix (by having n1=4) and just loop the rows and columns starting at 1 instead of 0. Good luck.

Ok Bill,
Thanks a lot.