2011-11-27 268 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