Не самый элегантный (может быть медленным для 30 матриц):
lapply(1:length(mat_lag),function(index)
mapply(function(x, y) x*y, t(PHI[[index]]), mat_lag[[index]]))
[[1]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 3 44 133 6 55 152 9 66 171
[2,] 4 48 140 8 60 160 12 72 180
[3,] 5 52 147 10 65 168 15 78 189
[4,] 6 56 154 12 70 176 18 84 198
[5,] 7 60 161 14 75 184 21 90 207
[[2]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 20 130 288 22 140 306 24 150 324
[2,] 30 143 304 33 154 323 36 165 342
[3,] 40 156 320 44 168 340 48 180 360
[4,] 50 169 336 55 182 357 60 195 378
[5,] 60 182 352 66 196 374 72 210 396
[[3]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 0 -27 -102 -1 -36 -119 -2 -45 -136
[2,] 0 -30 -108 -2 -40 -126 -4 -50 -144
[3,] 0 -33 -114 -3 -44 -133 -6 -55 -152
[4,] 0 -36 -120 -4 -48 -140 -8 -60 -160
[5,] 0 -39 -126 -5 -52 -147 -10 -65 -168
Результат примера OP:
mapply(function(x, y) x*y, t(Phi1), mat_lag[[1]])
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 3 44 133 6 55 152 9 66 171
[2,] 4 48 140 8 60 160 12 72 180
[3,] 5 52 147 10 65 168 15 78 189
[4,] 6 56 154 12 70 176 18 84 198
[5,] 7 60 161 14 75 184 21 90 207