0
votes

I am going to use the following formula on every cell of a 4 × 6 (m×n in the code) matrix to get the normalized matrix:
\pi_{ij}=\frac{x_{ij}}{\sqrt{\Sigma_{i=1}^m x_{ij}^2}}

The matrix in Calc is:
enter image description here

I use the following Basic code in LibreOffice:

REM  *****  BASIC  *****

Sub Main

Normalize(5,3)

End Sub



Sub Normalize (ByVal n As Integer,ByVal m As Integer)

Dim Doc As Object
Dim Sheet As Object
Dim SrcCell 'Cell in the source matrix 
Dim TargetCell 'Cell in the target matrix where normalized values are saved 
Dim TempCell As Object 

Dim I 'index 
Dim J 'index 
Dim JJ 'inner index 
Dim Sum 'Sigma x_ij^2 (j=0 to m)
Dim m 'maximum row index 
Dim n 'maximum column index 


Doc = ThisComponent
Sheet = Doc.Sheets(0)




For I = 0 to n  'traverse columns 
    For J=0 to m 'traverse rows 
        SrcCell = Sheet.getCellByPosition(I,J)
        'Now apply the normalization formula for this cell 
        'Run a new loop to run formula on this cell 
        Sum = 0 'Reset Sum to 0
        For JJ=0 to m 
            TempCell = Sheet.getCellByPosition(I,JJ)
            Sum = Sum + (TempCell.Value^2)
        Next 
        TargetCell = Sheet.getCellByPosition(I+n+1,J) 'Place the normalized cells in a new matrix cell, n+1 cells away

        'Put the sum in the formula 
        TargetCell.Value = SrcCell.Value/Sqr(Sum)

    Next 


Next 

End Sub 

I want am going to have the normalized matrix appear on the right side of the original one. But nothing appears. What am I doing wrong?

1

1 Answers

0
votes

The code uses n and m as parameters but then declares them, destroying the values. To fix, remove the following two lines. For readability, move these comments near Sub Normalize.

Dim m 'maximum row index 
Dim n 'maximum column index

To find such problems with the Basic IDE debugger, press Breakpoint On/Off in the toolbar to set a couple of breakpoints, and also Enable Watch.