View difference between Paste ID: KwNF1F25 and iJpUBh4w
SHOW: | | - or go back to the newest paste.
1
#|;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2-
HW4 #5 A
2+
HW4 #6 A
3-
ScalarProductDoLoop.rkt by Ryan Liszewski 
3+
DisplayMatrixRowCol.rkt by Ryan Liszewski 
4-
Calculates the scalar product of the given 2 vectors using a do loop
4+
Reads matrix from a file and display a specified row or column
5-
produces an error message when the vectors have different lengths or is empty
5+
6
#lang racket
7
;read matrix from file
8-
(define scalar-product 
8+
(define (read-matrix filename)
9-
  (lambda (x y)
9+
  (let* ((inport (open-input-file filename))
10-
    (cond((= (vector-length x) (vector-length y))
10+
         (nrow (read inport))
11-
           (let ((z 0))
11+
         (ncol (read inport))
12-
                  (do ((i 0 (add1 i)))
12+
         (mat (make-vector nrow)))
13-
                    ((>= i (vector-length x)) (display z))
13+
    (do ((i 0 (add1 i)))
14-
                    (set! z
14+
      ((>= i nrow) (close-input-port inport) mat)
15-
                          (+ z (* (vector-ref x i) (vector-ref y i)))))))
15+
      (let ((row (make-vector ncol)))
16-
          (else (display "Error: different sizes of vectors!")))))
16+
        (do ((j 0 (add1 j)))
17
          ((>= j ncol) (vector-set! mat i row))
18
          (vector-set! row j (read inport)))))))
19
20-
HW4 #5 B
20+
;display vector
21-
ScalarProductRecursive.rkt by Ryan Liszewski 
21+
(define (display-vector v)
22-
Calculates the scalar product of the given 2 vectors using recursion
22+
  (do ((i 0 (add1 i)))
23-
produces an error message when the vectors have different lengths
23+
    ((>= i (vector-length v)) (display ""))
24
    (display (vector-ref v i)) (display " ")))
25
26-
(define scalar-product 
26+
;return i-th row
27-
  (lambda (x y)
27+
(define (ro filename i)
28-
    ;If they equal the same size
28+
  (define mat (read-matrix filename))
29-
    (cond ((= (vector-length x) (vector-length y))
29+
  (vector-ref mat i))
30-
            ;FInd scalar product
30+
;display i-th row
31-
           (recur (vector->list x) (vector->list y)))
31+
(define (row filename i)
32-
           ;else the size are not the same
32+
  (display-vector (ro filename (- i 1))))
33-
          (else (display "Error: different sizes of vectors!")))))
33+
34-
;Calls function recursively
34+
;return j-th col
35-
(define recur
35+
(define (co filename j)
36-
    (lambda (list1 list2)
36+
  (define mat (read-matrix filename))
37-
      (cond ((null? (cdr list1)) (* (car list1) (car list2)))
37+
  (define nrow (vector-length mat))
38-
            (else (+ (* (car list1) (car list2))
38+
  (define column (make-vector nrow))
39-
                     (recur (cdr list1) (cdr list2)))))))
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)))))