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