Advertisement
Guest User

Untitled

a guest
Feb 1st, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.96 KB | None | 0 0
  1. (defmethod mult ((m1 matrix-r) (m2 matrix-r))
  2. (if (not (= (number-of-cols m1) (number-of-rows m2)))
  3. (error "Can't perform matrix multiplication")
  4. (progn
  5. (let* ((elements-m1 (elements m1)) (elements-m2 (elements m2))
  6. (n (number-of-cols m1))
  7. (n-rows (number-of-rows m1))
  8. (n-cols (number-of-cols m2))
  9. (m (make-instance 'matrix-r :number-of-rows n-rows :number-of-cols n-cols))
  10. (elements-m (elements m)))
  11. (declare
  12. (type (simple-array double-float) elements-m1 elements-m2 elements-m)
  13. (type fixnum n-rows n-cols n)
  14. (optimize (debug 0) (safety 0) (speed 3)))
  15. (loop for i fixnum from 0 below n-rows do
  16. (loop for j fixnum from 0 below n-cols do
  17. (setf (aref elements-m (+ j (the fixnum (* i n-cols)))) (loop for k fixnum from 0 below n
  18. sum (* (aref elements-m1 (+ k (the fixnum (* i n))))
  19. (aref elements-m2 (+ j (the fixnum (* k n)))))))))
  20. m))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement