2017-02-01 9 views
0

Меня попросили реализовать матричное умножение. До сих пор у меня был код: (define mult (λ (m1 m2) (if (or (empty? m1) (empty? m2)) '() (map vec-mult m1 m2))))Можно ли делать векторно-матричное умножение только с помощью «карты» и «применить»?

только генерирует список списков. Каждый из внутренних списков должен быть суммирован, чтобы дать мне значения по диагонали для добавления, чтобы генерировать элементы. Я застрял в части того, как я должен делать двумерное умножение, чтобы каждая строка в m1 умножалась на каждую строку в m2 (следовательно, умножение вектор-матрица). У меня также есть «транспонирование» и «vec-mult». Пожалуйста, дайте мне понять, как я должен подходить к этой проблеме. Профессор хочет, чтобы мы использовали транспонирование и карту, но я просто не вижу, как это нужно делать.

Благодаря

ответ

0

сделай что-нибудь с связанной переменной с каждым элементом списка:

(let ((a 5)) 
    (map (lambda (e) (* a e)) '(1 2 3 4))) 
; ==> (5 10 15 20) 

Сумма (или сделать что-нибудь) со списком в качестве аргументов:

(apply + '(1 2 3)) 
; ==> 6 

unzip a):

(apply map list '((1 2 3) (4 5 6) (7 8 9) (10 11 12))) 
; ==> ((1 4 7 10) (2 5 8 11) (3 6 9 12)) 

Свести один уровень:

(apply append '((1 (2)) (3 4))) 
; ==> (1 (2) 3 4) 
0

Рассмотрим две матрицы:

[ a b ]   [ x ] 
A = [ c d ]  v = [ y ] 

Прежде всего матричного произведения А и В:

 [ ax + by ] 
Ax = [ cx + dy ] 

Обратите внимание, что транспонирование B дает :

T 
v = [ x y ] 

Рассмотрим теперь поэлементное умножение строк матрицы А с транспонированной из V:

[a b] mult [x y] [ ax by ] 

[c d] mult [x y] = [ cx dy ] 

Обратите внимание, что сумма строк являются:

ax + by 
cx + dy 

, которые являются элементами Ax.

Так умножать А с V:

  1. Транспонирование v
  2. Для всех строк вычислительного точечного продукта с V транспонировать.
  3. Соберите суммы строк.

объявления 1 .: Транспонирование: Transpose a matrix in racket (list of lists

Ad 2. Использование (map * row v-transposed) для вычисления точечно продукта.

Объявление 3. Используйте (apply + products), чтобы рассчитать сумму продуктов.