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))))) |