2011-11-27 269 views
1

如何编写一个VBA宏,该宏将占用位于单元格A1至C3中的矩阵(对于任意用户指定的功率)的功率?矩阵的功率

+1

你是什么意思的矩阵的力量?样本输入和输出将会很有用。 – brettdj

+0

你想把矩阵提升到一个能量吗?就像多次使用Excel的'MMULT'函数一样?或者只是提高每个元素的权力,这是相当微不足道的?因为这是两回事。 –

回答

5

硬是以你的问题在数学意义上,这个宏通过反复调用Excel的功能MMULT提高了基质的功率(4中的例子)。

Dim i As Long 
Dim pow As Long 
Dim vIn As Variant 
Dim vOut As Variant 

pow = 4 ' or whatever 

' Fetch matrix from sheet 
vIn = Range("A1:C3") 
' Raise to power 
vOut = vIn 
For i = 1 To pow - 1 
    vOut = WorksheetFunction.MMult(vOut, vIn) 
Next i 
' Write result to sheet 
Range("E1:G3") = vOut 
-1

几年前有一个这样的问题,我记得是因为它被称为矩阵算术,但不像我在学校教过的那样。

填充单元格A1:C3与数字1至9设置单元格A5至2.选择单元A7:C9和键入

=power(A1:C3,A5) ctrl+shift+enter 

和细胞A7:C9将被设置为的值的平方在A1:C3。将A5更改为3,将单元格A7:C9设置为A1:C3中值的立方体。

在VBA相对应的是:

Range("a7:c9").FormulaArray = "=Power(a1:c3, a5)" 
+1

这并不需要矩阵的力量。它将每个单独的矩阵元素提升为一个幂(在这种情况下为2),但这不是一回事。 –

+0

我同意@ Jean-FrançoisCorbett,这不是矩阵算术,因为我被教过。但是在几年前我看到的问题中,它被用作矩阵算术,我确信我记得术语“矩阵的力量”。我以前没有遇到过ctrl + shift + enter和FormulaArray,所以我花了一些时间来玩这个问题和答案,即使我没有立即使用这些信息。这个问题让我想起了早期的一个,所以我回应了user1061701是在相同的信息之后。 –

+0

我一直在谷歌搜索,发现三年前我看到的问题和答案,虽然他们不像我记得的那样。问题是“你如何将矩阵转换成Excel的权力?”答案是[链接](http://answers.yahoo.com/question/index?qid=20090502130515AA4IjPd)。这个答案只涉及Excel用户端,所以我必须通过将答案记录为宏来发现自己的VBA版本。 –

0

我使用了下面的函数。请注意,当指数为0时,函数返回单位矩阵,否则矩阵乘以指数次数。

'Raises matrix to a power 
Function PowerMatrixNew(rngInp As Range, lngPow As Integer) As Variant() 
'create identitu for power 0 
Dim identity() As Variant 
ReDim identity(rngInp.Rows.Count, rngInp.Rows.Count) 

Dim i As Integer 
Dim j As Integer 
For i = 1 To rngInp.Rows.Count 
    For j = 1 To rngInp.Rows.Count 
    If (i = j) Then 
    identity(i, j) = 1 
    Else 
    identity(i, j) = 0 
    End If 
    Next j 
Next i 

PowerMatrixNew = identity 
For i = 1 To lngPow 
    PowerMatrixNew = Application.WorksheetFunction.MMult(rngInp, PowerMatrixNew) 
Next 
End Function