Attribute VB_Name = "MATRIX_ARITHM_DIVIDE_LIBR" Option Explicit 'Requires that all variables to be declared explicitly. Option Base 1 'The "Option Base" statement allows to specify 0 or 1 as the 'default first index of arrays. '************************************************************************************ '************************************************************************************ '© Copyright NicoSystem 2009. All rights reserved by Rafael Nicolas Fermin Cota, 'San Francisco, CA. USA www.rnfc.org 'nfermincota.hba2005@ivey.ca '************************************************************************************ '************************************************************************************ 'FUNCTION : MATRIX_ELEMENTS_DIVIDE_FUNC 'DESCRIPTION : Returns the M = aA / bB 'LIBRARY : MATRIX 'GROUP : ARITHMETIC_DIVIDE 'ID : 00X 'AUTHOR : RAFAEL NICOLAS FERMIN COTA 'LAST UPDATE : 01/22/2009 '************************************************************************************ '************************************************************************************ Function MATRIX_ELEMENTS_DIVIDE_FUNC(ByRef ADATA_RNG As Variant, _ ByRef BDATA_RNG As Variant, _ Optional ByVal ASCALAR_VAL As Double = 1, _ Optional ByVal BSCALAR_VAL As Double = 1) Dim i As Long Dim j As Long Dim ANROWS As Long Dim ANCOLUMNS As Long Dim BNROWS As Long Dim BNCOLUMNS As Long Dim TEMP_MATRIX As Variant Dim ADATA_MATRIX As Variant Dim BDATA_MATRIX As Variant On Error GoTo ERROR_LABEL ADATA_MATRIX = ADATA_RNG BDATA_MATRIX = BDATA_RNG ANROWS = UBound(ADATA_MATRIX, 1) BNROWS = UBound(BDATA_MATRIX, 1) ANCOLUMNS = UBound(ADATA_MATRIX, 2) BNCOLUMNS = UBound(BDATA_MATRIX, 2) ' If (ANROWS <> BNROWS) Or (ANCOLUMNS <> BNCOLUMNS) Then: GoTo ERROR_LABEL ReDim TEMP_MATRIX(1 To ANROWS, 1 To ANCOLUMNS) For i = 1 To ANROWS For j = 1 To ANCOLUMNS TEMP_MATRIX(i, j) = (ASCALAR_VAL * ADATA_MATRIX(i, j)) / _ (BSCALAR_VAL * BDATA_MATRIX(i, j)) Next j Next i MATRIX_ELEMENTS_DIVIDE_FUNC = TEMP_MATRIX Exit Function ERROR_LABEL: MATRIX_ELEMENTS_DIVIDE_FUNC = Err.number End Function '************************************************************************************ '************************************************************************************ '© Copyright NicoSystem 2009. All rights reserved by Rafael Nicolas Fermin Cota, 'San Francisco, CA. USA www.rnfc.org 'nfermincota.hba2005@ivey.ca '************************************************************************************ '************************************************************************************ 'FUNCTION : MATRIX_ELEMENTS_DIVIDE_SCALAR_FUNC 'DESCRIPTION : 'LIBRARY : MATRIX 'GROUP : ARITHMETIC_DIVIDE 'ID : 00X 'AUTHOR : RAFAEL NICOLAS FERMIN COTA 'LAST UPDATE : 01/22/2009 '************************************************************************************ '************************************************************************************ Function MATRIX_ELEMENTS_DIVIDE_SCALAR_FUNC(ByVal DATA_RNG As Variant, _ ByVal X_VAL As Double) Dim i As Long Dim j As Long Dim NROWS As Long Dim NCOLUMNS As Long Dim TEMP_MATRIX As Variant Dim DATA_MATRIX As Variant On Error GoTo ERROR_LABEL DATA_MATRIX = DATA_RNG NROWS = UBound(DATA_MATRIX, 1) NCOLUMNS = UBound(DATA_MATRIX, 2) ReDim TEMP_MATRIX(1 To NROWS, 1 To NCOLUMNS) For i = 1 To NROWS For j = 1 To NCOLUMNS TEMP_MATRIX(i, j) = DATA_MATRIX(i, j) / X_VAL Next j Next i MATRIX_ELEMENTS_DIVIDE_SCALAR_FUNC = TEMP_MATRIX Exit Function ERROR_LABEL: MATRIX_ELEMENTS_DIVIDE_SCALAR_FUNC = Err.number End Function '************************************************************************************ '************************************************************************************ '© Copyright NicoSystem 2009. All rights reserved by Rafael Nicolas Fermin Cota, 'San Francisco, CA. USA www.rnfc.org 'nfermincota.hba2005@ivey.ca '************************************************************************************ '************************************************************************************ 'FUNCTION : MMULT2_FUNC 'DESCRIPTION : Returns matrix Z where Y=X*Z; inputs are matrix Y and X - must be 'of same no of rows this is equivalent to matlab code Z=X\Y 'LIBRARY : MATRIX 'GROUP : ARITHMETIC_DIVIDE 'ID : 00X 'AUTHOR : RAFAEL NICOLAS FERMIN COTA 'LAST UPDATE : 01/22/2009 '************************************************************************************ '************************************************************************************ Function MATRIX_ELEMENTS_DIVIDE_INVERSE_FUNC(ByRef XDATA_RNG As Variant, _ ByRef YDATA_RNG As Variant) Dim TEMP_MATRIX As Variant Dim XDATA_MATRIX As Variant Dim YDATA_MATRIX As Variant On Error GoTo ERROR_LABEL XDATA_MATRIX = XDATA_RNG YDATA_MATRIX = YDATA_RNG If UBound(XDATA_MATRIX, 1) <> UBound(YDATA_MATRIX, 1) Then: GoTo ERROR_LABEL TEMP_MATRIX = MATRIX_TRANSPOSE_FUNC(XDATA_MATRIX) TEMP_MATRIX = MMULT_FUNC(MMULT_FUNC(MATRIX_INVERSE_FUNC( _ MMULT_FUNC(TEMP_MATRIX, XDATA_MATRIX, 70), 2), _ TEMP_MATRIX, 70), YDATA_MATRIX, 70) MATRIX_ELEMENTS_DIVIDE_INVERSE_FUNC = TEMP_MATRIX Exit Function ERROR_LABEL: MATRIX_ELEMENTS_DIVIDE_INVERSE_FUNC = Err.number End Function '************************************************************************************ '************************************************************************************ '© Copyright NicoSystem 2009. All rights reserved by Rafael Nicolas Fermin Cota, 'San Francisco, CA. USA www.rnfc.org 'nfermincota.hba2005@ivey.ca '************************************************************************************ '************************************************************************************ 'FUNCTION : MATRIX_ELEMENTS_FRACTION_FUNC 'DESCRIPTION : Returns the fraction of each entry in a vector (e.g., 1 / x) 'LIBRARY : MATRIX 'GROUP : ARITHMETIC_DIVIDE 'ID : 00X 'AUTHOR : RAFAEL NICOLAS FERMIN COTA 'LAST UPDATE : 01/22/2009 '************************************************************************************ '************************************************************************************ Function MATRIX_ELEMENTS_FRACTION_FUNC(ByRef DATA_RNG As Variant) Dim i As Long Dim NROWS As Long Dim TEMP_VECTOR As Variant Dim DATA_VECTOR As Variant On Error GoTo ERROR_LABEL DATA_VECTOR = DATA_RNG If UBound(DATA_VECTOR, 1) = 1 Then: _ DATA_VECTOR = MATRIX_TRANSPOSE_FUNC(DATA_VECTOR) NROWS = UBound(DATA_VECTOR, 1) ReDim TEMP_VECTOR(1 To NROWS, 1 To 1) For i = 1 To NROWS TEMP_VECTOR(i, 1) = 1 / DATA_VECTOR(i, 1) Next i MATRIX_ELEMENTS_FRACTION_FUNC = TEMP_VECTOR Exit Function ERROR_LABEL: MATRIX_ELEMENTS_FRACTION_FUNC = Err.number End Function