今天要整理 MMULT 這一組矩陣函式,包含 MINVERSE、MDETERM、MUNIT、ARRAY_CONSTRAIN,還有算平方和的 SUMX2MY2、SUMX2PY2、SUMXMY2。
坦白說,矩陣在我的日常工作中很少出現,會用到的多半是一個需求:「每家店賣了好幾種品項,每種品項成本不同,一次算出每家店的總成本」。這剛好就是矩陣乘法,所以先用這個情境帶出 MMULT,其他當工具書。
先看情境:三家店的總成本
三家店各賣紅茶、綠茶、奶茶,銷量放在 A1:D4,三種飲料每杯的成本放在 F2:F4:
| 店 | 紅茶 | 綠茶 | 奶茶 |
|---|---|---|---|
| 一店 | 37 | 112 | 8 |
| 二店 | 54 | 61 | 29 |
| 三店 | 18 | 96 | 43 |
單位成本(F2:F4)依序是 12、9、21。
先手算一店:37 × 12 + 112 × 9 + 8 × 21 = 444 + 1008 + 168 = 1620。三家店各算一次、還要加起來,有點麻煩。MMULT 一個公式就能把三家店的結果排成一欄:
三家店的銷量矩陣乘以單位成本
=MMULT(B2:D4, F2:F4)來看看結果:
| 店 | 總成本 |
|---|---|
| 一店 | 1620 |
| 二店 | 1806 |
| 三店 | 1983 |
這邊的規則是:第一個矩陣的欄數(3)必須等於第二個矩陣的列數(3),結果的大小是第一個的列數乘以第二個的欄數(3 × 1)。只算單店的話,SUMPRODUCT 也可以,MMULT 的好處是一次得到多列。
怎麼選
| 想做的事 | 用哪個 | 回傳 |
|---|---|---|
| 兩個矩陣相乘 | MMULT | 矩陣 |
| 反矩陣(解聯立方程式) | MINVERSE | 矩陣 |
| 方陣的行列式,判斷有沒有反矩陣 | MDETERM | 單一數字 |
| 單位矩陣 | MUNIT | 矩陣 |
| 取左上角的幾列幾欄 | ARRAY_CONSTRAIN | 矩陣 |
| 兩組數字的平方差、平方和、差的平方和 | SUMX2MY2、SUMX2PY2、SUMXMY2 | 單一數字 |
矩陣運算
MMULT
計算兩個矩陣的乘積。
語法:
- 矩陣1 的欄數要等於矩陣2 的列數,否則會得到
#VALUE!。
範例見上一節。需要轉置的時候用 TRANSPOSE() 包起來。
MINVERSE
回傳方陣的反矩陣。
語法:
最直接的用途是解聯立方程式。上面的三家店,假設我手上只有「各店銷量」跟「各店總成本」(1620、1806、1983,放在 H2:H4),想反推三種飲料的單位成本:
用反矩陣反推單位成本
=ARRAYFORMULA(ROUND(MMULT(MINVERSE(B2:D4), H2:H4), 2))在空白區輸入後,會往下展開三列 12、9、21,剛好是原本的成本。ROUND 用來處理浮點數尾數,例如 21.000000000000004;外層的 ARRAYFORMULA 讓四捨五入套用到完整陣列。本例若只寫 ROUND(MMULT(...),2),Google 試算表只會回傳第一格 12,後兩格不會展開。Excel 沒有 ARRAYFORMULA 這個函式;Microsoft 365 與 Excel 2021 的動態陣列會自動展開,不需要它。
小一點的例子,在空白工作表的 A1:B2 放 2 × 2 矩陣 {2, 1; 5, 3}:
2x2 矩陣的反矩陣
=MINVERSE(A1:B2)結果是第一列 3、-1,第二列 -5、2。手算:行列式是 2 × 3 - 1 × 5 = 1,反矩陣就是對調對角線、對角線外變號,再除以 1。
矩陣沒有反矩陣(行列式為 0)時,MINVERSE 會回 #NUM!;如果給的不是方陣(列數與欄數不同),則是 #VALUE!。
MDETERM
回傳方陣的行列式。
語法:
2x2 矩陣的行列式
=MDETERM(A1:B2)用同一個 {2, 1; 5, 3},結果是 1。三家店那個 3 × 3 的銷量矩陣, 是 -174869,不是 0,所以 MINVERSE 反得出來。
行列式是 0 就代表沒有反矩陣,意思是你的方程式裡有某一列其實是別列的組合,沒有唯一解。
MUNIT
回傳指定大小的單位矩陣,對角線是 1,其他是 0。
語法:
3x3 單位矩陣
=MUNIT(3)會溢出成 3 × 3:
| 欄 1 | 欄 2 | 欄 3 |
|---|---|---|
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |
任何矩陣乘單位矩陣都會等於它自己, 會原樣回傳銷量。我自己用它主要是做檢查,或是配合 MMULT 做比較。
ARRAY_CONSTRAIN
把陣列限制在指定的列數和欄數,從左上角開始取。
語法:
取銷量矩陣左上角 2 列 2 欄
=ARRAY_CONSTRAIN(B2:D4, 2, 2)結果:
| 紅茶 | 綠茶 |
|---|---|
| 37 | 112 |
| 54 | 61 |
它不屬於矩陣運算,但常跟 MMULT 這類會吐出整片結果的公式搭配,只取想要的那一角。
平方和
這三個函式的參數都是兩組同樣大小的數字,大小不同會出錯。下面一樣在空白工作表,用 5 天的預測與實際銷量:預測 40、55、38、62、47,放在 A1:A5,實際 37、60、35、66、47,放在 B1:B5。
SUMXMY2
兩組數字相減後,差的平方再加總,常用來量預測誤差。
語法:
預測與實際的差的平方和
=SUMXMY2(A1:A5, B1:B5)先手算:差是 3、-5、3、-4、0,平方是 9、25、9、16、0,總和 59。再開根號可以算均方根誤差:
均方根誤差
=TEXT(SQRT(SUMXMY2(A1:A5, B1:B5) / 5), "0.0000")結果是 3.4351。
SUMX2MY2
兩組數字各自平方後相減,再加總。
語法:
預測平方減實際平方的總和
=SUMX2MY2(A1:A5, B1:B5)結果是 -637。注意它是 x² - y²,不是 (x - y)²,跟上一個不要搞混。
SUMX2PY2
兩組數字各自平方後相加,再加總。
語法:
預測平方加實際平方的總和
=SUMX2PY2(A1:A5, B1:B5)結果是 24881。
這三個我在工作上都沒用過,但記得名字裡的 X2 是 x 的平方、Y2 是 y 的平方、M 是減、P 是加。SUMXMY2 的 XMY2 是「x 減 y 再平方」。
要加總平方可以看 指數、對數與特殊函式 裡的 SUMSQ。需要的時候回來查一下,就這樣!
接下來可以
相關文章
查看所有文章表單回覆表自動填滿:編號、單價、金額、狀態一次搞定
用 Google 表單收訂單時,在回覆工作表旁邊用 ARRAYFORMULA 自動產生編號、查價目表帶出單價、算金額,並用巢狀 IF 標出大單與待確認的列,新回覆進來不用再拖公式。
TOROW、TOCOL、WRAPROWS、WRAPCOLS:攤平與重新排列資料
把二維表格攤平成單列或單欄的 TOROW、TOCOL,以及把一長串名單切成每列或每欄固定個數的 WRAPROWS、WRAPCOLS。附 ignore、scan_by_column、pad_with 的用法,最後用座位表當實例。
指數、對數與階乘:EXP、LN、LOG、FACT、GAMMALN 與 SERIESSUM
EXP、LN、LOG、LOG10 的指數對數家族,加上 FACT、FACTDOUBLE、MULTINOMIAL、GAMMALN、SQRTPI、SUMSQ、SERIESSUM、ERF、ERFC 等數學特殊函式。用連續複利和幾年翻倍當實例。
留言討論
共 0 則留言
