View Single Post
  #4   Report Post  
Posted to microsoft.public.excel.programming
George Costanza George Costanza is offline
external usenet poster
 
Posts: 1
Default Subtract all individual elements of two matrix


Hello,

I still can't make this function AddMAtrix to work.
Below is all the code I'm using.
The varcovar function is working ok (you can try it, selecting data as a matrix of n rows by m columns. the result is a matrix with m rows and m columns).
But when I pass this function to the AddMatrix function I get #value error and I don't understand why.

-------------------------
Option Explicit

Function AddMAtrix(rng As Range) As Variant

Dim i As Integer
Dim j As Integer
Dim colnum As Integer
Dim rownum As Integer
Dim AddMtrx() As Variant
Dim Aux1() As Variant
Dim Aux2() As Variant

Aux1 = VarCov(rng)
Aux2 = VarCov(rng)

colnum = rng.Columns.Count
' covariance matrix
ReDim AddMtrx(colnum - 1, colnum - 1)

For i = 1 To colnum
For j = 1 To colnum
AddMtrx(i - 1, j - 1) = Aux1(i - 1, j - 1) + Aux2(i - 1, j - 1)
Next j
Next i

AddMAtrix = AddMtrx

End Function

Function VarCov(rng As Range) As Variant

Dim i As Integer
Dim j As Integer
Dim colnum As Integer
Dim matrix() As Double

colnum = rng.Columns.Count
ReDim matrix(colnum - 1, colnum - 1)

For i = 1 To colnum
For j = 1 To colnum
matrix(i - 1, j - 1) = Application.WorksheetFunction.Covar(rng.Columns(i) , rng.Columns(j))
Next j
Next i

VarCov = matrix

End Function

-------------------------------------------

thanks in advance

On Monday, October 1, 2012 3:13:04 AM UTC+1, Ben McClave wrote:
George,



I think that it would work if the function subtracting the two arrays returned an array as well. I adapted your example function to perform this task and it seems to work for me.



Ben



Function AddMAtrix(rng As Range) As Variant



Dim i As Integer

Dim j As Integer

Dim colnum As Integer

Dim rownum As Integer

Dim AddMtrx() As Variant

Dim Aux1() As Variant

Dim Aux2() As Variant



Aux1 = CovarianceMatrix(rng)

Aux2 = AverageCovarianceMatrix(rng)



colnum = rng.Columns.Count

' covariance matrix

ReDim AddMtrx(colnum - 1, colnum - 1)



For i = 1 To colnum

For j = 1 To colnum

AddMtrx(i - 1, j - 1) = Aux1(i - 1, j - 1) - Aux2(i - 1, j - 1)

Next j

Next i



AddMAtrix = AddMtrx



End Function