19 lines
534 B
Racket
19 lines
534 B
Racket
#lang racket
|
|
(require math/matrix)
|
|
(define T matrix-transpose)
|
|
|
|
(define (convolution-matrix f m n)
|
|
(define l (matrix-num-rows f))
|
|
(for*/matrix m n ([i (in-range 0 m)] [j (in-range 0 n)])
|
|
(cond [(or (< i j) (>= i (+ j l))) 0]
|
|
[(matrix-ref f (- i j) 0)])))
|
|
|
|
(define (least-square X y)
|
|
(matrix-solve (matrix* (T X) X) (matrix* (T X) y)))
|
|
|
|
(define (deconvolve g f)
|
|
(define lg (matrix-num-rows g))
|
|
(define lf (matrix-num-rows f))
|
|
(define lh (+ (- lg lf) 1))
|
|
(least-square (convolution-matrix f lg lh) g))
|