Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2
Default Subtract all individual elements of two matrix

Hi,

I'm trying to subtract all the individual elements of two matrices.

One of the matrices is calculated using this function:

Function CovarianceMatrix(rng As Range) As Variant

Dim i As Integer
Dim j As Integer
Dim colnum As Integer
Dim rownum As Integer
Dim auxCovarianceMatrix() As Variant


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

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

CovarianceMatrix = auxCovarianceMatrix
End Function

the other matrix (named avcovariancematrix) is calculated using a very similar formula.

I verified that both of these functions work well in the worksheet.

Now I need to subtract all the individual elements of both matrices (basic matrix operation), but I'm getting errors and I don't understand why.
I created a new function that calls the function I posted above and the other one.

This is the function I'm using:
Function AddMAtrix(rng as range) as variant

Aux1=CovarianceMatrix(rng)
Aux2=AverageCovarianceMatrix(rng)

AddMatrix=Aux1-Aux2

end function

thanks
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2
Default Subtract all individual elements of two matrix

By mistake I typed the name of one variable incorrectly:

here is the revised post:
Hi,

I'm trying to subtract all the individual elements of two matrices.

One of the matrices is calculated using this function:

Function CovarianceMatrix(rng As Range) As Variant

Dim i As Integer
Dim j As Integer
Dim colnum As Integer
Dim rownum As Integer
Dim auxCovarianceMatrix() As Variant


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

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

CovarianceMatrix = auxCovarianceMatrix
End Function

the other matrix (named averagecovariancematrix) is calculated using a very similar formula.

I verified that both of these functions work well in the worksheet.

Now I need to subtract all the individual elements of both matrices (basic matrix operation), but I'm getting errors and I don't understand why.
I created a new function that calls the function I posted above and the other one.

This is the function I'm using:
Function AddMAtrix(rng as range) as variant

Aux1=CovarianceMatrix(rng)
Aux2=AverageCovarianceMatrix(rng)

AddMatrix=Aux1-Aux2

end function

thanks






On Sunday, September 30, 2012 2:22:23 AM UTC+1, wrote:
Hi,



I'm trying to subtract all the individual elements of two matrices.



One of the matrices is calculated using this function:



Function CovarianceMatrix(rng As Range) As Variant



Dim i As Integer

Dim j As Integer

Dim colnum As Integer

Dim rownum As Integer

Dim auxCovarianceMatrix() As Variant





colnum = rng.Columns.Count

' covariance matrix

ReDim auxCovarianceMatrix(colnum - 1, colnum - 1)



For i = 1 To colnum

For j = 1 To colnum

auxCovarianceMatrix(i - 1, j - 1) = Application.WorksheetFunction.Covar(rng.Columns(i) , rng.Columns(j))

Next j

Next i



CovarianceMatrix = auxCovarianceMatrix

End Function



the other matrix (named avcovariancematrix) is calculated using a very similar formula.



I verified that both of these functions work well in the worksheet.



Now I need to subtract all the individual elements of both matrices (basic matrix operation), but I'm getting errors and I don't understand why.

I created a new function that calls the function I posted above and the other one.



This is the function I'm using:

Function AddMAtrix(rng as range) as variant



Aux1=CovarianceMatrix(rng)

Aux2=AverageCovarianceMatrix(rng)



AddMatrix=Aux1-Aux2



end function



thanks

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 173
Default Subtract all individual elements of two matrix

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
  #4   Report Post  
Posted to microsoft.public.excel.programming
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


  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 173
Default Subtract all individual elements of two matrix

Well, this is not the most elegant of solutions, but I think that it works. I basically took the guts of the two VarCov functions and added them together. It seems to work OK on my machine. My guess as to why it wasn't working before is that the VarCov functions are returning an array, but when your AddMatrix function calls the VarCov function, it is feeding it a range. There are some articles out there on using arrays in formulas, but the workaround below may work for you. Best of luck,

Ben

Function AddMatrix(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)) + _
Application.WorksheetFunction.Covar(rng.Columns(i) , rng.Columns(j))
Next j
Next i

AddMatrix = matrix

End Function
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Accessing individual elements of an array returned by a function [email protected] Excel Programming 1 March 19th 08 06:13 AM
Calculate and display individual error bars for individual points del Charts and Charting in Excel 2 March 31st 06 05:11 PM
Calculate and display individual error bars for individual points del Charts and Charting in Excel 1 March 31st 06 04:24 AM
How to compute the inverse of a matrix with some complex elements Annoushka42 Excel Worksheet Functions 0 March 6th 06 12:08 AM
How to do matrix operation with complex number elements in Excel WILSON CHIRAMAL Excel Worksheet Functions 1 August 15th 05 02:26 PM


All times are GMT +1. The time now is 11:51 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"