Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #|;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. HW4 #6 A
  3. DisplayMatrixRowCol.rkt by Ryan Liszewski
  4. Reads matrix from a file and display a specified row or column
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|#
  6. #lang racket
  7. ;read matrix from file
  8. (define (read-matrix filename)
  9.   (let* ((inport (open-input-file filename))
  10.          (nrow (read inport))
  11.          (ncol (read inport))
  12.          (mat (make-vector nrow)))
  13.     (do ((i 0 (add1 i)))
  14.       ((>= i nrow) (close-input-port inport) mat)
  15.       (let ((row (make-vector ncol)))
  16.         (do ((j 0 (add1 j)))
  17.           ((>= j ncol) (vector-set! mat i row))
  18.           (vector-set! row j (read inport)))))))
  19.  
  20. ;display vector
  21. (define (display-vector v)
  22.   (do ((i 0 (add1 i)))
  23.     ((>= i (vector-length v)) (display ""))
  24.     (display (vector-ref v i)) (display " ")))
  25.  
  26. ;return i-th row
  27. (define (ro filename i)
  28.   (define mat (read-matrix filename))
  29.   (vector-ref mat i))
  30. ;display i-th row
  31. (define (row filename i)
  32.   (display-vector (ro filename (- i 1))))
  33.  
  34. ;return j-th col
  35. (define (co filename j)
  36.   (define mat (read-matrix filename))
  37.   (define nrow (vector-length mat))
  38.   (define column (make-vector nrow))
  39.   (do ((i 0 (add1 i)))
  40.     ((>= i nrow) column)
  41.     (vector-set! column i (vector-ref (vector-ref mat i) j))))
  42.  
  43. ;display j-th col
  44. (define (col filename j)
  45.   (display-vector (co filename (- j 1))))
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53. #|;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  54. HW4 #6 B
  55. MatrixMultiplication.rkt by Ryan Liszewski
  56.  
  57. Multiplies two matrices from two input files and produces the result in an output file
  58. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|#
  59. #lang racket
  60. ;read matrix from file
  61. (define (read-matrix filename)
  62.   (let* ((inport (open-input-file filename))
  63.          (nrow (read inport))
  64.          (ncol (read inport))
  65.          (mat (make-vector nrow)))
  66.     (do ((i 0 (add1 i)))
  67.       ((>= i nrow) (close-input-port inport) mat)
  68.       (let ((row (make-vector ncol)))
  69.         (do ((j 0 (add1 j)))
  70.           ((>= j ncol) (vector-set! mat i row))
  71.           (vector-set! row j (read inport)))))))
  72.  
  73. ;display components of the given vector
  74. (define (display-vector v)
  75.   (do ((i 0 (add1 i)))
  76.     ((>= i (vector-length v)) (display ""))
  77.     (display (vector-ref v i)) (display " ")))
  78.  
  79. ;return i-th row
  80. (define (ro filename i)
  81.   (define mat (read-matrix filename))
  82.   (vector-ref mat i))
  83.  
  84. ;display i-th row
  85. (define (row filename i)
  86.   (display-vector (ro filename (- i 1))))
  87.  
  88. ;return j-th col
  89. (define (co filename j)
  90.   (define mat (read-matrix filename))
  91.   (define nrow (vector-length mat))
  92.   (define column (make-vector nrow))
  93.   (do ((i 0 (add1 i)))
  94.     ((>= i nrow) column)
  95.     (vector-set! column i (vector-ref (vector-ref mat i) j))))
  96.  
  97. ;display j-th col
  98. (define (col filename j)
  99.   (display-vector (co filename (- j 1))))
  100.  
  101. ;return dot product
  102. (define (dot-product v1 v2)
  103.   (do ((i 0 (add1 i)) (sum 0 (+ sum (* (vector-ref v1 i)
  104.                                        (vector-ref v2 i)))))
  105.     ((>= i (vector-length v1)) sum)))
  106.  
  107. ;matrix multiplication
  108. (define (mmul f1 f2 f3)
  109.   (define m1 (read-matrix f1))
  110.   (define m2 (read-matrix f2))
  111.   (define nrow (vector-length m1))
  112.   (define ncol (vector-length m2))
  113.   (define outport (open-output-file f3))
  114.   (display nrow outport) (display " " outport)
  115.   (display ncol outport) (newline outport)
  116.   (do ((i 0 (add1 i)))
  117.     ((>= i nrow) (close-output-port outport) (display ""))
  118.     (let ((row (make-vector ncol)))
  119.       (do ((j 0 (add1 j)))
  120.         ((>= j ncol) (display-vector row) (newline) (newline outport))
  121.         (vector-set! row j (dot-product (ro f1 i) (co f2 j)))
  122.         (display (vector-ref row j) outport) (display " \n" outport)))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement