53 lines
1.2 KiB
AutoHotkey
53 lines
1.2 KiB
AutoHotkey
Matrix("b"," ; rows separated by ","
|
|
, 1 2 ; entries separated by space or tab
|
|
, 2 3
|
|
, 3 0")
|
|
MsgBox % "B`n`n" MatrixPrint(b)
|
|
Matrix("c","
|
|
, 1 2 3
|
|
, 3 2 1")
|
|
MsgBox % "C`n`n" MatrixPrint(c)
|
|
|
|
MatrixMul("a",b,c)
|
|
MsgBox % "B * C`n`n" MatrixPrint(a)
|
|
|
|
MsgBox % MatrixMul("x",b,b)
|
|
|
|
|
|
Matrix(_a,_v) { ; Matrix structure: m_0_0 = #rows, m_0_1 = #columns, m_i_j = element[i,j], i,j > 0
|
|
Local _i, _j = 0
|
|
Loop Parse, _v, `,
|
|
If (A_LoopField != "") {
|
|
_i := 0, _j ++
|
|
Loop Parse, A_LoopField, %A_Space%%A_Tab%
|
|
If (A_LoopField != "")
|
|
_i++, %_a%_%_i%_%_j% := A_LoopField
|
|
}
|
|
%_a% := _a, %_a%_0_0 := _j, %_a%_0_1 := _i
|
|
}
|
|
MatrixPrint(_a) {
|
|
Local _i = 0, _t
|
|
Loop % %_a%_0_0 {
|
|
_i++
|
|
Loop % %_a%_0_1
|
|
_t .= %_a%_%A_Index%_%_i% "`t"
|
|
_t .= "`n"
|
|
}
|
|
Return _t
|
|
}
|
|
MatrixMul(_a,_b,_c) {
|
|
Local _i = 0, _j, _k, _s
|
|
If (%_b%_0_0 != %_c%_0_1)
|
|
Return "ERROR: inner dimensions " %_b%_0_0 " != " %_c%_0_1
|
|
%_a% := _a, %_a%_0_0 := %_b%_0_0, %_a%_0_1 := %_c%_0_1
|
|
Loop % %_c%_0_1 {
|
|
_i++, _j := 0
|
|
Loop % %_b%_0_0 {
|
|
_j++, _k := _s := 0
|
|
Loop % %_b%_0_1
|
|
_k++, _s += %_b%_%_k%_%_j% * %_c%_%_i%_%_k%
|
|
%_a%_%_i%_%_j% := _s
|
|
}
|
|
}
|
|
}
|