Матричные операции
Предположим, что мы представляем векторы v = (vᵢ) как последовательности чисел, а матрицы m = (mᵢⱼ) как последовательности векторов (рядов матрицы). Например, матрица

представляется в виде последовательности ((1 2 3 4) (4 5 6 6) (6 7 8 9)) . Имея такое представление, мы можем использовать операции над последовательностями, чтобы кратко выразить основные действия над матрицами и векторами. Эти операции (описанные в любой книге по матричной алгебре) следующие:
(dot-product v w) возвращает сумму ∑ᵢvᵢwᵢ
(matrix-*-vector m v) возвращает вектор t , где tᵢ = ∑ⱼmᵢⱼvᵢ
(matrix-*-matrix m n) возвращает матрицу p , где pᵢⱼ = ∑ₖmᵢₖnₖⱼ
(transpose m) возвращает матрицу n , где nᵢⱼ = mⱼᵢ
Скалярное произведение мы можем определить так:
(define (dot-product v w)
(accumulate + 0 (map * v w)))
Заполните пропуски в следующих процедурах для вычисления остальных матричных операций. (Процедура accumulate-n описана в упражнении 2.36 .)
(define (matrix-*-vector m v)
(map m))
(define (transpose mat)
(accumulate-n mat))
(define (matrix-*-matrix m n)
(let ((cols (transpose n)))
(map m)))
Комментарии отсутствуют.