use flvectors in spectralnorm-unsafe
Add input info for spectralnorm-unsafe svn: r17306
This commit is contained in:
parent
145ed582b3
commit
3687048bbb
|
@ -36,6 +36,7 @@
|
|||
("sieve.ss" "1200")
|
||||
("spellcheck.ss")
|
||||
("spectralnorm.ss" "5500")
|
||||
("spectralnorm-unsafe.ss" "5500")
|
||||
("strcat.ss" "40000")
|
||||
("sumcol.ss" #f ,(lambda () (mk-sumcol-input)))
|
||||
("wc.ss")
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
scheme/unsafe/ops)
|
||||
|
||||
(define (Approximate n)
|
||||
(let ([u (make-vector n 1.0)]
|
||||
[v (make-vector n 0.0)])
|
||||
(let ([u (make-flvector n 1.0)]
|
||||
[v (make-flvector n 0.0)])
|
||||
;; 20 steps of the power method
|
||||
(for ([i (in-range 10)])
|
||||
(MultiplyAtAv n u v)
|
||||
|
@ -21,9 +21,9 @@
|
|||
(let loop ([i 0][vBv 0.0][vv 0.0])
|
||||
(if (= i n)
|
||||
(sqrt (unsafe-fl/ vBv vv))
|
||||
(let ([vi (unsafe-vector-ref v i)])
|
||||
(let ([vi (unsafe-flvector-ref v i)])
|
||||
(loop (unsafe-fx+ 1 i)
|
||||
(unsafe-fl+ vBv (unsafe-fl* (unsafe-vector-ref u i) vi))
|
||||
(unsafe-fl+ vBv (unsafe-fl* (unsafe-flvector-ref u i) vi))
|
||||
(unsafe-fl+ vv (unsafe-fl* vi vi))))))))
|
||||
|
||||
;; return element i,j of infinite matrix A
|
||||
|
@ -39,22 +39,22 @@
|
|||
;; multiply vector v by matrix A
|
||||
(define (MultiplyAv n v Av)
|
||||
(for ([i (in-range n)])
|
||||
(unsafe-vector-set! Av i
|
||||
(unsafe-flvector-set! Av i
|
||||
(for/fold ([r 0.0])
|
||||
([j (in-range n)])
|
||||
(unsafe-fl+ r (unsafe-fl* (A i j) (unsafe-vector-ref v j)))))))
|
||||
(unsafe-fl+ r (unsafe-fl* (A i j) (unsafe-flvector-ref v j)))))))
|
||||
|
||||
;; multiply vector v by matrix A transposed
|
||||
(define (MultiplyAtv n v Atv)
|
||||
(for ([i (in-range n)])
|
||||
(unsafe-vector-set! Atv i
|
||||
(for/fold ([r 0.0])
|
||||
([j (in-range n)])
|
||||
(unsafe-fl+ r (unsafe-fl* (A j i) (unsafe-vector-ref v j)))))))
|
||||
(unsafe-flvector-set! Atv i
|
||||
(for/fold ([r 0.0])
|
||||
([j (in-range n)])
|
||||
(unsafe-fl+ r (unsafe-fl* (A j i) (unsafe-flvector-ref v j)))))))
|
||||
|
||||
;; multiply vector v by matrix A and then by matrix A transposed
|
||||
(define (MultiplyAtAv n v AtAv)
|
||||
(let ([u (make-vector n 0.0)])
|
||||
(let ([u (make-flvector n 0.0)])
|
||||
(MultiplyAv n v u)
|
||||
(MultiplyAtv n u AtAv)))
|
||||
|
||||
|
@ -62,3 +62,4 @@
|
|||
(real->decimal-string
|
||||
(Approximate (command-line #:args (n) (string->number n)))
|
||||
9))
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user