Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hello all,
I interpret that Excel can handle matrix multiplication of "maximum" 73 x 73 entities in one sheet with 73 x 73 entities in another sheet. Is this correct? If yes, what could be the VBA code to perform matrix multiplication of on M x N entities in one sheet with N x P entites in another matrix? (where M, N and P are greater than 73) Please help. Thanks, Thulasiram. |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Here would be the basic approach. You can add more error checking:
Function MyMMULT(rngA As Range, rngB As Range) Dim ArrC() As Double If rngA.Rows.Count < rngB.Columns.Count Then MyMMULT = CVErr(xlErrRef) Exit Function End If ReDim ArrC(1 To rngA.Rows.Count, 1 To rngB.Columns.Count) For i = 1 To rngA.Rows.Count For j = 1 To rngB.Columns.Count For k = 1 To rngA.Columns.Count ArrC(i, j) = ArrC(i, j) + rngA(i, k) * rngB(k, j) Next k Next j Next i MyMMULT = ArrC End Function -- Regards, Tom Ogilvy "Thulasiram" wrote in message oups.com... Hello all, I interpret that Excel can handle matrix multiplication of "maximum" 73 x 73 entities in one sheet with 73 x 73 entities in another sheet. Is this correct? If yes, what could be the VBA code to perform matrix multiplication of on M x N entities in one sheet with N x P entites in another matrix? (where M, N and P are greater than 73) Please help. Thanks, Thulasiram. |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Should the 3rd line be
If rngA.Columns.Count < rngB.Rows.Count Then ? Alan Beban Tom Ogilvy wrote: Here would be the basic approach. You can add more error checking: Function MyMMULT(rngA As Range, rngB As Range) Dim ArrC() As Double If rngA.Rows.Count < rngB.Columns.Count Then MyMMULT = CVErr(xlErrRef) Exit Function End If ReDim ArrC(1 To rngA.Rows.Count, 1 To rngB.Columns.Count) For i = 1 To rngA.Rows.Count For j = 1 To rngB.Columns.Count For k = 1 To rngA.Columns.Count ArrC(i, j) = ArrC(i, j) + rngA(i, k) * rngB(k, j) Next k Next j Next i MyMMULT = ArrC End Function |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Yes it should.
-- Regards, Tom Ogilvy "Alan Beban" <unavailable wrote in message ... Should the 3rd line be If rngA.Columns.Count < rngB.Rows.Count Then ? Alan Beban Tom Ogilvy wrote: Here would be the basic approach. You can add more error checking: Function MyMMULT(rngA As Range, rngB As Range) Dim ArrC() As Double If rngA.Rows.Count < rngB.Columns.Count Then MyMMULT = CVErr(xlErrRef) Exit Function End If ReDim ArrC(1 To rngA.Rows.Count, 1 To rngB.Columns.Count) For i = 1 To rngA.Rows.Count For j = 1 To rngB.Columns.Count For k = 1 To rngA.Columns.Count ArrC(i, j) = ArrC(i, j) + rngA(i, k) * rngB(k, j) Next k Next j Next i MyMMULT = ArrC End Function |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Dear Tom Ogilvy,
I multiplied 2x2 matrix with 2x2 matrix and the mymmult function worked perfect. BUT, i multiplied 13 x 15 matrix with 15 x 20 matrix. formula written in the cell A1 of sheet 3 is given below. then corresponding cells are selcted, pressed F2 followed with Ctrl + Shift + Enter =MMULT(Sheet1!A1:O13,Sheet2!A1:T15) ------- Gives the result =mymmult(Sheet1!A1:O13,Sheet2!A1:T15) -------- Gives an error #REF! I also cross-checked by multiplying the matrices (13 x 15 with 15 x 20) in the same sheet rather in sheet 1 and 2. Still the same error # REF! exists. Please help me in this aspect. Thanks, Thulasiram. Tom Ogilvy wrote: Yes it should. -- Regards, Tom Ogilvy "Alan Beban" <unavailable wrote in message ... Should the 3rd line be If rngA.Columns.Count < rngB.Rows.Count Then ? Alan Beban Tom Ogilvy wrote: Here would be the basic approach. You can add more error checking: Function MyMMULT(rngA As Range, rngB As Range) Dim ArrC() As Double If rngA.Rows.Count < rngB.Columns.Count Then MyMMULT = CVErr(xlErrRef) Exit Function End If ReDim ArrC(1 To rngA.Rows.Count, 1 To rngB.Columns.Count) For i = 1 To rngA.Rows.Count For j = 1 To rngB.Columns.Count For k = 1 To rngA.Columns.Count ArrC(i, j) = ArrC(i, j) + rngA(i, k) * rngB(k, j) Next k Next j Next i MyMMULT = ArrC End Function |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
See Tom Ogilvy's post of 8:26pm last night in this thread.
Alan Beban Thulasiram wrote: Dear Tom Ogilvy, I multiplied 2x2 matrix with 2x2 matrix and the mymmult function worked perfect. BUT, i multiplied 13 x 15 matrix with 15 x 20 matrix. formula written in the cell A1 of sheet 3 is given below. then corresponding cells are selcted, pressed F2 followed with Ctrl + Shift + Enter =MMULT(Sheet1!A1:O13,Sheet2!A1:T15) ------- Gives the result =mymmult(Sheet1!A1:O13,Sheet2!A1:T15) -------- Gives an error #REF! I also cross-checked by multiplying the matrices (13 x 15 with 15 x 20) in the same sheet rather in sheet 1 and 2. Still the same error # REF! exists. Please help me in this aspect. Thanks, Thulasiram. Tom Ogilvy wrote: Yes it should. -- Regards, Tom Ogilvy "Alan Beban" <unavailable wrote in message ... Should the 3rd line be If rngA.Columns.Count < rngB.Rows.Count Then ? Alan Beban Tom Ogilvy wrote: Here would be the basic approach. You can add more error checking: Function MyMMULT(rngA As Range, rngB As Range) Dim ArrC() As Double If rngA.Rows.Count < rngB.Columns.Count Then MyMMULT = CVErr(xlErrRef) Exit Function End If ReDim ArrC(1 To rngA.Rows.Count, 1 To rngB.Columns.Count) For i = 1 To rngA.Rows.Count For j = 1 To rngB.Columns.Count For k = 1 To rngA.Columns.Count ArrC(i, j) = ArrC(i, j) + rngA(i, k) * rngB(k, j) Next k Next j Next i MyMMULT = ArrC End Function |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Matrix multiplication algorithm | Excel Discussion (Misc queries) | |||
Matrix Multiplication | Excel Discussion (Misc queries) | |||
Matrix Multiplication | Excel Worksheet Functions | |||
matrix multiplication | Excel Worksheet Functions | |||
matrix multiplication | Excel Programming |