
* Fixed type of `matrix-expt'
* Made matrix functions respect `array-strictness' parameter (mostly
wrapping functions with `parameterize' and return values with
`array-default-strictness'; reindentation makes changes look larger)
* Added strictness tests
(cherry picked from commit f40ad2ca9d
)
192 lines
7.3 KiB
Racket
192 lines
7.3 KiB
Racket
#lang racket/base
|
|
|
|
(require typed/untyped-utils)
|
|
|
|
(require "private/matrix/matrix-arithmetic.rkt"
|
|
"private/matrix/matrix-conversion.rkt"
|
|
"private/matrix/matrix-syntax.rkt"
|
|
"private/matrix/matrix-comprehension.rkt"
|
|
"private/matrix/matrix-types.rkt"
|
|
"private/matrix/matrix-2d.rkt"
|
|
;;"private/matrix/matrix-expt.rkt" ; all use require/untyped-contract
|
|
;;"private/matrix/matrix-gauss-elim.rkt" ; all use require/untyped-contract
|
|
(except-in "private/matrix/matrix-solve.rkt"
|
|
matrix-determinant
|
|
matrix-inverse
|
|
matrix-solve)
|
|
(except-in "private/matrix/matrix-constructors.rkt"
|
|
vandermonde-matrix)
|
|
(except-in "private/matrix/matrix-basic.rkt"
|
|
matrix-dot
|
|
matrix-cos-angle
|
|
matrix-angle
|
|
matrix-normalize
|
|
matrix-conjugate
|
|
matrix-hermitian
|
|
matrix-trace
|
|
matrix-normalize-rows
|
|
matrix-normalize-cols)
|
|
(except-in "private/matrix/matrix-subspace.rkt"
|
|
matrix-col-space)
|
|
(except-in "private/matrix/matrix-operator-norm.rkt"
|
|
matrix-basis-cos-angle
|
|
matrix-basis-angle)
|
|
;;"private/matrix/matrix-qr.rkt" ; all use require/untyped-contract
|
|
;;"private/matrix/matrix-lu.rkt" ; all use require/untyped-contract
|
|
;;"private/matrix/matrix-gram-schmidt.rkt" ; all use require/untyped-contract
|
|
)
|
|
|
|
(require/untyped-contract
|
|
(begin (require "private/matrix/matrix-types.rkt"))
|
|
"private/matrix/matrix-expt.rkt"
|
|
[matrix-expt ((Matrix Number) Integer -> (Matrix Number))])
|
|
|
|
(require/untyped-contract
|
|
(begin (require "private/matrix/matrix-types.rkt"
|
|
"private/matrix/matrix-gauss-elim.rkt"))
|
|
"private/matrix/matrix-gauss-elim.rkt"
|
|
[matrix-gauss-elim
|
|
(case-> ((Matrix Number) -> (Values (Matrix Number) (Listof Index)))
|
|
((Matrix Number) Any -> (Values (Matrix Number) (Listof Index)))
|
|
((Matrix Number) Any Any -> (Values (Matrix Number) (Listof Index)))
|
|
((Matrix Number) Any Any Pivoting -> (Values (Matrix Number) (Listof Index))))]
|
|
[matrix-row-echelon
|
|
(case-> ((Matrix Number) -> (Matrix Number))
|
|
((Matrix Number) Any -> (Matrix Number))
|
|
((Matrix Number) Any Any -> (Matrix Number))
|
|
((Matrix Number) Any Any Pivoting -> (Matrix Number)))])
|
|
|
|
(require/untyped-contract
|
|
(begin (require "private/matrix/matrix-types.rkt"))
|
|
"private/matrix/matrix-solve.rkt"
|
|
[matrix-determinant
|
|
((Matrix Number) -> Number)]
|
|
[matrix-inverse
|
|
(All (A) (case-> ((Matrix Number) -> (Matrix Number))
|
|
((Matrix Number) (-> A) -> (U A (Matrix Number)))))]
|
|
[matrix-solve
|
|
(All (A) (case->
|
|
((Matrix Number) (Matrix Number) -> (Matrix Number))
|
|
((Matrix Number) (Matrix Number) (-> A) -> (U A (Matrix Number)))))])
|
|
|
|
(require/untyped-contract
|
|
(begin (require "private/matrix/matrix-types.rkt"))
|
|
"private/matrix/matrix-constructors.rkt"
|
|
[vandermonde-matrix ((Listof Number) Integer -> (Matrix Number))])
|
|
|
|
(require/untyped-contract
|
|
(begin (require "private/matrix/matrix-types.rkt"))
|
|
"private/matrix/matrix-basic.rkt"
|
|
[matrix-dot
|
|
(case-> ((Matrix Number) -> Nonnegative-Real)
|
|
((Matrix Number) (Matrix Number) -> Number))]
|
|
[matrix-cos-angle
|
|
((Matrix Number) (Matrix Number) -> Number)]
|
|
[matrix-angle
|
|
((Matrix Number) (Matrix Number) -> Number)]
|
|
[matrix-normalize
|
|
(All (A) (case-> ((Matrix Number) -> (Matrix Number))
|
|
((Matrix Number) Real -> (Matrix Number))
|
|
((Matrix Number) Real (-> A) -> (U A (Matrix Number)))))]
|
|
[matrix-conjugate
|
|
((Matrix Number) -> (Matrix Number))]
|
|
[matrix-hermitian
|
|
((Matrix Number) -> (Matrix Number))]
|
|
[matrix-trace
|
|
((Matrix Number) -> Number)]
|
|
[matrix-normalize-rows
|
|
(All (A) (case-> ((Matrix Number) -> (Matrix Number))
|
|
((Matrix Number) Real -> (Matrix Number))
|
|
((Matrix Number) Real (-> A) -> (U A (Matrix Number)))))]
|
|
[matrix-normalize-cols
|
|
(All (A) (case-> ((Matrix Number) -> (Matrix Number))
|
|
((Matrix Number) Real -> (Matrix Number))
|
|
((Matrix Number) Real (-> A) -> (U A (Matrix Number)))))])
|
|
|
|
(require/untyped-contract
|
|
(begin (require "private/matrix/matrix-types.rkt"))
|
|
"private/matrix/matrix-subspace.rkt"
|
|
[matrix-col-space
|
|
(All (A) (case-> ((Matrix Number) -> (Matrix Number))
|
|
((Matrix Number) (-> A) -> (U A (Matrix Number)))))])
|
|
|
|
(require/untyped-contract
|
|
(begin (require "private/matrix/matrix-types.rkt"))
|
|
"private/matrix/matrix-operator-norm.rkt"
|
|
[matrix-basis-cos-angle
|
|
((Matrix Number) (Matrix Number) -> Number)]
|
|
[matrix-basis-angle
|
|
((Matrix Number) (Matrix Number) -> Number)])
|
|
|
|
(require/untyped-contract
|
|
(begin (require "private/matrix/matrix-types.rkt"))
|
|
"private/matrix/matrix-qr.rkt"
|
|
[matrix-qr
|
|
(case-> ((Matrix Number) -> (Values (Matrix Number) (Matrix Number)))
|
|
((Matrix Number) Any -> (Values (Matrix Number) (Matrix Number))))])
|
|
|
|
(require/untyped-contract
|
|
(begin (require "private/matrix/matrix-types.rkt"))
|
|
"private/matrix/matrix-lu.rkt"
|
|
[matrix-lu
|
|
(All (A) (case-> ((Matrix Number) -> (Values (Matrix Number) (Matrix Number)))
|
|
((Matrix Number) (-> A) -> (Values (U A (Matrix Number)) (Matrix Number)))))])
|
|
|
|
(require/untyped-contract
|
|
(begin (require "private/matrix/matrix-types.rkt"
|
|
"private/array/array-struct.rkt"))
|
|
"private/matrix/matrix-gram-schmidt.rkt"
|
|
[matrix-gram-schmidt
|
|
(case-> ((Matrix Number) -> (Array Number))
|
|
((Matrix Number) Any -> (Array Number))
|
|
((Matrix Number) Any Integer -> (Array Number)))]
|
|
[matrix-basis-extension
|
|
((Matrix Number) -> (Array Number))])
|
|
|
|
(provide (all-from-out
|
|
"private/matrix/matrix-arithmetic.rkt"
|
|
"private/matrix/matrix-constructors.rkt"
|
|
"private/matrix/matrix-conversion.rkt"
|
|
"private/matrix/matrix-syntax.rkt"
|
|
"private/matrix/matrix-basic.rkt"
|
|
"private/matrix/matrix-subspace.rkt"
|
|
"private/matrix/matrix-solve.rkt"
|
|
"private/matrix/matrix-operator-norm.rkt"
|
|
"private/matrix/matrix-comprehension.rkt"
|
|
"private/matrix/matrix-types.rkt"
|
|
"private/matrix/matrix-2d.rkt")
|
|
;; matrix/matrix-expt.rkt
|
|
matrix-expt
|
|
;; matrix-gauss-elim.rkt
|
|
matrix-gauss-elim
|
|
matrix-row-echelon
|
|
;; matrix-solve.rkt
|
|
matrix-determinant
|
|
matrix-inverse
|
|
matrix-solve
|
|
;; matrix-constructors.rkt
|
|
vandermonde-matrix
|
|
;; matrix-basic.rkt
|
|
matrix-dot
|
|
matrix-cos-angle
|
|
matrix-angle
|
|
matrix-normalize
|
|
matrix-conjugate
|
|
matrix-hermitian
|
|
matrix-trace
|
|
matrix-normalize-rows
|
|
matrix-normalize-cols
|
|
;; matrix-subspace.rkt
|
|
matrix-col-space
|
|
;; matrix-operator-norm.rkt
|
|
matrix-basis-cos-angle
|
|
matrix-basis-angle
|
|
;; matrix-qr.rkt
|
|
matrix-qr
|
|
;; matrix-lu.rkt
|
|
matrix-lu
|
|
;; matrix-gram-schmidt.rkt
|
|
matrix-gram-schmidt
|
|
matrix-basis-extension
|
|
)
|