Матричные операции

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

2.37

представляется в виде последовательности ((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)))

Комментарии отсутствуют.

Необходима авторизация

Вы должны авторизоваться для создания комментария.

Вход